形成whith createForm不起作用,我无法获得断言信息

时间:2015-12-16 11:33:09

标签: forms symfony controller entity

我已经要问一个关于FosUserBundle配置的类似断言问题的问题。

但是现在我试图运行一个简单的表单,但即使使用最简单的表单=>什么都没发生。

当我点击提交时:

1)isValid()保持为假

2)当输入名称为空/空时,不显示断言消息

UserTmp.php(entity)

<?php

namespace BISSAP\UserBundle\Entity;

use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * BISSAP\UserBundle\Entity\User
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="BISSAP\UserBundle\Entity\UserRepository")
 */
class Usertmp 
{

    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\Column(name="name", type="string", length=255)
     *
     * @Assert\NotBlank(message="Please enter your name.", groups={"Registration", "Profile"})
     * @Assert\Length(
     *     min=3,
     *     max=255,
     *     minMessage="The name is too short.",
     *     maxMessage="The name is too long.",
     *     groups={"Registration", "Profile"}
     * )
     */
    private $name;



    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set name
     *
     * @param string $name
     * @return Usertmp
     */
    public function setName($name)
    {
        $this->name = $name;

        return $this;
    }

    /**
     * Get name
     *
     * @return string 
     */
    public function getName()
    {
        return $this->name;
    }
}

UserType.php

<?php

namespace BISSAP\ForumBundle\Form;

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

class UserType extends AbstractType
{


     /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
            $builder
                    ->add('name', 'text', array('required' => false))
                    ->add('Envoyer', 'submit', array(
                        'attr' => array(
                        'class' => 'btn right-flt'
                        )));


    }

    /**
     * @param OptionsResolverInterface $resolver
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'BISSAP\UserBundle\Entity\Usertmp'
        ));
    }

    public function configureOptions(OptionsResolver $resolver) 
    { 
        $resolver->setDefaults(array( 'data_class' => $this->class, 'intention' => 'Registration', )); 
    }

    /**
     * @return string
     */
    public function getName()
    {
        return 'bissap_forumbundle_user';
    }
}

TController.php

<?php

namespace BISSAP\ForumBundle\Controller;

use Doctrine\Common\DataFixtures\FixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;
use BISSAP\ForumBundle\Form\UserType;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use BISSAP\UserBundle\Entity\Usertmp;

class TController extends Controller
{

  public function indexAction()
  {
    $entity = new Usertmp();
    $form = $this->createForm(new UserType(), $entity);

    if ($form->isValid())
    {
        return $this->redirectToRoute('bissap_forum_index');
    }

    return $this->render('BISSAPForumBundle:T:index.html.twig', array('form'=> $form->createView(), 'errors_tmp' => $this->getErrorMessages($form)));
  }

   private function getErrorMessages(\Symfony\Component\Form\Form $form) 
   {      
        $errors = array();
        foreach ($form->getErrors(true, false) as $error) {
        // My personnal need was to get translatable messages
        // $errors[] = $this->trans($error->current()->getMessage());
        $errors[] = $error->current()->getMessage();
        }

        return $errors;
    }

}
?>

index.html.twig

----> {{form( form )}}
{% for error in errors_tmp %}
    <div>error : {{ error }}</div>
{% endfor %} 

2 个答案:

答案 0 :(得分:1)

因此,表单不起作用原因:$form->handleRequest($request);错过了TController.php

答案 1 :(得分:0)

UserType.php中,尝试:

$resolver->setDefaults(array( 'data_class' => $this->class, 'intention' => 'Registration', 'validation_groups' => array('registration'),)); 

您还可以在TController.php中设置验证组,而不是在UserType上对其进行硬编码:

$form = $this->createForm(new UserType(), $entity, array('validation_groups' => 'registration'));

来源:Validation Groups

同样在您的UserType.php中,您说该名称不是必需的,但同时您要声明它是否为空白:

->add('name', 'text', array('required' => false))

尝试删除该选项。