エラーチェックについて

symfonyではValidateと呼ばれる。

・(プロジェクト名)/(アプリケーション名)/(モジュール名)/validateディレクトリに、
    値を渡す先のアクション名.ymlファイルを設置する
・設置したアクション名.ymlにエラーチェックのルールを記述する。
・エラーが無ければ、「execute+値を渡す先のアクション名」のアクションへ、
・エラーがあれば、「handleError+値を渡す先のアクション名」のアクションに遷移する
・テンプレートにエラーメッセージを表示させる。

上記の「値を渡す先のアクション名」というのは、呼び出し側のアクション名
(=画面と同意義)となるので注意する。

たとえば、AとBというアクション名があったとします。
Aで入力を行い、エラーがあればエラー処理をし、
エラーがなければ、DBへ登録し、完了画面を表示させるという処理の場合、
作成するファイル名、処理名は以下のようになる。

作成するymlファイル名:B.yml
エラーがない場合のアクション名:executeB.php
エラーがある場合のアクション名:handleErrorB.php

[記述例]
  public function executeB()
  {
      $comment = new CommentTbl();

      // 投稿テーブルID
      $comment -> setContriId($this -> getUser() -> getAttribute('contri_id'));
    // 氏名
      $comment -> setName($this -> getRequestParameter("com_name"));
    // タイトル
    $comment -> setTitle($this -> getRequestParameter("com_title"));
    // URL
    $comment -> setUrl($this -> getRequestParameter("com_url"));
    // コメント
    $comment -> setComment($this -> getRequestParameter("com_comment"));

    $comment -> save();

    $this -> message = "コメント投稿を完了しました。";
    $this -> returnUrl = "/index/contridetail/";
    $this -> setTemplate('../../common/templates/complete');
  }
-------------------------------------------------------------------------
  public function handleErrorB()
  {
      $this->forward('index', 'contridetail');
  }
------------------------------------------------------------------------
forwardの第二パラメータは、エラーになったときに戻すアクション名。

1:ymlファイルの記述方法
fields:
    nickname:(チェックする項目名)
       required:(必須であることをあらわす)
          msg: ニックネームを入力してください。(表示するエラーメッセージ)

一項目で複数のエラーチェックがある場合は、必要な分バリデータを
追加する。バリデータの種類については、symfonyの公式ページを参照のこと。

[記述例]
fields:
      nickname:
         required:
            msg: ニックネームを入力してください。
        sfStringValidator:
           min:          2
           min_error:    少なくとも2文字入力してください
           max:          100
           max_error:    100文字以下で入力してください

2:エラー発生時に入力値を残すには?
     $sf_params->get("フォームタグのnameに指定した内容")を
     フォームタグの中に指定すればよい。

     [記述例]
      <input type="text" name="nickname" size="20" value="<?php echo $sf_params->get("nickname")?>">

3:カスタムバリデーターについて
     複雑なルールでエラーチェックを行いたい場合、カスタムで
     バリデータを作成することができる。

     (プロジェクト名または、アプリケーション名)/lib/配下に
  validatorフォルダーを作成し、その中に
     カスタムバリエータークラスを作成する。(名称は任意)
  プロジェクト名または、アプリケーション名配下のlibどちらに
  作成してもよいが、作用する範囲が異なる。
  そのバリデータクラスがあるフォルダと同層のレベル
  または、その配下に作用する。

     作成時は、sfValidatorクラスを継承すること。
    パラメータを参照渡しにしているが、これは、Symfonyの作り上、
    returnパラメータでfalse,trueしか返すことができないため、
    参照渡しにすることにより、パラメータの中を変化させることにより、
    関数からの戻り値を取得する。

    [作成例]
  class myNicknameTabooValidator extends sfValidator
  {
      public function execute(&$value, &$error)
      {
          // バリデート内の他のリクエストやユーザ情報の取得方法
          $request = sfContext::getInstance()->getRequest();
          $user = sfContext::getInstance()->getUser();

          $nickname = $request -> getParameter("nickname");

          if (strpos($nickname,"死") !== false) {
              $error = $this -> getParameter("taboo_error");
              return false;
          }
          return true;
      }
  }

  上記の記述を行う場合、yml内に以下の内容を記述する。

  fields:
    nickname:
      myNicknameTabooValidator:
         taboo_error: 不適切な文字が含まれています

4:エラーメッセージの表示について
  ymlファイル内に記述したエラーメッセージは、form_error('チェックする項目名')で
  表示可能。

  [記述例]
  <?php echo form_error('password');?>

5:エラーメッセージ表示時の装飾について
  デフォルトでは、エラーメッセージを表示させると、上矢印が
  エラーメッセージの両サイドに表示されるが、これは、symfonyの
  デフォルトである。これは変更することが可能。

  (プロジェクト名)/(アプリケーション名)/config/settings.ymlの以下の部分を
  置き換える。

      validation_error_prefix:    ' &darr;&nbsp;'
      validation_error_suffix:    ' &nbsp;&darr;'

  たとえば、上矢印としたい場合は、&uarrに変更すればよい。
  表示が不要な場合は、' '内をブランクとする。

スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

e.swan

Author:e.swan
FC2ブログへようこそ!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR