CentOS7:時刻を変更する

テストのために時刻を変更することってあると思います。 以下、やり方です。まず、ntpを無効にします: timedatectl set-ntp 0 そして時刻を変更します timedatectl set-time '2018-05-21 23:00:01' 終わったらntpを復活させ: timedatectl set-ntp 1 chrony…

CakePHP3:ログイン後、管理者の場合は別ページにリダイレクトする

これ、Authの設定でやる方法をご存知の方がいましたら教えてください… 私はUsersController.phpのloginで次のようにしています: if ($this->request->is('post')) { $user = $this->Auth->identify(); if ($user) { if($user['user_status_id'] == USER_STA…

CakePHP3:ブラウザの言語設定におうじてロケールを切り替える

まず、AppController.phpに次を追加します: use Cake\I18n\Middleware\LocaleSelectorMiddleware; public function middleware($middleware) { $middleware->add(new LocaleSelectorMiddleware(['en_US', 'ja_JP'])); } 次にbootstrap.phpにこちらを: use …

CakePHP3:debugKitが表示されない…

開発環境をEC2に移したところ、debugKitが表示されないという怪現象が。 debug.logをみたところ: 2018-05-14 13:46:16 Warning: DebugKit is disabling itself as your host `ホスト名` is not in the known safe list of top-level-domains (localhost,dev…

CakePHP3:tinyintとsmallintのマイグレーションファイル

bakeコマンドでマイグレーションファイルを作成すると、次のような内容が生成されます: $this->table('statuses') ->addColumn('id', 'tinyinteger', [ 'default' => null, 'limit' => 3, 'null' => false, ]) ->addPrimaryKey(['id']) ->addColumn('name',…

CakePHP3:QRコードを表示する

今回は、こちらを利用しました: github.com PHP7.03以上とGDが必要です。 インストール composer require chillerlan/php-qrcode 僕の場合はこれで2.0.6が入りました GDのインストール iusを使っているので、以下でインストール: sudo yum install php72u-…

PHP:7.0から7.2に上げる

php

これまでPHP7.0を使っていたのですが、QRコードのライブラリが7.03以上のため、7.2にあげることにしました。 iusを使っていたので、次のようにしました: PHP7.0の削除 yum remove php70* PHP7.2のインストール yum -y install php72u php72u-devel php72u-m…

CakePHP3:レコードの存在をチェックする

これまでは、find()を使っていたのですが、もっと簡単な方法が! if ( $this->Users->exists(['email' => $email]) ){ } といった具合にチェックできます。

CakePHP3:画面が真っ白

VirtualBoxで仮想マシンを幾つか立ち上げてプログラムを書いていたところ、画面が真っ白であったり、 ERR_CONTENT_LENGTH_MISMATCHであったりのエラーが。 どうやらメモリ不足のようで、パソコンを再起動+仮想マシンの数を絞ったら治りました。

PHP:呼び出したいメソッドが変数に入っている場合

php

仮に、 $titleJa = $event->japanese[0]->title; $titleEn = $event->english[0]->title; $descJa = $event->japanese[0]->description; といったことを関数にまとめたいとします: $titleJa = getData($event, 'japanese', 'title); $titleEn = getData($ev…

Bootstrap:フォームにおいて、入力項目の代わりにテキストを表示する

ここを参照: bootstrap3.cyberlab.info

WordPress:開発用のサーバを作る

WordPressのサイトを立ち上げて、後日、そのサイトのコピーが欲しいとします。 僕はこうしました: 本番側の作業 データベースのバックアップ mysqldump -u root -p wordpress_production > /tmp/production.dmp ソースのコピー (gitに全部入れているので割…

CakePHP3:フルパスのURLを生成する

結論からいうと、URLヘルパーもしくはRouterの第2引数をtrueに設定します: URLヘルパーの場合: $url = $this->Url->build(["controller" => "Posts", "action" => "search", "?" => ["foo" => "bar"] ],true); ルータの場合: use Cake\Routing\Router; //…

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