你好我有小问题。我在sf2中从未做过表单验证器,所以我不知道应该从哪里开始。我有一个字段'用户名',它在数据库中是唯一的,所以我该怎么试呢?
我的代码:
- > ENTITY
/**
* @var string $nick_allegro
*
* @ORM\Column(name="nick_allegro", type="string", length=255, unique=true, nullable=true)
*/
private $nick_allegro;
- > FORM
public function buildForm(FormBuilder $builder, array $options)
{
$builder
->add('nick_allegro')
;
}
public function getDefaultOptions(array $options) {
return array(
'data_class' => 'My\FrontendBundle\Entity\Licence',
);
}
- >控制器
/**
* Displays a form to create a new Licence entity.
*
* @Route("/new", name="licence_new")
* @Template()
*/
public function newAction()
{
$entity = new Licence();
$form = $this->createForm(new LicenceType(), $entity);
return array(
'entity' => $entity,
'form' => $form->createView()
);
}
/**
* Creates a new Licence entity.
*
* @Route("/create", name="licence_create")
* @Method("post")
* @Template("MyFrontendBundle:Licence:new.html.twig")
*/
public function createAction()
{
$entity = new Licence();
$request = $this->getRequest();
$form = $this->createForm(new LicenceType(), $entity);
$form->bindRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getEntityManager();
$em->persist($entity);
$em->flush();
return $this->redirect($this->generateUrl('licence_show', array('id' => $entity->getId())));
}
return array(
'entity' => $entity,
'form' => $form->createView()
);
}
- >查看
<form action="{{ path('licence_create') }}" method="post" {{
form_enctype(form) }}>
{{ form_widget(form) }}
<p>
<button type="submit">Create</button>
</p> </form>
答案 0 :(得分:7)
您需要在symfony中使用Unique Entity来验证模型中的特定字段是否唯一。
为了帮助你(如果你有一个名为nick
的字段):
use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* @ORM\Entity
* @UniqueEntity("nick")
*/
class User
{
/**
* @var string $email
*
* @ORM\Column(name="nick", type="string", length=255, unique=true)
*/
private $nick;
验证将在您在实体中声明约束时直接生效。 因此,您已经可以检查控制器中的validaiton。
if ( 'POST' === $request->getMethod()) {
$form->bind($request);
if ($form->isValid())
{
//do something if the form is valid
}
}
答案 1 :(得分:1)
这很简单。足够添加文件实体@ORM\Column this "unique=true"
示例:
class User
{
/**
* @var string $email
*
* @ORM\Column(name="email", type="string", length=255, unique=true)
* @Assert\Email()
*/
protected $email;
}
答案 2 :(得分:0)
请记住,sf2.1中的表单处理稍有改动,所以请务必查看正确的文档:
Validation is done in many ways,其中包含实体字段注释,在您的情况下,您需要UniqueEntity
注释。
请务必在线查看所有symfony2文档,因为这是解决此问题的最佳方式。