6

こんにちは、小さな問題があります。私は sf2 でフォームバリデーターをやったことがないので、どこから始めるべきかわかりません。「ユーザー名」フィールドが 1 つあり、データベース内で一意なので、どうすれば試すことができますか?

私のコード:

->エンティティ

 /**
  * @var string $nick_allegro
  *
  * @ORM\Column(name="nick_allegro", type="string", length=255, unique=true, nullable=true)
  */
 private $nick_allegro;

->フォーム

 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>
4

3 に答える 3

8

モデル内の特定のフィールドが一意であることを検証するには、symfony でUnique Entityを使用する必要があります。

あなたを少し助けるために(あなたがと呼ばれるフィールドを持っている場合nick):

1/あなたのエンティティで

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;

検証は、エンティティで制約をアサートしたときに直接有効になります。したがって、コントローラーで検証を既に確認できます。

2/コントローラーで

if ( 'POST' === $request->getMethod()) {

        $form->bind($request);

        if ($form->isValid())
        {
            //do something if the form is valid
        }
}
于 2012-09-08T12:27:16.400 に答える
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;
}
于 2016-06-08T13:38:46.817 に答える
0

sf2.1 でのフォーム処理が少し変更されたことに注意してください。そのため、適切なドキュメントを確認してください。

検証は多くの方法で行われ、とりわけエンティティ フィールドに対する注釈が使用されます。この場合、UniqueEntity注釈が必要です。

symfony2 のすべてのドキュメントをオンラインで確認してください。これが問題を解決する最良の方法だからです。

于 2012-09-08T12:27:43.620 に答える