PHP   发布时间:2022-04-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了php – 如何使用表单编辑symfony 2中的用户权限?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我在symfony 2 FOSUserBundle中创建新的/编辑用户表单时遇到问题.我想让管理员从下拉列表或单选按钮列表中选择用户角色,但我似乎无法让它工作.我在这里找到了这个答案 How can I pass a full security roles list/hierarchy to a FormType class in Symfony2?,这是我能找到的最相关的东西,但它不起作用.

这是目前的UserType表单.我想从容器中获取角色但是我似乎无法在没有它抛出错误的情况下工作.这些角色将正确填充下拉列表,但它不会显示当前分配的角色,也不会允许更新信息,因为它预期它是一个数组$entity-> addRoles(array(‘ROLE_SUPER_ADMIN’) );,但它只是作为一个字符串提交.

namespace Wes\AdminBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

class UserType extends AbstractType
{
    private $roles;

    public function __construct($roles) {
        $this->roles = $roles;
    }

    public function buildForm(FormBuilderInterface $builder,array $options)
    {
        $builder
            ->add('username')
            ->add('email')
            ->add('enabled')
            ->add('roles','choice',array(
               'choices' => $this->flattenArray($this->roles),))
            ->add('firstName')
            ->add('lastName')
        ;
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Wes\AdminBundle\Entity\User','roles' => null,'userRole' => null,));
    }

    public function getName()
    {
        return 'wes_adminbundle_usertype';
    }

    private function flattenArray(array $data)
    {
        $returnData = array();

        foreach($data as $key => $value)
        {
            $tempValue = str_replace("ROLE_",'',$key);
            $tempValue = ucwords(strtolower(str_replace("_",' ',$tempvalue)));
            $returnData[$key] = $tempValue;
        }
        return $returnData;
    }
}

这是控制器.

public function editAction($id)
{
    $em = $this->getDoctrine()->getManager();

    $entity = $em->getRepository('WesAdminBundle:User')->find($id);
    if (!$entity) {
        throw $this->createNotFoundException('Unable to find User entity.');
    }

    $editForm = $this->createForm(new UserType($this->container->getParameter('security.role_hierarchy.roles')),$entity);
    $deleteForm = $this->createdeleteForm($id);

    return $this->render('WesAdminBundle:User:edit.html.twig',array(
        'entity'      => $entity,'edit_form'   => $editForm->createView(),'delete_form' => $deleteForm->createView(),));
}

/**
 * Edits an exisTing User entity.
 *
 */
public function updateAction(request $request,$id)
{
    $em = $this->getDoctrine()->getManager();

    $entity = $em->getRepository('WesAdminBundle:User')->find($id);

    if (!$entity) {
        throw $this->createNotFoundException('Unable to find User entity.');
    }

    $deleteForm = $this->createdeleteForm($id);
    $editForm = $this->createForm(new UserType($this->container->getParameter('security.role_hierarchy.roles')),$entity);
    $editForm->bind($request);

    if ($editForm->isValid()) {
        $em->persist($entity);
        $em->flush();

        return $this->redirect($this->generateUrl('wes_admin_user_edit',array('id' => $id)));
    }

    return $this->render('WesAdminBundle:User:edit.html.twig',));
}

我已经打了几天了,我似乎无法让它正常工作.有什么想法吗?

解决方法

使用FOSUserBundle提供的useRMANager而不是自定义持久性方法,因为在将数组存储到数据库之前需要对其进行序列化.
$useRMANager = $this->container->get('fos_user.user_R_921_11845@anager');
$user = $useRMANager->findUserBy(array('id' => $id));

$editForm = $this->createForm(new UserType($this->container->getParameter('security.role_hierarchy.roles')),$user);

if ($editForm->isValid()) {
    $useRMANager->updateUser($user);

    return $this->redirect($this->generateUrl('wes_admin_user_edit',array('id' => $id)));
}

有关详细信息,请参阅https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/user_manager.rst(已编辑).

大佬总结

以上是大佬教程为你收集整理的php – 如何使用表单编辑symfony 2中的用户权限?全部内容,希望文章能够帮你解决php – 如何使用表单编辑symfony 2中的用户权限?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。