2012-03-13 24 views
0

私は<form>にいくつかのフィールドを持っています... $fieldsetは、フィールド名の配列です、それはisset()チェックでループします。フォーム入力フィールドの妥当性検査

いくつかのフィールドにバリデーション(必須入力、電子メールなど)を適用したいのですが、これを自分のコードロジックから適用する方法はありますか?

<input type='text' value=<?php echo $profile['first_name'] name='profile[FirstName]' ?> 
<input type='text' value=<?php echo $profile['last_name'] name='profile[LastName]' ?> 

編集:ビューファイルで

public function actionProfile($id = null) { 

     $profileModel = new ProfileModel; 

     // <input> fields name 
     $fieldset['name'] = array('FirstName', 'LastName'); 
     $fieldset['address'] = array('HouseNumber', 'StreetName', 'Town', 'Location'); 

     $formError = array(); 
     if (isset($_POST['profile'])) { 
      // Process input event 
      foreach ($fieldset as $legend => $fields) { 
       foreach ($fields as $field) { 
        if (!isset($_POST['profile'][$field])) { 
         $formError[$legend] = $field; 
        } else { 
         $form[$legend][$field] = $_POST['profile'][$field]; 
        } 
       } 
      } 

      if (count($formError) == 0) { 
       if ($profileModel->saveAddress($form['address'])) { 
        //Saved to the database. 
       } 
      } 
     } 


     // Get data from the database 
     $data['profile'] = $profileModel->find($id); 
     $view = new View($this->layout, $data)->render(); 
} 

、それは次のようになり、フォームを経由して、レコードを編集する場合は、エラー(バリデーション)があれば... - 私がしたいですユーザーの入力値をデータベースの値ではなく <input>の値に戻します。私のコードからどうすればいいですか?

答えて

0

実際の更新機能から検証コードを分割することをお勧めします。

最初にバリデーターを実行し、長さと必要な入力を確認してください。それが通過すると、すべての(フォーマットされた)データをアクションに送ることができます。検証に合格しなかった場合は、追加のエラー情報とともにビューに戻して、ユーザーが問題を解決できるようにガイドすることができます。

私があなたに説明しようとしていることを理解していただければ幸いです。 :-)

2

現在、コントローラ内部に検証ロジックを配置しています。それはドメインビジネスオブジェクト(続きを読む:herehere)に入る必要があります。

また、「モデル」はクラスではありません。モデルはMVCアーキテクチャのレイヤーです。このレイヤーは、ほとんどがです。ドメインオブジェクトとData Mappersの2種類のインスタンスで構成されています。それぞれにはかなり異なる責任があります。

+0

変数ハンドラを使用私は不思議、なぜダウン票を得たのですか? –

関連する問題