登録/ログインページにcakePHPの組み込み検証機能を使用しようとしています。CakePHPのビルトイン検証エラーメッセージを表示する方法は?
<?php
class User extends AppModel
{
var $name = 'User';
var $validate = array(
'name' => VALID_NOT_EMPTY,
'password' => VALID_NOT_EMPTY,
'email_id' => VALID_EMAIL
);
}
私は登録またはログインのための別個のビューファイルを持っていません。メインコントローラーにアプリケーションの登録コードとログインコードがあり、viewは単一のindex.ctpファイルにあります。登録またはログインが有効な場合、ページはメインコントローラのホームページにリダイレクトされます。
class UsersController extends AppController
{
var $name = 'Users';
var $helpers = array('Html', 'Form');
function register()
{
if (!empty($this->data))
{
if ($this->User->save($this->data))
{
$this->Session->setFlash('Your registration information was accepted.');
$this->redirect('/main/home');
}
}
}
}
Index.ctp
<p>Please fill out the form below to register an account.</p>
<?php
echo $form->create('User', array('action' => 'register'));
echo $form->input('name');
echo $form->input('email_id');
echo $form->input('password');
echo $form->end('Register');
?>
<h3>Login</h3>
<?php
echo $form->create('User',array('action'=>'login'));
echo $form->input('email_id');
echo $form->input('password');
echo $form->end('Login');
?>
なぜ、カスタムエラーメッセージが表示されないということです。なぜなら、私はレジスタモジュールのための別々のビューファイルを持っている、私はカスタムメッセージを取得するので。
しかし、別のレジスタビューファイルと別のログインビューファイルは必要ありません。私は両方の機能をメインコントローラのインデックスファイルに入れたい。私たちを手伝ってくれますか?
EDIT 1
私はレンダリングを使用する場合、これは私がブラウザで得るものです。
登録に失敗しました。要求されたアドレス「/ユーザー/登録」このサーバー上に見つかりませんでした。
エラーが見つかりません。
これは、メインコントローラ内のレジスタ機能である:あなたが同じモデルを使用する2つのフォームを作成しているので、
function register()
{
if (!empty($this->data))
{
if ($this->User->save($this->data))
{
$this->Session->setFlash('Your registration information was accepted.');
$this->render('home');
}
else
{
$this->Session->setFlash('Your registration failed.');
$this->render('index');
}
}
}
エラーメッセージは、views/usersフォルダに別のregister.ctpファイルがある場合にのみ表示されます。コントロールをメインページにリダイレクトすると、登録が失敗したときに、セッションのsetFlashメッセージが表示されますが、エラーメッセージは表示されません。登録アクション用の個別のビューファイルがある場合にのみ、エラーメッセージが表示されます。 – Angeline
検証メッセージはビューに戻され、setFlashとは異なりセッションに保存されません。リダイレクトすると、エラーメッセージが実質的に失われます。 登録メソッドのコントローラで$ this-> render( 'index')を使う必要があるかもしれないので、リダイレクトは必要ありません。 – MSR