週末IT

IT初心者が学んだこと思ったこと考えたことのまとめ

タグ:php

CakePHP3で画像,JS,CSSのキャッシュを無効にする方法。
CakePHP2系ではapp/config/core.phpに
Configure::write('Asset.timestamp', 'force');
// または
Configure::write('Asset.timestamp', true);
と記述すれば良かったが、CakePHP3系では記述方法が変わっていたのでそのまとめ。

続きを読む

CakePHP2系のノリで
$this->Form->create('modelname');
$this->Form->input('field', ['type' => 'text']);
$this->Form->end();
という感じのフォームを作ったがバリデーションによるエラーが出なかったのでその原因と対策。

createの違い

結論からいうと$this->Form->create()の第一引数にモデル名を渡していたのが原因。
CakePHP3系ではここにはentityをセットしてやる必要がある。
ControllerからEntityを渡して
$this->Form->create($entity);
$this->Form->input('field', ['type' => 'text']);
$this->Form->end();
これで解決。

HogeBehaviorを使おうと思いATable.php, BTable.phpのinitializeメソッド内で
$this->addBehavior('Hoge');
しておき、あるControllerから
$this->loadModel('A');
$this->loadModel('B');
したときに、
Fatal error: Cannot redeclare class
が出てしまったのでその対応メモ。

結論としては、名前空間を
namespace Cake\ORM\Behavior;
としていたのが原因だった。これを
namespace App\Model\Behavior;
に修正して解決。
そういえばHogeBehaviorを作るとき、CakeのコアにあるTimestampBehaviorからベースの形をコピペしてきたのだが、名前空間もそのまま使ってたみたいだ。。

CakePHP3でPaginatorを利用してみた。
現在のページの取得、総ページ数の取得、データ件数の取得などなどよく使いそうなものについてメモ。
以下View(Template)ファイルでの実行。

1-1. 各種パラメータの確認
1-2. 総ページ数,現在のページ数を取得する
1-3. データ件数を取得する
続きを読む

CakePHP3でComponentからControllerを取得する方法。
CakePHP2.xではComponentのinitializeメソッドの引数でControllerを取得できたが、CakePHP3からinitializeメソッドの引数がarray $configになっているためちょっとした手間が必要なようだ。
Cake本体とやり方を合わせたかったため、AuthComponentを追いかけてみるとinitializeメソッド内に$controllerを取得している記述を発見。
public function initialize(array $config)
{
        $controller = $this->_registry->getController();
        $this->eventManager($controller->eventManager());
        $this->response =& $controller->response;
        $this->session = $controller->request->session();
}
この方法を使い、Component内では$this->controllerでControllerへアクセスできるようにする。
class HogeComponent extends Component
{
    public function initialize(array $config)
    {
        $this->controller = $this->_registry->getController();
    }
}
以降$this->controllerでHogeComponentを呼んでいるControllerを利用できる。

このページのトップヘ