cakephp2 → cakephp4変更時のよくある変更点

投稿者: | 2025年8月28日

自分のメモ用なので、書き方が雑ですが悪しからず。

●array

() → []

●idからそのデータ丸ごと取得する

$record = $this->Model->findById

$record = $this->Model->get($id);

●フォームのデータを取得

$this->request->data;

$this->request->getData();

●カウントアップ処理

$this->Model->updateAll(
 [
  'Model.field'=>'`Model`.`field` + 1',
 ],
 [
  'Model.id'=>$data['Model2']['Model_id'],
 ]
);

use Cake\Event\EventInterface;

$expression = new QueryExpression('field + 1');
$this->User->updateAll(
   [ 'field' => $expression ],
   [ 'id' => $Model2['Model_id'] ]
);

●ログイン判定

if ($this->getRequest()->getAttribute('identity')->loggedIn()){

}

if ($this->Authentication->getIdentity()){

}

●認証済みユーザのidを取得

AuthComponent::user('user_id')

# 以下のアクションを作った。
$this->getAuthid()

# 実態は以下
-----
        $identity = $this->getRequest()->getAttribute('identity');
        if ($identity) {
            $myid = (string)$identity->get('id'); // strval と同じ意味
        } else {
            // 未ログイン時の処理
            $myid = null;
        }
-----

●各controllerでのmodelの定義の仕方

public $users = ['Models'];

public $Models = null;
public Initialize {
    $this->Models = $this->loadModel('Models');
}

●ログイン不要のactionを指定する方法

$this->getRequest()->getAttribute('identity')->allow('detail','index','archive','search');

$this->Authentication->allowUnauthenticated(['index', 'detail', 'archive', 'search']);

●beforeFilterの宣言の仕方

public function beforeFilter(){

use Cake\Event\EventInterface;

public function beforeFilter(EventInterface $event){
 ※ parent::beforeFilter() も parent::beforeFilter($event) とする。

●configの値を取得する処理
cakephp2と処理は変わってないとのことだが、

・ソースのトップ(<?php の真下ぐらい)に以下を記載する。

use Cake\Core\Configure;

・読み込む時は

Configure::read("parameter")

でよい。

●パンくずりすと

$this->Html->addCrumb('サブページ',['action'=>'index']);
$this->Html->addCrumb($this->Text->truncate($data['text'],40), null);
echo $this->Html->getCrumbList(
    [
        'class'=>'uk-breadcrumb uk-hidden-small',
        'firstClass'=>false,
        'lastClass'=>"uk-active"],
    [
        'text'=>'ホーム'
]);

$this->Breadcrumbs->prepend('ホーム', ['controller' => 'Pages', 'action' => 'display']);
$this->Breadcrumbs->add('サブページ');
echo $this->Breadcrumbs->render(
    ['class' => 'uk-breadcrumb uk-hidden-small']
);

●viewでの日時の表示

$createdTime = new FrozenTime($model['created']);
echo $createdTime->format("Y-m-d H:i");

$model['created']->format("Y-m-d H:i");

●idを指定して1レコード取得する方法

$this->Models->id = $id;
$d = $this->Models->read();

$identity = $this->getRequest()->getAttribute('identit
        if ($identity) {
            $uid = (string)$identity->get('id'); // strval と同じ意味
        } else {
            // 未ログイン時の処理
            $uid = null;
        }
)

●レコードの新規作成(save)

$models = [
    'user_id' => $uid,
    'text' => $data['Model']['text'],
    'model2_id' => $data['Model']['model_id'],
    'is_delete' => $data['Model']['is_delete'],
];
if ($this->Model->save($models)) {

$models = $this->Models->newEntity([
    'user_id' => $uid,
    'text' => $data['Models']['text'],
    'models2_id' => $data['Models']['mutter_id'],
    'is_delete' => $data['Models']['is_delete'],                     
]);
if($this->Models->save($models)) {

●レコード更新(save)

$data = [
    'id'=>$d['id'],
    'model_id'=>$d['model_id'],
    'user_id'=>$d['user_id'],
    'text'=>$d['text'],
    'is_delete'=>1
];
if ($this->Models->save($data)) {

$data.is_delete=>1
if ($this->Models->save($data)) {

●レコード削除処理(is_deleteに1をセット)

$data = $this->Models->get($model_id);
$data->is_delete = 1;
return $this->Models->save($data);

●フラッシュメッセージ

[appController]

(コードなし)

$this->loadComponent('Flash');

[controller]

$this->getRequest()->getSession()->setflash('フラッシュでメッセージ。', 'default', [
    'class' => "uk-alert uk-alert-danger"
]);

$this->Flash->success('フラッシュでメッセージ。');

(もしくは)

$this->Flash->success('フラッシュでメッセージ。', [
    'key' => 'flash', // デフォルトのキー(通常変更不要)
    'params' => ['class' => "uk-alert uk-alert-success"] // ★ここにクラスを指定
]);

[view] 

echo $this->Session->flash();

echo $this->Flash->render();

●viewでのformのinput

echo $this->Form->input('Model.body',[
  'type'=>'textarea',
  'label'=>false,
  'id'=>'replyBody',
  'class'=>'uk-width-1-1',
  'error'=>[
    'attributes'=>[
      'class'=>'uk-alert uk-alert-danger'
    ]
  ],
  'div'=>['class'=>'uk-form-row uk-margin-bottom']
]);

echo $this->Form->control('Model.body',[
    'type'=>'textarea',
    'label'=>false,
    'div'=>['class'=>'uk-form-row uk-margin-bottom'],
    'class'=>'uk-width-1-1',
    'id'=>'textBody',
    'error'=>[
        'attributes'=>[
            'class'=>'uk-alert uk-alert-danger'
        ]
    ]
]);

●session情報取得

$model2_Id = $this->getRequest()->getSession()->read('Auth.Model.Model2.id');

$session = $this->request->getSession();
$model2_Id = $session->read('Auth.model2.id');

【番外】

●cakephp4のキャッシュクリアコマンド

bin/cake cache clear

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)