刚开始玩CakePHP,如果这是一个简单的问题,请耐心等待。
我正在使用CakePHP 2.4.0,我希望在多个视图中重用特定的表单。因此,我将此表单添加到view-element并在每个视图中包含此元素。
这是element.ctp文件:
<?php
echo $this->Form->create('Lead', array('type' => 'post',
'url' => array('controller' => 'Lead', 'action' => 'index'),
'novalidate' => true));
echo $this->Form->input('name', array('label' => 'Achternaam'));
echo $this->Form->input('email', array('label' => 'Email'));
echo $this->Form->input('phone', array('label' => 'Telefoon'));
echo $this->Form->submit('submit', array('name' => 'submit'));
?>
此元素以下列方式包含在多个视图中:
这是home.ctp(视图)文件:
<?php echo $this->element('element'); ?>
这是从表单接收post操作的LeadController.php文件:
<?php
class LeadController extends AppController{
public function index(){
$this->autoRender = false;
if(!empty($_POST))
$this->Lead->save($this->request->data);
$this->redirect('/Pages/home');
}
}
?>
这是引发所有验证检查的Lead.php文件。
class Lead extends AppModel{
public $useTable = 'Leads';
public $validate = array(
'email' => array(
'required' => array(
'rule' => array('notEmpty'),
'required' => true,
'message' => 'need email'
),
'validEmailRule' => array(
'rule' => array('email'),
'required' => true,
'message' => 'invalid emial'
)
),
'name' => array(
'required' => array(
'rule' => array('notEmpty'),
'required' => true,
'message' => 'need name'
)
),....
当view-element中的表单完全有效时,表单中的数据将成功添加到数据库中。但是当表单无效时,错误不会返回到视图中。如果我在LeadController中将以下内容写入日志文件,而不是显示它们。
$this->Lead->invalidFields();
如果我将LeadController / index中的代码添加到PagesController / home并更改表单提交URL,则错误会显示在每个表单元素的视图中。
当表单放在一个单独的视图元素中并在多个页面中重复使用时,您需要做什么才能在每个表单元素的视图中显示表单中的错误?
这可能与我使用重定向的事实有关,但我认为它们比在会话中临时保存错误更好。
答案 0 :(得分:1)
这可能与我使用的事实有关 重定向...
实际上,您完全使用重定向这一事实。通过重定向,您将失去验证错误。
有很多方法可以解决这个问题,因为你的想象力可以想到(并且每个方法都有自己的优点,具体取决于你的情况),但它已经在网上被广泛询问/回答:
CakePHP preserving validation errors after redirecting
CakePHP: Keep validation data upon redirect
https://groups.google.com/forum/#!topic/cake-php/NsfckwSfY5c