2014-12-07 32 views
0

我有一個表格,用戶提交表格後,驗證結束,我想問他在模態窗口中的電子郵件和暱稱。如果用戶填寫並提交電子郵件和暱稱,我想驗證它並將其保存爲新記錄或獲取現有的電子郵件地址(以防過去使用過電子郵件)。如果驗證不成功,用戶應該能夠以相同的模式更正值。如果一切正常,我想保存表單,包括創建用戶ID。在Yii提交表格前的模態用戶信息

我已經有表格保存和用戶創建/查找過程完成。我只是不知道,如何把它放在一起,在上面描述的場景中工作。任何人都可以解釋一下,Yii應該怎麼做?我正在使用Yii 1.1.15和Yii Booster。謝謝。

回答

0

在Yii _form.php視圖文件默認情況下用於update.phpcreate.php視圖。

所以,你可能需要做的不行。類似:在update.php和create.php視圖中插入帶有模式的表單。 對於這些操作和不同的操作,所以你保持邏輯分離;這是MVC的基本優勢。

public function actionCreate() { 
    $model = new Users; 
    if (isset($_POST['Users'])) { 
     $model->attributes = $_POST['Users']; 
     if ($model->save()) { // here in the save() method the valadation is included 
           // ONLY after we validate and successfully saved we go to update action 
       $this->redirect(array('update', 'id' => $model->id)); 
     } 
    } 
    $this->render('create', array(
     'model' => $model, 
    )); 
} 

最主要的是,當您嘗試保存save()方法時,驗證自動發生。 因此,如果驗證不成功,則邏輯將回到與視圖中填充的字段相同的操作(例如創建),因爲模型已將數據傳遞給它:$model->attributes = $_POST['Users']

如果驗證成功,我們會進一步重定向。沒有nessesary ajax表單提交,即使隨便提交適合在這裏。

public function actionUpdate($id) { 
    $model = $this->loadModel($id); 
    if (isset($_POST['Users'])) { 
     $model->attributes = $_POST['Users']; 
     if ($model->save()) { // after saving EXISTING record we redirect to 'admin' action 
       $this->redirect(array('admin')); 
     } 
    } 
    $this->render('update', array(
     'model' => $model, 
    )); 
} 

您保留最初設計的視圖中的表單(更新/創建)。

驗證的獨特性在於模型規則()的簡單:

array('username, email', 'unique'), 

電子郵件valadation電子郵件語法似乎是這樣的:

array('email', 'email'), 
+0

因此,解決辦法應該是: - 使用Ajax創建表格提交 - 如果確認無誤,填寫表格 - 用戶輸入電子郵件和暱稱 接下來要做什麼?我如何驗證電子郵件和暱稱,然後將所有數據一起提交? – kokoseq 2014-12-08 09:35:50

+0

@kokoseq,看我的更新。 – 2014-12-08 10:32:24