0

コントローラーに次のコードがあります。

$form = $this->createFormBuilder()
                ->add('email', 'email', array(
                    'constraints' => array(new MaxLength(array('limit' => 255, 'message' => 'email.maxlength'))),
                    'required' => true,
                    'attr' => array('oninvalid' => "setCustomValidity('" . $this->get('translator')->trans('email.oninvalid', array(), 'validators') . "')",
                        'placeholder' => $this->get('translator')->trans('email.placeholder', array(), 'validators'),)
                ))
                ->getForm();
if ($request->getMethod() == 'POST') {
        $form->bindRequest($request);
        $formData = $form->getData();

        if ($form->isValid()) {
        $formData->getEmail();
                $em = $this->getDoctrine()->getManager();
                $rep = $em->getRepository('FrontendAccountBundle:User');
                $q = $rep->createQueryBuilder('u')
                        ->join('u.state', 's')
                        ->where('u.email = :email')
                        ->andWhere('s.id = :sid')
                        ->setParameters(array('email' => $email))
                        ->getQuery();

                try {
                    $user = $q->getSingleResult();
                } catch (\Doctrine\Orm\NoResultException $e) {
                    //return $this->redirect($this->generateUrl('frontend_account_unknown_email'));
                }
} 
return $this->render('FrontendAccountBundle::send_new_activation_link.html.php', array(
                'form' => $form->createView()
            ));

新しいアクションを作成する代わりに、データベースでメールアドレスが不明であるという形式でエラーをスローする方法はありますか?

または、ドキュメントで何かを見逃しましたか?

4

2 に答える 2

1

エラーをスローしたい場合は、最初にエラーをキャッチしないか、すべての例外をキャッチして、必要なものだけを再スローします。

フォームにエラーを追加する場合は、FormErrorを作成して、フォームに追加するだけです。

use Symfony\Component\Form\FormError;

...

catch (\Doctrine\Orm\NoResultException $e) {
    $form->addError(new FormError('the e-mail was not found'));
}
于 2013-01-29T21:00:33.153 に答える
0

完全なコードを見たい人向け。

$form->addError(new FormError('the e-mail was not found'));

$templating = $this->container->get('templating');

$response = new Response($templating->render('FrontendAccountBundle::send_new_activation_link.html.php', array(
                         'form' => $form->createView()
                         )));
$response->send();
于 2013-01-30T15:07:26.777 に答える