CakePHP 2.0 pagination オプションの設定

Posted in CakePHP on 10月 27th, 2011 by Site Administrator

Paginatorについて、これまでは
$this->paginate[‘limit’] = 5;
などと直接いじれていたのですが、CakePHP2.0からはNGとなります。

回りくどいですが
$options = $this->paginate;
$options[‘limit’] = 5;
$this->paginate = $options;
としなければできないみたい。

あとlimitですが、上記のように設定したにも関わらず、URLで「/limit:10」
などとパラメータを指定すると、URLが優先されてしまいます。
回避するためには
$options[‘maxLimit’] = 5;
とmaxLimitを設定しなければなりません。

これまではパラメータでlimitを指定されないように(limitに膨大な値を指定されても困る!)、
paginateのwhitelistでlimitが使えないように設定をしていたのですが、
2.0からはmaxLimitを使うことで柔軟な対応も可能なようです。

CakePHP 2.0 Stable リリース

Posted in CakePHP on 10月 17th, 2011 by Site Administrator

ようやく?CakePHP2.0 がリリースされました。

SimpleTestが廃止になるのがわかっていたので自動テストに手を出せずにいましたが、
これで自動テストに手を出してもいいのかなと思います。

まだまだドキュメントも少ない状態なので手探りでの使用になりますが、
ぼちぼち使い始めてみましょうか。

ASP.NET MVC CakePHPとの対比

Posted in ASP.NET, CakePHP on 6月 23rd, 2011 by Site Administrator

ここ数年はCakePHPでの開発が多かったのですが、ここにきて.NETでの開発も再開です。
最近はASP.NET MVC & Razor & Entity Frameworkが面白そうなので、CakePHPとの
機能対比について随時まとめていきたいと思います。※言語はVBとしてます。

〇/config/database.php
→/Web.configのconfiguration→connectionStringsに記載

〇Modelを使用したO/Rマッパー
→Entity Framework 4.1のコードファーストを使えば近い概念になる。
/Modelsにエンティティクラスを定義、かつ、エンティティクラスにアクセスするためのDbContext継承クラスを定義

〇Helper
→App_Code以下に、拡張子vbhtmlでファイルを作成し、メソッドを定義する。

例)

'ヘルパー定義
'/App_Code/Views/Helpers/Sample.vbhtml
@helper sampleFunc(inputString As String)
    @("入力は " + inputString + " です")
End Helper

'呼び出し
'/Views/Home/Index.vbhtml
@Views.Helpers.Sample.sampleFunc("test")

CakePHP(1.3.8) SQLServerとの接続

Posted in CakePHP, DB, SQLServer on 6月 8th, 2011 by Site Administrator

http://www.greendesign.biz/sql-server-driver-for-php%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/
こちらを参考に接続設定を行いました

1.SQL Server Driver for PHPのダウンロード
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=80e44913-24b4-4113-8807-caae6cf2ca05

2.PHPへのドライバの設定
C:xamppphpextへ、適切なドライバをコピーし、php.iniに設定記載。
extension=php_sqlsrv_53_ts_vc6.dll
extension=php_pdo_sqlsrv_53_ts_vc6.dll

3.Apache再起動

4.CakePHPのDATABASE_CONFIGを設定
・‘driver’ は ‘sqlsrv’ を設定
・’charset’ => ‘UTF-8′ を追加(’encoding’ に設定してもダメ。また ‘utf8’ でもダメ)

5.dbo_sqlsrv.php を appmodelsdatasourcesdbo に配置
https://github.com/cakephp/datasources/tree/master/models/datasources/dbo/
ここからダウンロード

CakePHP (1.3.8) SimpleTest(1.01)で、初期recordsの動的変更

Posted in CakePHP, PHP関連 on 4月 13th, 2011 by Site Administrator

SimpleTestを使ってテストを行うとき、fixtureに$recordsとして配列を設定しておけば
テストテーブルに初期レコードを各テスト毎に自動で挿入してくれます。
testアクション毎に初期レコードを変えたいことがあったのですが、よい方法が見つからなかったので
データを更新するメソッドを差し込みました。
CakeTestCaseを継承したクラスAppCakeTestCase を作成し、更新メソッドresetRecordsを用意します。

