よく使うのと、使えそうなものをまとめました。
間違いや、追加のtips的な話があればコメントへ書いてもらうとうれしいです。
コントローラー
プロパティ
コントローラー名を指定
$name = 'コントローラー名';
使用するモデルを指定
loadModel(モデル)で同様のことが可能。
デフォルトのモデルしか使わない場合ででも、規約を使わずに$usesに書いた方がミスが少ないと思う。
$uses = ['モデル名','モデル名'];
使用するコンポーネントを指定
$components = ['コンポーネント名','コンポーネント名'];
使用するヘルパーを指定
$helpers = ['ヘルパー名','ヘルパー名'];
※$uses、$components、$helpersについては、AppControllerの定義とコントローラの定義はマージされる。
使用するレイアウトを指定
default.ctp以外のレイアウトを指定する方法。
$this->layout = 'レイアウト名';
また、ajaxなどでレイアウトを使用しない場合、falseを設定するとレイアウトが使用されない。
$this->autoLayout = false;
ビューを使わない
$this->autoRender = false;
メソッド
リダイレクトする
$this->redirect([
'controller'=>'orders',
'action'=>'confirm'
]);
リダイレクト先で登録完了やエラーのメッセージを出す場合、$this->Session->setFlash()と組み合わせて使う。
詳細:【CakePHP】リダイレクト先でメッセージを表示する(setFlashとflash)
ビューにデータを渡す
$this->set('変数名','値');
//または
$this->set(['変数名'=>'値']);
//compact使うとシンプル
$foo = 1;
$bar = 2;
$this->set(compact('foo','bar'));
コントローラーの共通処理
beforeFilterがアクションの前に呼び出されるため、そこにコントローラ共通の処理を書く。
parent::beforeFilter()実行するの忘れずに。
public function beforeFilter(){
parent::beforeFilter();
//処理
}
任意のビューを呼び出す
任意のビュー呼び出すことで、ビューを使いまわすことができる。
$this->render('ビュー名');
他のアクションを呼び出す
$this->setAction('アクション名');
モデル
プロパティ
モデル名を指定
規約以外のモデル名を使いたい場合ここへ設定する。
class Foo extends AppModel {
public $name = 'モデル名';
}
対象のテーブル
規約以外のテーブル名を使いたい場合に設定する。
個人的には複数形の確認が手間なので自分で単数で設定してしまう。
class Foo extends AppModel {
public $useTable = 'テーブル名';
}
テーブルを使わないモデル、例えばサービス層として使う場合、falseを設定する。
class Foo extends AppModel {
public $useTable = false;
}
コントローラから動的に変更する方法
$this->モデル->setSource(テーブル名);
主キーにid以外を設定する
class Foo extends AppModel {
public $primaryKey ='example_id';
}
使用するデータソースの指定
database.phpで設定したデータソースに切り替える。
class Foo extends AppModel {
public $useDbConfig = 'other_db';
}
エイリアスの取得
SQLのエイリアスを取得する。
例えば以下のようにAppModelに書くと、モデルを意識することなく値を取得できる。
$modified = $data[$this->alias]['modified'];
使用するビヘイビアの指定
class Foo extends AppModel {
public $actsAs = ['ビヘイビア名'];
}
バリデーション設定
$validate = array(
'バリデーション名'=>array(
'rule'=>array('maxLength',3),
'message'=>array('エラーメッセージ'),
),
);
ソートの設定
find()のorderで設定するのと同じ。
$order = "field"
動的に設定することもできる。
$モデル名->order = "field"
メソッド
レコードの存在確認
if($this->exists($id)){
//レコードが存在した場合の処理
}else{
//レコードが存在しない場合の処理
}
もしくは
$conditions = array('status'=>'1');
if($this->exists($conditions)){
//レコードが存在した場合の処理
}else{
//レコードが存在しない場合の処理
}