自分のメモ用なので、書き方が雑ですが悪しからず。
【全体】
●array
() → []●configの値を取得する処理
cakephp2と処理は変わってないとのことだが、
・ソースのトップ(<?php の真下ぐらい)に以下を記載する。
use Cake\Core\Configure;・読み込む時は
Configure::read("parameter")でよい。
ちなみに以下でもよい
\Cake\Core\Configure::read("parameter")【Controller】
●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\Database\Expression\QueryExpression;
$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;
}
-----●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) とする。●追加モジュールの指定方法
Additionalmodule.php をVendor配下に置いていたとして、
App::uses('Additionlmodule','Vendor');↓
src/Utility/ 配下に移動
use App\Utility\Additionlmodule●cookieからの情報取得
$this->Cookie->read('id')↓
$this->getRequest()->getCookie('id')●cookieに対象の値があるかチェック
empty($this->Cookie->check('id'))
↓
$this->getRequest()->getCookie('id') !== nullリダイレクト処理
$this->redirect(Router::url([
'controller'=>$redirectParams[1],
'action'=>$redirectParams[2],
$redirectParams[3]]
));
↓
return $this->redirect(Router::url([
'controller'=>$redirectParams[1],
'action'=>$redirectParams[2],
$redirectParams[3]]
));※redirectをそのまま実行してもダメで、returnする必要がある。そうしないとそれ以降のコードが実行されてします。
●ajax処理判定
$this->RequestHandler->isAjax()↓
$this->request->is('ajax')【view】
●パンくずりすと
$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->add('ホーム', ['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();●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');●route.php でのルーティングの書き方
Router::connect('/checks/:id',array('controller'=>'checks','action'=>'view','method'=>'GET'),array('pass'=>array('id'),'id'=>"[0-9]+"));↓
$builder->connect('/checks/{id}', ['controller' => 'Checks', 'action' => 'view', 'method'=>'GET'],['pass' => ['id']])
->setPatterns(['id' => '[0-9]+'])
->setMethods(['GET']);【番外】
●cakephp4のキャッシュクリアコマンド
bin/cake cache clear