【问题标题】:display an error message in symfony2在 symfony2 中显示错误信息
【发布时间】:2014-05-25 10:18:45
【问题描述】:

我是symfony的新手,我做了一个表格注册新用户,表格很简单;电子邮件、姓名和密码。我想根据异常显示错误消息。示例(用户名存在)。我的代码工作正常,但是如何捕获异常并显示错误???

public function signupAction(Request $request) {
    if ($request->getMethod() == 'POST') {
        $username = $request->get('username');
        $firstname = $request->get('firstname');
        $password = $request->get('password');

        $user = new Users();
        $user->setFirstName($firstname);
        $user->setPassword(sha1($password));
        $user->setUserName($username);
        $em = $this->getDoctrine()->getEntityManager();
        $em->persist($user);
        $em->flush();
    }

    return $this->render('LoginLoginBundle:Default:signup.html.twig');
}

谢谢

【问题讨论】:

    标签: symfony flush


    【解决方案1】:

    您可以使用您自己的 FormType 类来完成,如下所示:

    class UserType extends AbstractType
    {
        /**
         * @param FormBuilderInterface $builder
         * @param array $options
         */
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder
                ->add('firstname')
                ->add('username')
                ->add('password')
            ;
        }
    
        ...
    }
    

    在你的控制器中你会这样写:

    /**
     * Displays a form to create a new User entity.
     *
     * @Method("GET")
     * @Template()
     */
    public function newAction()
    {
        $entity = new User();
        $form   = $this->createCreateForm($entity);
    
        return array(
            'entity' => $entity,
            'form'   => $form->createView(),
        );
    }
    
    /**
     * @Method("POST")
     * @Template("CoreBundle:User:new.html.twig")
     */
    public function createAction(Request $request)
    {
        $entity     = new User();
        $form       = $this->createCreateForm($entity);
        $form->handleRequest($request);
    
        if ($form->isValid()) {
            $em = $this->getDoctrine()->getManager();
            $em->persist($entity);
            $em->flush();
    
            return $this->redirect($this->generateUrl('user_show', array('id' => $entity->getId())));
        }
    
        return array(
            'entity' => $entity,
            'form'   => $form->createView(),
        );
    }
    
    /**
     * Creates a form to create a User entity.
     *
     * @param User $entity The entity
     *
     * @return \Symfony\Component\Form\Form The form
     */
    private function createCreateForm(User $entity)
    {
        $form = $this->createForm(new UserType(), $entity, array(
            'action' => $this->generateUrl('user_create'),
            'method' => 'POST',
        ));
    
        $form->add('submit', 'submit', array('label' => 'Create'));
    
        return $form;
    }
    

    并且在你的实体用户中你需要添加一个约束来确保你的用户名是唯一的:

    use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
    
    /**
     * @ORM\Entity
     * @UniqueEntity("username")
     */
    class Author{
        ...
    }
    

    这样,如果表单无效或使用了用户名字段,您将呈现带有错误的用户表单。

    您可以在http://symfony.com/doc/current/reference/constraints.html 中阅读有关约束的更多信息

    如果您想管理您的用户帐户,我建议您查看 FOSUserBundle。 https://github.com/FriendsOfSymfony/FOSUserBundle

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-25
      • 2013-08-20
      • 2019-02-03
      • 1970-01-01
      • 1970-01-01
      • 2020-02-07
      • 2011-08-06
      相关资源
      最近更新 更多