0

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'
        )
    ),....

ビュー要素のフォームが完全に有効な場合、フォームからのデータはデータベースに正常に追加されます。ただし、フォームが無効な場合、エラーはビューに返されません。LeadController で以下をログファイルに書き込むと、それらが表示されます。

$this->Lead->invalidFields();

コードを LeadController/index から PagesController/home に追加し、フォーム送信 URL を変更すると、各フォーム要素のビューにエラーが表示されます。

フォームが別のビュー要素に配置され、複数のページで再利用される場合、フォームからのエラーを各フォーム要素のビューに表示するにはどうすればよいでしょうか?

これはおそらくリダイレ​​クトを使用しているという事実と関係がありますが、セッションでエラーを一時的に保存するよりも良い方法だと思います。

4

1 に答える 1

1

これはおそらく、リダイレクトを使用しているという事実と関係があります...

実際には、リダイレクトを使用するという事実に完全に関係しています。リダイレクトすると、検証エラーが失われます。

これに対処する方法は想像できる限りたくさんあります (状況に応じて、それぞれにメリットがあります) が、既に Web 上で広く質問/回答されています。

リダイレクト後に検証エラーを保持する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

于 2013-09-27T14:09:18.997 に答える