2018-04-01から1ヶ月間の記事一覧

Remodal:アンカーを通じて開くことができない

キレイなモーダルを簡単に実装できて重宝しているRemodalですが、アンカーで起動できない現象に遭遇しました: <div class="remodal" data-remodal-id="my-remodal" data-remodal-options="hashTracking: false"> <button data-remodal-action="close" class="remodal-close"></button> <h1>Remodal</h1> <p> Responsive, lightweight, fast, synchronized with CSS animatio…</p></div>

CakePHP3:Cannot insert row, some of the primary key values are missing

保存をしても、次のエラーが出ることがあります: [RuntimeException] Cannot insert row, some of the primary key values are missing. Got (, ), expecting (task_id, user_id) この場合は該当するEntityを確認し、カラムがaccessibleに含まれているか確…

CakePHP3:declare(strict_types=1)の使い所

まだ使い始めて日が浅いですが、ComponentとかHelperのようにいろいろな場所から呼び出しが多いコードは、 必ずdeclare(strict_types=1);を設定し、かつ、関数の引数と戻り値の型を設定しておくと効率がいい気がします。 あとから設定するのは面倒なので、最…

CakePHP3:セッションデータを解読する

データベースにセッションを格納している場合、session.dataカラムにタイムアウト時刻らしく文字が入ります: Config|a:1:{s:4:"time";i:1524284504;} この値を読みたい場合にどうするか? session_start(); session_decode($data); print_r($_SESSION); と…

CakePHP3:テンプレートからjsファイルを設定する

もし、デフォルトのレイアウト(default.ctp)を使っている場合はレイアウトにこの記述があります: fetch('script') ?> 便利なことに、ここにスクリプトを動的に追加できます: Html->script('filename', ['block' => 'script']); ?> これでfilename.jsが読…

VirtualBox:時刻がずれる

CentOS7を入れてしばらく使っていると…時刻が1日もずれている… 急遽、VirtualBox Extension Packを入れました。入れるだけで治りました: Downloads – Oracle VM VirtualBox

CakePHP3:パスワードが現在のパスワードと同一かチェックする

これはしびれました: stackoverflow.com $validator ->add('current_password','custom',[ 'rule'=> function($value, $context){ $user = $this->get($context['data']['id']); if ($user) { if ((new DefaultPasswordHasher)->check($value, $user->passw…

CakePHP3:default.poが読み込まれない・更新されない場合の確認ポイント

Localeディレクトリのパーミッション ロケールの設定(config/app.phpの'defaultLocale' => env('APP_DEFAULT_LOCALE', 'en_US'), キャッシュの削除

CakePHP3:メールアドレスのバリデーションエラーのメッセージを変更する

Usersテーブルをbakeすると、emailのバリデーションは次のように自動生成されます: $validator ->email('email') バリデーションに失敗した場合はThe provided value is invalidと出ます。 これを変更するときに $validator ->email('email','メールの形式…

CakePHP3:beforeSaveとbeforeFindにオプションを渡す

beforeSaveの場合 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.Ta…

CakePHP3:login.ctpをbakeする

usersテーブルを作り、./cake bake all usersと実行するとadd/edit/view/index.ctpが生成されます。 しかし先日、何かのきっかけでlogin.ctpが生成されるのを目撃してしまいました。 login.ctpを作るのは難しくないですがなぜ、生成されるときとそうでないと…

CakePHP3:要調査

*isUnique $validator ->email('email') ->requirePresence('email', 'create') ->notEmpty('email') ->add('email', 'unique', ['rule' => 'validateUnique', 'provider' => 'table']); 上記と、 $rules->add($rules->isUnique(['email'])) はなぜ両方必要…

CakePHP3:Seedファイルを読み込む

みなさん、Seedファイルの読み込みどうしていますか? 僕はこんな感じで: cd /var/www/html/app/bin for i in `basename -s .php -a ../config/Seeds/*` do ./cake migrations seed --seed ${i} done 楽ですが、シードファイル間で依存があるとダメなんです…

CakePHP3:friendsofcakeプラグインでラジオボタンを横並びにする

めっちゃ簡単で、inline=trueを指定するだけです: echo $this->Form->control('priority_id', ['options' => $priorities, 'type' => 'radio', 'inline' => true]);

CakePHP3:3.5移行の際のポイント

マイナーチェンジのようで、結構大きな変更があるので以下にまとめています(随時更新) インストール 3.4の場合は、 composer create-project --prefer-dist cakephp/app:3.4.* app と指定したところ、3.4.2が入りました。 3.5の場合は、 composer create-p…

CakePHP3/Bootstrap3:フォームのラベルを左寄せする

Friendsofcakeのbootstrapプラグインを導入すると、 echo $this->Form->control('title'); といった記述をするだけで次のマークアップを吐いてくれます: <div class="form-group text required"> <label class="control-label text-left col-sm-2 col-md-2" for="title">Title</label> <div class="col-sm-6 col-md-6"> </div></div>

CakePHP3:findで特定の行の特定のカラムの値を取得する

$firstname = $this->Users->find()->where(['id' => $user_id])->first()->firstname; もっと美しいやり方をご存知でしたら教えてください〜 関連エントリ: thebaker.hatenablog.com