2015年9月16日水曜日

Silexで入力データのバリデーション

Silex(1.3)で入力データのバリデーションです。まず、ValidatorServiceProviderを登録します。そうすると、

$errors = $app['validator']->validateValue(チェックするデータ, チェク規則);

という感じで、使えます。

PHP
$app->register(new Silex\Provider\ValidatorServiceProvider());

use Symfony\Component\Validator\Constraints as Assert;

$app->post('/login', function() use ($app){ 
  // POSTデータ
  $email = $app['request']->get('email');
  $password = $app['request']->get('password');

  // 入力データの配列
  $input = array(
    'email' => $email,
    'password' =>  $password,
  );

  // バリデーション規則の配列
  $constraint = new Assert\Collection(array(
    'email' => new Assert\Email(),
    'password' => new Assert\Length(array('min' => 10)),
  ));

  // エラーの取得
  $errors = $app['validator']->validateValue($input, $constraint);

  if (count($errors) > 0) {
  // バリデーションNG
    return $app['twig']->render('login.twig', array(
      'errors' => $errors,
    ));
  } else {
  // バリデーション成功後の処理
  }
});
Twig
{% for error in errors %}
  {{ error.propertypath }} {{ error.message }}
{% endfor %}
エラーメッセージが英語になりますが、どこかで日本語翻訳の設定ができるでしょう。それは、また後で。

実際に設定してみたサイトがこちら

参考サイト
ValidatorServiceProvider(Silex Documentation)
symfony/Validator(GitHub)

0 件のコメント:

コメントを投稿