Symfony-validation

提供:Dev Guides
移動先:案内検索

symfony-検証

検証は、アプリケーションを設計する際の最も重要な側面です。 着信データを検証します。 この章では、フォームの検証について詳しく説明します。

検証の制約

バリデータは、制約に対してオブジェクトを検証するように設計されています。 オブジェクトを検証する場合は、1つまたは複数の制約をそのクラスにマップしてから、それを検証サービスに渡します。 デフォルトでは、オブジェクトを検証するときに、対応するクラスのすべての制約がチェックされ、実際に通過するかどうかが確認されます。 symfonyは次の注目すべき検証制約をサポートします。

NotBlank

プロパティが空白ではないことを検証します。 その構文は次のとおりです-

namespace AppBundle\Entity;
use Symfony\Component\Validator\Constraints as Assert;

class Student {
  /* *
     * @Assert\NotBlank()
   */
   protected $studentName;
}

このNotBlank制約は、studentNameプロパティが空白にならないようにします。

NotNull

値が厳密にnullと等しくないことを検証します。 その構文は次のとおりです-

namespace AppBundle\Entity;
use Symfony\Component\Validator\Constraints as Assert;

class Student {
  /* *
     * @Assert\NotNull()
   */
   protected $studentName;
}

Eメール

値が有効なメールアドレスであることを検証します。 その構文は次のとおりです-

namespace AppBundle\Entity;
use Symfony\Component\Validator\Constraints as Assert;

class Student {
  /* *
     * @Assert\Email(
 *message = "The email '{{ value }}' is not a valid email.",
        * checkMX = true
 *)
  */
   protected $email;
}

無効です

値がnullと正確に等しいことを検証します。 その構文は次のとおりです-

namespace AppBundle\Entity;
use Symfony\Component\Validator\Constraints as Assert;

class Student {
  /* *
     * @Assert\IsNull()
   */
   protected $studentName;
}

長さ

指定された文字列の長さが最小値と最大値の間にあることを検証します。 その構文は次のとおりです-

namespace AppBundle\Entity;
use Symfony\Component\Validator\Constraints as Assert;

class Student {
  /**
 *@Assert\Length(
        * min = 5,
 *max = 25,
        * minMessage = "Your first name must be at least {{ limit }} characters long",
 *maxMessage = "Your first name cannot be longer than {{ limit }} characters"
     * )
   */
   protected $studentName;
}

範囲

指定された数値が最小値と最大値の間にあることを検証します。 その構文は次のとおりです-

namespace AppBundle\Entity;
use Symfony\Component\Validator\Constraints as Assert;
class Student {
  /* *
     * @Assert\Range(
 *min = 40,
        * max = 100,
 *minMessage = "You must be at least {{ limit }} marks”,
        * maxMessage = "Your maximum {{ limit }} marks”
 *)
  */
   protected $marks;
}

Date

値が有効な日付であることを検証します。 有効なYYYY-MM-DD形式に従います。 その構文は次のとおりです-

namespace AppBundle\Entity;
use Symfony\Component\Validator\Constraints as Assert;

class Student {
  /* *
     * @Assert\Date()
   */
   protected $joinedAt;
}

選択

この制約は、指定された値が指定された有効な選択肢のセットの1つであることを保証するために使用されます。 また、アイテムの配列内の各アイテムがそれらの有効な選択肢の1つであることを検証するためにも使用できます。 その構文は次のとおりです-

namespace AppBundle\Entity;
use Symfony\Component\Validator\Constraints as Assert;

class Student {
  /* *
     * @Assert\Choice(choices = {"male", "female"}, message = "Choose a valid gender.")
   */
   protected $gender;
}

ユーザーのパスワード

これにより、入力値が現在の認証済みユーザーのパスワードと等しいことが検証されます。 これは、ユーザーがパスワードを変更できるが、セキュリティのために古いパスワードを入力する必要があるフォームで役立ちます。 その構文は次のとおりです-

namespace AppBundle\Form\Model;
use Symfony\Component\Security\Core\Validator\Constraints as SecurityAssert;

class ChangePassword {
  /* *
     * @SecurityAssert\UserPassword(
 *message = "Wrong value for your current password"
     * )
   */
   protected $oldPassword;
}

この制約は、古いパスワードがユーザーの現在のパスワードと一致することを検証します。

検証例

検証の概念を理解するための簡単なアプリケーション例を作成しましょう。

  • ステップ1 *-検証アプリケーションを作成します。

