CakePHP - 单独视图元素中的错误处理表单


CakePHP - Errorhandling form in separate view element

刚开始玩 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