CakePHP3の覚書

デバッグ関数 | debug

デバッグ方法はdebug関数を用いることができます。画面にデバッグ内容が表示される。
debug('test');

CakePHP2との違い

「Debugger::dump('test=');」はデフォルトで使えなくなった。

CakePHP3のトランザクション

モデルからconnection()を通して、トランザクション関数を呼び出す。
下記はモデル名がAnimalsのサンプル。


	$this->Animals->connection()->begin();//トランザクション開始
	
	~  DBへの保存処理 ~
	
	$this->Animals->connection()->commit();//コミット
	

ロールバック
$this->Animals->connection()->rollback();

複数データを一括でINSERTする


一回のINSERTで複数行を登録するサンプル。

	$data=[
			['animal_name'=>'ライオン','animal_value'=>1001],
			['animal_name'=>'サイ','animal_value'=>1002],
	];

	$query = $this->Animals->query();
	$query->insert(['animal_name', 'animal_value']);
	
	foreach ($data as $row) {
		$query->values($row);
	}
	
	$this->Animals->connection()->begin();//トランザクション開始
	
	$query->execute();//SQL実行
	
	$this->Animals->connection()->commit();//コミット
	

Sql Log


	INSERT INTO animals (animal_name, animal_value) 
	VALUES 
	  ('ライオン', 1001), 
	  ('サイ', 1002)
	


参考サイト

配列形式のPOST

配列形式のデータをPOSTする方法は、CakePHP2の仕様と基本的に変わらない。
index.ctp(Templateビュー)
	<?php 
	echo $this->Form->create('Animals' , ['type'=>'post','url'=>['action'=>'reg']] );
	echo $this->Form->text('animal_name');
	echo $this->Form->text('yagi.2.text_a');
	echo $this->Form->text('yagi.2.text_b');
	echo $this->Form->submit('送信');
	echo $this->Form->end();
	?>
	

Controller
	class AnimalsController extends AppController
	{
		public function reg(){
			debug($this->request->data);
	~ 省略 ~
	

出力
	[
		'animal_name' => '',
		'yagi' => [
			(int) 2 => [
				'text_a' => 'あいうえお',
				'text_b' => 'かきくけこ'
			]
		]
	]
	

テーブルクラス不要のバリデーション

コントローラにバリデーションを記述することができる。

コントローラ
	namespace App\Controller;
	use Cake\Validation\Validator;
	class AnimalsController extends AppController
	{
		public function vldDemo1(){
			
			// バリデーションを定義する
			$validator = new Validator();
			$validator
				->integer('no_a','番号Aは数値でありません。')
				->maxLength('text_b', 4,'テキストBは4文字以内です。');
			
			// サンプルデータ
			$data=
				[
				'no_a' => 'a',
				'text_b' => 'あいうえお'
				];
	
			
			// バリデーションを実行して、入力エラー情報を取得する
			$errors = $validator->errors($data);
	
			var_dump($errors);
			
		}
	}
	

出力

	array (size=2)
	  'no_a' => 
	    array (size=2)
	      'integer' => string '番号Aは数値でありません。' (length=37)
	      '番号Aは数値でありません。' => string 'The provided value is invalid' (length=29)
	  'text_b' => 
	    array (size=1)
	      'maxLength' => string 'テキストBは4文字以内です。' (length=38)
	

バリデーションの種類

Validatorクラスは各種バリデーションを行うメソッドを備えている。
Validatorの使用例
Validatorの公式ドキュメント

以下に各種バリデーションメソッドを列挙する。
メソッド 説明
alphaNumeric() 半角英数字のバリデーション。
blank() 空であるか判定する。半角スペースやタブのみも空とみなす。
containsNonAlphaNumeric() 一つ以上の半角英数字を含んでいるか判定する。
custom() 正規表現による入力チェック。
date() 日付の検証。
datetime() 日時の検証。
decimal() 小数値のチェックする。
email() Eメール用のバリデーション。
equalTo() 指定した値と正確に一致するか判定する。
extension() ファイル拡張子のバリデーション。
fileSize() ファイルサイズのバリデーション。
geoCoordinate() 地理座標のバリデーション。
inList() 値がリスト内に存在するか判定する。
ip() IPアドレスのバリデーション。
isInteger() 整数のバリデーション。
latitude() 緯度のバリデーション。
lengthBetween() 文字列の長さを範囲チェックする。
localizedTime() 地域を考慮した日時チェックらしい。
longitude() 経度のバリデーション。
luhn() Luhnアルゴリズムを利用したバリデーション。Luhnアルゴリズムは識別番号の入力ミスを防ぐためのアルゴリズムである。識別番号にはクレジット番号などがある。
maxLength() 文字列の最大長チェック。
mimeType() ファイルのMIME TYPEを判定する。
minLength() 文字列の最小長チェック。
money() 値が金額であるかチェックする。
multiple() 複数選択用のバリデーション。最大選択数、最小選択数などのチェックができるらしい。
naturalNumber() 自然数のバリデーション。
notBlank() 空白文字以外が含まれているかチェックする。半角スペースやタブは空白文字と見なされていないようである。
notEmpty() notBlankのラッパークラス。2016年6時点ではこちらを使った方が良いかもしれない。notBlank は任意のエラーメッセージを表示しないからである。
numeric() 数値のバリデーション。
range() 数値範囲のバリデーション。
time() 時間のバリデーション。時分までは検証するが、秒は検証対象外である。
uploadError() ファイルアップロードでエラーが起きていないかチェックする。
uploadedFile() アップロードファイルのバリデーション。
url() URLのバリデーション
userDefined() ユーザー定義のバリデーション
utf8() utf8であるかチェックする。
uuid() UUIDのバリデーション。

find:従来の配列方式で取得する方法


	$query = $this->find()->
		where(['fish_value'=>102])->
		order(['fish_date DESC'])->
		hydrate(false)->
		limit(10);
	
	$data = $query->all();
	

idを指定してEntityを取得

	$ent = $this->get(99);