2012-03-13 80 views
0

我在<form>中有幾個字段... $fieldset是字段名稱的數組,它將循環它們與isset()檢查。用PHP輸入字段驗證

我想申請驗證(例如:所需的輸入,電子郵件)到幾個領域,如何應用這從我的代碼邏輯?

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 type='text' value=<?php echo $profile['first_name'] name='profile[FirstName]' ?> 
<input type='text' value=<?php echo $profile['last_name'] name='profile[LastName]' ?> 

編輯:當通過表單編輯記錄。如果有錯誤(驗證) - 我想將用戶輸入值重置爲<input>的值,而不是來自數據庫的值。如何從我的代碼完成?

回答

0

我認爲將驗證碼與實際更新功能分開是明智的做法。

讓它先通過驗證程序,檢查長度和所需的輸入。通過後,您可以將所有(格式化)的數據發送到該操作。如果它未通過驗證,請將其返回到包含其他錯誤信息的視圖,以便引導用戶解決問題。

我希望你明白我想向你解釋的是什麼。 :-)。

2

您目前正在驗證邏輯內部的控制器。這應該在域業務對象(閱讀更多:herehere)。

此外,「模型」不是一個類。模型是MVC體系結構中的一個層。此層主要是由兩種類型的實例組成:域對象和Data Mappers。每個人都有不同的責任。

+0

我不知道,爲什麼我得到一個反對票? – 2012-03-13 18:05:02