刚开始玩 CakePHP,所以如果这是一个简单的问题,请耐心等待。
我正在使用 CakePHP 2.4.0,我想在多个视图中重用特定表单。因此,我将此表单添加到视图元素中,并将此元素包含在每个视图中。
这是 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'); ?>
这是 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,则错误会显示在每个表单元素的视图中。
当表单放置在单独的视图元素中并在多个页面中重复使用时,您必须做什么才能在每个表单元素的视图中显示表单中的错误?
这可能与我使用重定向的事实有关,但我认为有比将错误临时保存在会话中更好的方法。
这可能与我使用 重定向。。。
这实际上与您使用重定向的事实完全有关。 通过重定向,您将丢失验证错误。
有很多方法可以处理你的想象力(每种方法都有自己的优点,这取决于你的情况(,但它已经在网络上被广泛问到/回答:
CakePHP 在重定向后保留验证错误
http://bakery.cakephp.org/articles/binarycrafts/2010/01/20/persistentvalidation-keeping-your-validation-data-after-redirects-2
CakePHP:在重定向时保留验证数据
https://groups.google.com/forum/#!topic/cake-php/NsfckwSfY5c