2013-04-04 61 views
0

我需要返回表單驗證,因爲我提交如何返回表單驗證回在CakePHP

我是在新聞/瀏覽/ 30之後失去了它---查看報告的詳細信息---- 在該頁面,我們有新增評論形式:

 <h2>Add comment</h2> 
     <?php 
     echo $this->Form->create("Comment", array(
        'url' => array('controller' => 'Comments', 'action' => 'add') 
       )); 
     echo $this->Form->label("name"); 
     echo $this->Form->input("name", array("label" => false, "class" => "textfield")); 
     echo $this->Form->label("email"); 
     echo $this->Form->input("email", array("label" => false, "class" => "textfield")); 
     echo $this->Form->label("text"); 
     echo $this->Form->textarea("text", array("label" => false)); 
     echo $this->Form->input("object_id", array("type" => "hidden", "value" => $data['News']['id'])); 
     echo $this->Form->input("type", array("type" => "hidden", "value" => "news")); 
     echo $this->Html->Link("Add Comment", "#", array("class" => "add_button", "onclick" => "$('#CommentViewForm').submit()")); 
     echo $this->Form->end(); 
     ?> 

形式註釋控制器上submiting:

在評論

/加:

 $isSuccess = $this->Comment->save($this->request->data); 
     if ($isSuccess) { 
      $this->Session->setFlash('your Comments has been added successfully and pending admin aproval.thanks ', 'default', array(), 'good'); 
     } else { 
      $this->Session->setFlash('Failed to add your comment: <br/>Fill all the required fileds <br/>type correct Email', 'default', array(), 'bad'); 
     } 
     $this->redirect(array("controller" => "News", "action" => "view", $id)); 

我做的姓名,電子郵件和註釋本身 一些驗證規則,當有用戶輸入錯誤返回添加評論的形式,但沒有顯示錯誤照常

我希望你明白我的爲人,我等待你的幫助,感謝 很多

回答

0

只是嘗試添加'error'=>true每個輸入表單輔助 像echo $this->Form->input("name", array("label" => false, "class" => "textfield", 'error'=>true));

看看這項工作。

+0

感謝所有,但。有沒有任何意見評論/添加,所以如果沒有重定向我會錯過視圖錯誤? – oofy 2013-04-04 19:48:08

+0

嘗試在重定向函數之前獲得錯誤後,回顯此$ this-> request-> data'。 即。 '的print_r($這 - >請求 - >數據);退出;' 你可能會得到一些有用的東西。 – MaNKuR 2013-04-05 07:16:07

0

您應該先烘烤一些代碼,如果您沒有與CakePHP一起工作那麼久。 那麼你會了解到,如果表格沒有驗證你不應該重定向:

if ($this->Comment->save($this->request->data)) { 
    $this->Session->setFlash('your Comments has been added successfully and pending admin aproval.thanks ', 'default', array(), 'good'); 
    $this->redirect(array("controller" => "News", "action" => "view", $id)); 
} else { 
    $this->Session->setFlash('Failed to add your comment: <br/>Fill all the required fileds <br/>type correct Email', 'default', array(), 'bad'); 
    // DO NOT redirect 
} 

烘焙模板將烤控制器代碼這種方式。這表明了處理表格的清晰透明的方式。

+0

hanks但是。有沒有任何意見評論/添加,所以如果沒有重定向我會錯過視圖錯誤? – oofy 2013-04-04 19:48:37

+0

爲什麼你不認爲?如果將其添加到「視圖」操作中,則需要發佈到「視圖」,並在「視圖」操作中處理保存部分。總是試圖張貼自己。這使得表單處理最簡單。否則你將需要使用會話和其他技巧來堅持表單,這可能是相當煩人和困難的。 – mark 2013-04-04 23:05:11

0

您的重定向不會阻止您看到驗證錯誤嗎?即使有錯誤,您也會將用戶重定向到新頁面(視圖頁面),因此他們將永遠不會看到任何驗證錯誤消息。

嘗試註釋掉這一行:

//$this->redirect(array("controller" => "News", "action" => "view", $id)); 

或使其有條件的$ isSuccess是真實的。

UPDATE 回覆:您的評論 - 事實是,如果你與形式重定向離開該頁面,你會不會(容易)能夠顯示驗證錯誤消息你。最簡單的事情就是讓表單提交到自己的行動 - 通過它的聲音,你將它提交給另一個控制器中的行動。

0

我認爲你需要處理新聞控制器上的視圖操作中的表單 - >保存,然後像別人說的那樣,如果驗證失敗,不要從頁面重定向。

如果重定向,至少會看到驗證消息一次(來自會話Flash),但您將丟失填充的表單數據。

最簡單的方法是移動保存到新聞中心 - >視圖的方法,如果你的新聞和評論模型相關只需使用現有的穿越保存有註釋:

$isSuccess = $this->News->Comment->save($this->request->data);