エラーで入力画面に戻した時に長いパスワードがセットされるなーと思ったら
パスワードをそのままセットしようと思うとハッシュ化されたのがそのまま来ちゃってたんだね
別でエリアを設けてバリデーションをかけました。
参考にさせて頂いたページ
エラーで入力画面に戻した時に長いパスワードがセットされるなーと思ったら
パスワードをそのままセットしようと思うとハッシュ化されたのがそのまま来ちゃってたんだね
別でエリアを設けてバリデーションをかけました。
参考にさせて頂いたページ
Controller の中で自分でバリデーションを実行したい場合には、
Modelにデータをセットして、validates()メソッドを実行する。
validates()メソッドは、
バリデーションが成功すれば True, 失敗すれば false を返す。
ex.)
$this->ModelName->set($this->data);
if ($this->ModelName->validates()) {
// バリデーションが成功した場合(エラーがない場合)の処理
} else {
// バリデーションが失敗した場合(エラーがあった場合)の処理
}
CakePHPで複数選択項目を保存するときに、
最低限1つは登録するようにvalidationを設置したときに迷ったのでメモ。
ブログの記事をPost 、 記事のタグを Tagとして
記事に PHPとか、MySQLとか復数の Tagを関連付けれるようにするとした場合に、
Post Model に
var $validate = array(
‘Tag’ => array(
‘rule’ => array(‘multiple’ => array(‘min’ => 1))
),
);
と指定すれば、未設定の場合にエラーにしてくれるようにはなった。
だがその後に、エラーメッセージが表示されないという問題がでた…
例のごとく世界中のお友達の意見を覗いてもみんなバラバラしていて、メジャーなのものが分からなかったので
以下で対応。
Modelは変更せずに、Controller と View を変更。
[Controller]
~略~
$this->data[‘Post’][‘Tag’] = $this->data[‘Tag’][‘Tag’]; // << 追加
if ($this->Post->save($this->data)) {
~略~
[View]
~略~
echo $this->Form->input(‘Tag’, array(
‘type’ => ‘select’,
‘multiple’ => ‘checkbox’,
‘error’ => false,
));
echo $this->Form->error(‘Post.Tag’);
~略~
CakePHPでのレイアウトは Contorller::$layout で指定できるのだけど
管理画面とかユーザー用ページを作る場合に、
最初はAppControllerのサブクラス作ってそれぞれ処理を分ける?って考えたけど、
Cakeっぽくなさそうだなーと思ってメジャーそうなものを調べてみた。
行き着いた結果がメジャーかどうかはわからないけど、規約どおりだったのでこんな感じで
ControllerのbeforeFilter()内で、prefixを見て判断する。
ex.)
function beforeFilter() {
if (isset($this->params[‘prefix’]) && $this->params[‘prefix’] == ‘admin’) {
$this->layout = ‘admin';
} else {
$this->layout = ‘rewanko';
}
ちなみに、$this->params[‘prefix’] の中にはコントローラーのパラメータが入っています。
最近のコメント