もし、デフォルトのレイアウト(default.ctp)を使っている場合はレイアウトにこの記述があります:
<?= $this->fetch('script') ?>
便利なことに、ここにスクリプトを動的に追加できます:
<?= $this->Html->script('filename', ['block' => 'script']); ?>
これでfilename.js
が読み込まれます。
もし、デフォルトのレイアウト(default.ctp)を使っている場合はレイアウトにこの記述があります:
<?= $this->fetch('script') ?>
便利なことに、ここにスクリプトを動的に追加できます:
<?= $this->Html->script('filename', ['block' => 'script']); ?>
これでfilename.js
が読み込まれます。
CentOS7を入れてしばらく使っていると…時刻が1日もずれている… 急遽、VirtualBox Extension Packを入れました。入れるだけで治りました:
これはしびれました:
$validator ->add('current_password','custom',[ 'rule'=> function($value, $context){ $user = $this->get($context['data']['id']); if ($user) { if ((new DefaultPasswordHasher)->check($value, $user->password)) { return true; } } return false; }, 'message'=>'The old password does not match the current password!', ]) ->notEmpty('current_password');
なんでここでgetでユーザのエンティティ取れるの!?と思ったんですがよく考えたらここは
UsersTable.php
なので当然、getを使えるんですよね…
Usersテーブルをbakeすると、emailのバリデーションは次のように自動生成されます:
$validator ->email('email')
バリデーションに失敗した場合はThe provided value is invalid
と出ます。
これを変更するときに
$validator ->email('email','メールの形式が間違っています')
とやっても効かないのを不思議に思っていました。ドキュメントを見たら、2つ目の引数はMXレコードをチェックするか否か! よって、
$validator ->email('email',false,'メールの形式が間違っています')
であります。
public function beforeSave($event, $entity, $options) { // 何らかの処理 return true; }
saveの第2引数を指定します:
if ($this->Users->save($user, ['key' => 'value'])) {
参考URL:
https://api.cakephp.org/3.6/class-Cake.ORM.Table.html#_save
public function beforeFind(Event $event, Query $query, $options, $primary) { // 何らかの処理 }
applyOptionsで指定します:
this->Users->find()->applyOptions(['key' => 'value'])
usersテーブルを作り、./cake bake all users
と実行するとadd/edit/view/index.ctp
が生成されます。
しかし先日、何かのきっかけでlogin.ctp
が生成されるのを目撃してしまいました。
login.ctp
を作るのは難しくないですがなぜ、生成されるときとそうでないときがあるのが気になりました。
結論ですが、UsersController.php
にloginアクションを定義後、./cake bake template users
とするとlogin.ctpが生成されます。
./cake bake all users
の時点でloginアクションも作ってくれると便利なのに…