class AppCakeTestCase extends CakeTestCase {

	var $name = 'AppCakeTestCake';

	function resetRecords($fixtureIndex, $recordsArray)
	{
		$fixture = clone $this->_fixtures[$fixtureIndex];
		$fixture->records = $recordsArray;
		$fixture->truncate($this->db);
		$fixture->insert($this->db);
	}
}

呼び出し元はこんな感じ。

require_once TESTS . 'app_cake_test_case.php';
App::import('Model', 'TestSample');

class TestSampleTestCase extends AppCakeTestCase {
	var $fixtures = array('app.test_sample',
	);

//省略

	function testTest1() {
		$this->resetRecords('app.tmp_pt_status_positive', array(差替えデータ));

//省略

		$this->assertEqual($expected, $result);
	}
}

CakePHP Eclipseでの設定

Posted in CakePHP, PHP関連, 開発関連 on 2月 16th, 2011 by Site Administrator

http://d.hatena.ne.jp/ngtn/20080204/1202142255

Eclipse上でCakePHP関連のコード補完を有効にするための設定について詳しくまとめてあります。
View内でのHelper、Controller内でのModelなどのコード補完をしたい方はぜひ参考に。

CakePHP (1.3.7) 例外処理とautoRender

Posted in CakePHP, PHP関連 on 2月 10th, 2011 by Site Administrator

ポリシーとして
「処理例外は原則上位にthrowし、controllerのactionでログ出力等の例外処理を行う」
という形で開発を行っています。

各actionメソッドにtry-catchを仕掛けるイメージです。
model・controllerで発生した例外についてはきちんとcatchできるのですが、
viewで発生した例外についてはcatchできません。
標準状態ではautoRenderがtrueになっており、action完了後にviewのrenderが自動で行われます。
当然ながらactionに仕掛けたtryブロックの外で発生した例外はcatchできない、ということになります。

viewのrender時に発生する例外についても洩れなくcatchしたいため、AppControllerで
var autoRender = false;
として、各controllerのactionのtryブロックの最後で
$this->render();
と明示的に記述するように最近はしています。
こうすればrender時の例外はtryブロックの内部で発生することとなるので、きちんとcatchできます。

CakePHP (1.3.6 and 1.2.9) SecurityComponent修正

Posted in CakePHP on 11月 19th, 2010 by Site Administrator

http://bakery.cakephp.org/articles/markstory/2010/11/13/cakephp_1_3_6_and_1_2_9_released

SecurityComponentの脆弱性が修正されました。
http://co3k.org/diary/12
こちらをみる限り、かなり致命的です。

SecurityComponentはいまいち使い勝手が悪く、調査してみたら私は使用していませんでした。
もしも使用している方いらっしゃいましたら最新版への早期アップグレードが必要です。

CakePHP (1.3) 大量のクエリを投げるときの注意点

Posted in CakePHP, DB, PHP関連 on 11月 8th, 2010 by Site Administrator

http://1-byte.jp/2010/10/29/too_many_queries_on_cakephp/
大量にクエリを発行する際、キャッシュが短い周期で被っちゃうみたいです。
「数万件のデータで衝突が発生する」とのことで、大量クエリが想定される場合は
「DboSourceクラスのcacheMethodsプロパティをfalseに設定すれば良い」とのことです。

CakePHP (1.3.5) CAPTCHA コンポーネント(日本語対応)

Posted in CakePHP, PHP関連 on 11月 8th, 2010 by Site Administrator

こちらのCAPTCHAが日本語の出力ができて面白いです。

http://www.infosia.co.jp/posts/157

ちなみに私の環境では使用例のとおりだと、出力時にフォントファイルが無いとエラーになってしまいます。
imagettftextの第7引数を「getenv(“GDFONTPATH”).DS.$this->font」として、フォントパスをフルパス
で渡すと正常に動作しました($this->fontには拡張子「.ttf」も付与してあります)。