1

FOSUserBundle を使用して、Symfony プロジェクトのメンバー エリアを作成します。バックオフィスで、パスワードを知らずにユーザーを変更したいと考えています。どうやってするか?

4

2 に答える 2

1

FOSUserBundleUserエンティティは、他のエンティティと同様に機能します。必要なものは次の 2 つだけです。

コントローラーのアクション

AdminControllerあなたの、またはあなたがそれを呼びたいものを作成してください。

class AdminController extends Controller 
{

    /**
    * This action is responsible for the editing of existing user
    *
    * @param Request $request The Symfony2 Request Object
    * @param User    $user    The user that should be edited
    *
    * @return array|\Symfony\Component\HttpFoundation\RedirectResponse
    *
    * @Template()
    * @Route("/edit/{slug}", name="user_edit")
    * @Secure(roles="ROLE_ADMIN")
    * @ParamConverter("user", class="YourBundle:User")
    */
    public function editAction(Request $request, User $user)
    {
        $form = $this->createForm(
            new UserType(),
            $user
        );

        if ($request->getMethod() === 'POST') {
            $form->submit($this->getRequest());
            if ($form->isValid()) {

                $manager = $this->getDoctrine()->getManager();
                $manager->persist($event); 
                $manager->flush();

                $this->get('session')->getFlashBag()->add(
                    'success',
                    'The user has been updated successfully!'
                );

                // generate redirect somewhere... & return
            }
        }

        return array(
            'form' => $form->createView(),
            'user' => $user
        );
    }

ユーザーのフォーム タイプ

は次のtypeようになります。

class UserType extends AbstractType
{

    public function buildForm(FormBuilderInterface $builder, array $options)
    {

        $builder->add(
            'firstname',
            'text',
            array(
            'label' => 'Firstname',
            'required' => true,
            )
        );

        $builder->add(
            'lastname',
            'textarea',
            array(
            'label' => 'Lastname',
            'required' => true,
            )
        );

        // add more fields here if you want to....
    }

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

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(
            array(
            'data_class' => 'YourName\YourBundle\Entity\User'
            )
        );
    }

}

これにより、パスワードを知らなくても、データベース レコードを完全に制御できます。ドキュメントもチェックアウトします。

最後になりましたが、ステートメントを含めて、すべての定義とその他のパスを変更することを忘れないでくださいuse@Route

于 2013-09-26T08:17:20.470 に答える