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 を変更すると、各フォーム要素のビューにエラーが表示されます。
フォームが別のビュー要素に配置され、複数のページで再利用される場合、フォームからのエラーを各フォーム要素のビューに表示するにはどうすればよいでしょうか?
これはおそらくリダイレクトを使用しているという事実と関係がありますが、セッションでエラーを一時的に保存するよりも良い方法だと思います。