CakePHP

【CakePHP2.4】よくつかう環境変数まとめ。

めも

・APP
/home/…/app/

・APPLIBS
/home/…/app/Lib/

・CAKE_VERSION
例)2.4.2

・WWW_ROOT
/home/…/app/webroot/

・CSS
/home/…/app/webroot/css/

・IMAGES
/home/…/app/webroot/img/

・JS
/home/…/app/webroot/js/

 

【CakePHP2.4】Jsonヘッダーを送出する。

めも。

コントローラーにて。

$this->response->type('application/json');
$this->response->send();

 

【CakePHP2.4】指定したフォルダの内容を取得する。

めも。

App::uses('Folder', 'Utility');
$folder = new Folder('/path/to/dir');
$contents = $folder->read();

返却される配列の[0]番目にディレクトリが格納され、[1]番目にファイルリストが格納される。

 

【CakePHP2.4】ファイルをダウンロードさせる。

めも。

コントローラーにて。

$this->response->file('/path/to/file');
$this->response->send();

 

【CakePHP】Model::create()のメモ。

Model::create()を行った際、プライマリーキーを除いた全てのカラムに設定されている初期値がセットされる。
そのためレコード更新の時、初期値が設定されているカラムの値をセットせずにModel::create()、Model::save()を行うと、意図した動作にならない場合があるので注意。

具体例として、statusなどのカラムを初期値1で設定しており、どこかのタイミングで2に書き換わっていたとする。そしてそのレコードを編集する際にステータスも「2」であると明示的にセットしない限り、修正完了した時点でステータスは1に戻ってしまう。

ということである。

IDさえセットしてしまえば、他の渡されなかった値はDBのレコードをそのまま維持してくれると勘違いしていたが違った模様。

ちなみにコアコードは下記のようになっている。

public function create($data = array(), $filterKey = false) {
	$defaults = array();
	$this->id = false;
	$this->data = array();
	$this->validationErrors = array();

	if ($data !== null && $data !== false) {
		$schema = (array)$this->schema();
		foreach ($schema as $field => $properties) {
			if ($this->primaryKey !== $field && isset($properties['default']) && $properties['default'] !== '') {
				$defaults[$field] = $properties['default'];
			}
		}

		$this->set($defaults);
		$this->set($data);
	}

	if ($filterKey) {
		$this->set($this->primaryKey, false);
	}

	return $this->data;
}

10行目でおもいっきり初期値セットしてるがな。

 

【CakePHP】モデルでSQLを直接実行する。

めも。

特殊なSQLをフレームワーク側に組み立てさせるのがめんどくさい場合とかあるよね。

Model::query()メソッドを用いる。

モデルクラスにて。

$sql = '任意のSQL';
$res = $this->query($sql);

まぁモデルのメソッドを使って生成出来ないSQLは滅多に存在しないのでなるべくなら規則に従ったほうが良い。

 

【CakePHP2.4】BoostCakeプラグインの導入手順まとめ。

めも。

1, まずは下記URLからソースをダウンロード。

https://github.com/slywalker/cakephp-plugin-boost_cake

2, ファイルを解凍後、プラグインが梱包されたフォルダ名を「BoostCake」に変更し下記ディレクトリに格納。

app/Plugin/

3, 「app/Config/bootstrap.php」に下記を追記。

CakePlugin::load('BoostCake');

4, 「app/Controller/AppController.php」に下記を追記。

class AppController extends Controller {
	public $helpers = array(
		'Session',
		'Html' => array('className' => 'BoostCake.BoostCakeHtml'),
		'Form' => array('className' => 'BoostCake.BoostCakeForm'),
		'Paginator' => array('className' => 'BoostCake.BoostCakePaginator')
	);
}

5, レイアウトファイルのhead要素内で下記ファイルを読み込む。

echo $this->Html->script('//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js')."\n";
echo $this->Html->css('bootstrap')."\n";
echo $this->Html->script('bootstrap')."\n";

6, 以上で導入は完了。使い方は書きURLを参照されたし。

http://slywalker.github.io/cakephp-plugin-boost_cake/bootstrap3.html

 

【CakePHP】find()のconditionsでNOT条件を指定する。

めも。

$this->{$this->modelClass}->find('all', array(
	'conditions' => array(
		'NOT' => array(
			$this->modelClass.'.id' => array(1, 2, 3, 4)
		)
	)
));

こんな感じ。