次のコマンドを使用して、Symfonyアプリケーション validationsample を作成します。

symfony new validationsample

ステップ2 *-ファイル *FormValidation という名前のエンティティを、“ src/AppBundle/Entity/” *ディレクトリの下の“ FormValidation.php” *に作成します。 ファイルに次の変更を追加します。

FormValidation.php

<?php
namespace AppBundle\Entity;
use Symfony\Component\Validator\Constraints as Assert;

class FormValidation {
  /* *
     * @Assert\NotBlank()
   */
   protected $name;

  /* *
     * @Assert\NotBlank()
   */
   protected $id;
   protected $age;

  /* *
     * @Assert\NotBlank()
   */
   protected $address;
   public $password;

  /* *
     * @Assert\Email(
 *message = "The email '{{ value }}' is not a valid email.",
        * checkMX = true
 *)
  */
   protected $email;

   public function getName() {
      return $this->name;
   }
   public function setName($name) {
      $this->name = $name;
   }
   public function getId() {
      return $this->id;
   }
   public function setId($id) {
      $this->id = $id;
   }
   public function getAge() {
      return $this->age;
   }
   public function setAge($age) {
      $this->age = $age;
   }
   public function getAddress() {
      return $this->address;
   }
   public function setAddress($address) {
      $this->address = $address;
   }
   public function getEmail() {
      return $this->email;
   }
   public function setEmail($email) {
      $this->email = $email;
   }
}

ステップ3 *-StudentControllerで *validateAction メソッドを作成します。 ディレクトリ*“ src/AppBundle/Controller” に移動し、“ studentController.php” *ファイルを作成して、その中に次のコードを追加します。

StudentController.php

use AppBundle\Entity\FormValidation;
/* *
  * @Route("/student/validate")
*/
public function validateAction(Request $request) {
   $validate = new FormValidation();
   $form = $this->createFormBuilder($validate)
      ->add('name', TextType::class)
      ->add('id', TextType::class)
      ->add('age', TextType::class)
      ->add('address', TextType::class)
      ->add('email', TextType::class)
      ->add('save', SubmitType::class, array('label' => 'Submit'))
      ->getForm();

   $form->handleRequest($request);
   if ($form->isSubmitted() && $form->isValid()) {
      $validate = $form->getData();
      return new Response('Form is validated.');
   }
   return $this->render('student/validatel.twig', array(
      'form' => $form->createView(),
   ));
}

ここでは、Formクラスを使用してフォームを作成し、フォームを処理しました。 フォームが送信され、有効な場合、フォーム検証済みメッセージが表示されます。 それ以外の場合、デフォルトのフォームが表示されます。

  • ステップ4 *-StudentControllerで上記で作成したアクションのビューを作成します。 ディレクトリ「app/Resources/views/student/」*に移動します。 *「validatel.twig」*ファイルを作成し、その中に次のコードを追加します。
{% extends 'basel.twig' %}
{% block stylesheets %}
   <style>
      #simpleform {
         width:600px;
         border:2px solid grey;
         padding:14px;
      }
      #simpleform label {
         font-size:14px;
         float:left;
         width:300px;
         text-align:right;
         display:block;
      }
      #simpleform span {
         font-size:11px;
         color:grey;
         width:100px;
         text-align:right;
         display:block;
      }
      #simpleform input {
         border:1px solid grey;
         font-family:verdana;
         font-size:14px;
         color:light blue;
         height:24px;
         width:250px;
         margin: 0 0 10px 10px;
      }
      #simpleform textarea {
         border:1px solid grey;
         font-family:verdana;
         font-size:14px;
         color:light blue;
         height:120px;
         width:250px;
         margin: 0 0 20px 10px;
      }
      #simpleform select {
         margin: 0 0 20px 10px;
      }
      #simpleform button {
         clear:both;
         margin-left:250px;
         background: grey;
         color:#FFFFFF;
         border:solid 1px #666666;
         font-size:16px;
      }
   </style>
{% endblock %}

{% block body %}
   <h3>Student form validation:</h3>
   <div id = "simpleform">
      {{ form_start(form) }}
      {{ form_widget(form) }}
      {{ form_end(form) }}
   </div>
{% endblock %}

ここでは、フォームタグを使用してフォームを作成しました。

ステップ5 *-最後に、アプリケーション、 *http://localhost:8000/student/validate を実行します。

結果:最初のページ

初期ページ

結果:最終ページ

最終ページ