cakePHP

2010年05月28日

PHP:EclipseでCakePHPプロジェクトをインポートすると構文エラーが大量発生する場合

JavaScript問題 エラー



 PHPプロジェクトの作成する際に「JavaScriptサポートを使用可能にする」にチェックを入れるとJavaScriptの検証が追加されdebug_kitなどを使う場合に大量にエラーがでる。


screen


(クリックで拡大)

 新規PHPプロジェクトを作成する際に上画像のチェックボックスを外すとエラーはでない。

 プロジェクト作成後もナビゲーターのコンテキストメニューなどからJavaScriptサポートは追加可能。


HTML問題 or XML問題エラー




 screen2


(クリックで拡大)

 Eclipse全体の設定の「検証」からも変更できるが、HTMLとXMLの検証を外すのは場合によりけりなので個別に検証を外す場合の方法。

 プロジェクトエクスプローラーなどのコンテキストメニューからプロジェクトを選択して右クリック→「プロパティ」→「検証」欄で、「プロジェクト固有の設定を可能にする」にチェック。
 HTML構文やXMLバリデーターなどのチェックを外す。

 ちなみに設定を変えただけではエラーは消えないので、上タブの「プロジェクト」→「クリーン」などで一度検証を走らせてあげる必要がある。

 エラーは消えるけど、検証対象から外しただけなので、ご利用は計画的に…。


2010年04月12日

CakePHP:開発備忘録20100412

 久しぶりにCakePHP1.2をさわったのでメモ。

ルーティング



ルートにアクセスした場合にtopコントローラーのindexメソッドに対応するページを表示したい場合。

app/config/routes.phpを編集。

Router::connect('/', array('controller' => 'top', 'action' => 'index'));


 参考ページ

開発に便利なdebug_kit



 ・ページ表示に利用したメモリ容量を表示することができる。(PHP5だとかなりのメモリを消費していますねぇ。自分の環境だと初期化だけで3.7MB)

 ・Viewに渡された値を見ることができる

 ・SQLクエリのExplainを見ることができる

 などなど、かなり便利ですねぇ。

 debug_kitでできることについてはこのページが秀逸です

SimpleTest導入時にモックテーブル作成時にenum型が無視される




 ・・・enum型問題は結構前からありましたよね。

 SimpleTestでfixturesを設定するとモックDBが簡単に利用できるのですが、該当テーブルにenum型がある場合は注意です。

 対応方法としては型を自動判別させずにコードに指定するか、テストのの度にテーブルをドロップしないで最初に作成したテーブルを使い続けるかが早いですが、テーブルをAlterした場合にfixtureコードを変更したりモックのテーブルもAlterしなければいけない面倒も発生します。

Cashがかなり便利になっている



 CakeのキャッシュといえばViewキャッシュだと思っていましたが1.3はかなり便利にキャッシュを利用できるようになっています。

 このページにあるように、Key-Value的にキャッシュが利用できます。

 これでModelキャッシュも可能ですねぇ。
 素晴らしいです1.2。


JSONがPHP4系でもモジュールインストール無しで使える



 今使っている環境が5.2系なのでPHP4系では試していませんがjavascriptヘルパーで簡単にJSON形式が利用することができます。
 (多分CakePHPなので4系でも使えると思います)

 注意したいのはマルチバイト文字を変換する場合utf-8でないと空文字("")として出力されてしまうこと。
 文字コードはutf-8に直してから渡してあげましょう。

いまだにリファレンスが貧弱



 久々にWebリファレンスを眺めてみましたが、あんまり充実してませんねぇ。
 かなり知名度も成熟度も増したと思うので、もうちょっと詳細な説明があるかと思ったのですが・・・。

 まぁ、いざとなればソースコードを見れば動きが追えるのですが・・・

 個人的にはキャッシュとdebug_kit(拡張ですが)がGoodですねぇ。


2009年05月14日

CakePHPのexplainコンポーネントを1.1で動かしてみた

 久しぶりにPHPネタ。
 cakephperさんの作成したCakePHPのデバック時にexplainの結果が出せるコンポーネントが非常に便利そうなので、導入してみた。

 ただし、自分の環境はCakePHP1.1なのでちょいと修正が必要になった。
 ソースを追っかけてわかったが、CakePHP1.1と1.2ではデバックを出力する仕組みがかなり変わっていた(というか1.1がわかりずらい!!)。

まずは上記サイトからソースコードをDL。

 コンポーネントファイルを配置

#app/controllers/components/explain_sql.php



 AppControllerに以下を追記

var $components = array('ExplainSql'); // その他コンポーネントを利用している場合は追記するように修正する



 afterFilter()に以下を追記

function afterFilter(){
parent::afterFilter();
$this->ExplainSql->showExplainSQL();
}


 ConnectionManager::sourceList
 というメソッドが1.1には無いので、CakePHP1.2から移植してみる
 ・・・というほどでもなく、丸っとコピーで動いた。

function sourceList() {
$_this =& ConnectionManager::getInstance();
return array_keys($_this->_dataSources);
}


 ここでdebug設定を2にあげると(Configure::write('debug', 2))、フッター以下で出力されるクエリログには見事にexplainしていることをしめすログが残っている。

 しかし、explainの結果が出力されない!!

 というわけで、explain_sql.phpのソースコードを眺めてみる。

$this->_controller->output .= $html_out;
↑最終的には上のようにexplain結果表示用のhtmlを格納しているが、1.1のデバックではこれを使用していない模様。

 デバックの出力処理をしている箇所を探すために、久しぶりにViewやらControllerの親クラスを追いかける。
 ディスパッチ処理を追ってみる・・・

 CakePHP1.1のdebugの仕組みを追ってみると、通常のページ描画処理であるview->render()とは別の流れで吐き出されているようだ。
 色々探すとcake\basic.phpにdebugという関数が定義されており、グローバルに呼びだしている模様。

 それを踏まえて
$this->_controller->output .= $html_out;

debug($html_out);
に書き換えてあげると一応表示された。

 elementの描画にあわせて複数回吐き出されるなどの問題がまだ残っているが、とりあえず開発環境でデバック時に利用する分には十分な結果が得られた。

 出してみると、いくつかまずいクエリが見つかった。
 これは便利。

 Ruby on Railsに同じ仕組みはあるのかな?
 あるならこちらも導入したいものです。

【追伸】
 コンポーネントの作者のcakephperさんから助言いただきました。

 $this->_controller->output .= $html_out;

 ではなく、

$out = ob_get_clean();
ob_start();
echo $out;
echo $html_out;


 とすると良いとのこと。試した見ましたが、こちらの方が綺麗な出力で良いです!! ありがとうございました。

2009年04月28日

CakePHP:久しぶりに触った1.2はかなり違っていた

 久しぶりにCakePHPを触る。
 自分のサイトも含めて、1.1系ですべての開発を進めていたので、遅まきながら初1.2環境。

 .htaccessの設定などはディレクトリ構造が大きく変わっていないので、1.1と違和感無く設定できる。

 最初にindex.phpにアクセスしてみるとこれはかなりかわっている。
 黄色い背景で、

 Please change the value of 'Security.salt' in app/config/core.php

 というなにやらsaltを変更するような文言。
 パスワードとかでいうsaltなんだろけど、何かを生成するのに使うのかな?

 続いて緑背景で、

 Your tmp directory is writable.

 まぁ、Windowsなんで書き込み権限はあるということでしょうね。
 どうやら、黄色が警告で緑が正常ということらしい。

 The FileEngine is being used for caching. To change the config edit APP/config/core.php

 キャッシュを使えますよというぐらいの意味だろうか? まぁ、これも緑なんでOKなんだろう。

 Your database configuration file is NOT present.

 これは黄色。
 DBの設定をしろということでしょう。

 気になったのが、以下の文面。

 To change the content of this page, create: APP/views/pages/home.ctp.

 拡張子がctpですね。Cake Template?
 そういえば会社の人が拡張子が変わったようなことを言っていたような気がするぞ。

 という感じで、おおむね違和感無く初期設定完了。

2008年09月01日

本棚に追加しました(CakePHPの本)

 本の紹介ページにCakePHPの書籍3冊を追加しました。

 CakePHPで動いているサイトで、CakePHPの本を紹介するというのは不思議な気持ちですね。

2008年08月31日

本の紹介:CakePHP徹底入門

 CakePHP1.2を扱った入門書ということで、1.1との比較を行いたい目的もあって購入しました。

 最近手をつけたばかりのRuby on Railsとの比較という視点も交えつつ、紹介しようと思います。

 CakePHPは今のところCakePHPガイドブックが秀逸でしたが、どこまで迫れるか、もしくは越えてくるかをキーポイントに読み進めました。

 まずは概要から導入方法の説明。
 導入方法の解説は上記ガイドブックより丁寧に書かれており、Windows、Linux(GUI)、Macでの開発環境構築方法を紹介しています。

 Ruby on Railsに比べて、CakePHPは.htacessが使えれば、
 レンタルサーバーに設置するだけでOKという導入の容易さが利点ですねー。自分もレンタルサーバーにRuby on Railsを置くための設定を行えないがためにCakePHPで自サイトの作製にCakePHPを選択した経緯がありました。

 導入が終わりましたら、
 Bake(Rubyの場合はScaffold)を用いた土台作成の解説。
 フレームワークの構造を把握するのにこのBakeの仕組みは、
 簡単にファイルが設置できて、MVCの関係も把握できる素晴らしい機能ですね。
 1.1と1.2の比較としてはBakeで指定できるバリデーション(入力値のチェック)のパターンが増えましたね。これは便利そうです。

 本書執筆時点で指定はできるが実装が無いので機能していないパターンがあるのはご愛嬌ですかね。

 Bakeの部分もガイドブックより、
 丁寧に説明されており入門者には良いと思います(中級者だと逆に不要部分の可能性が高いですが、そもそも入門書は不要ですよね。私のような書痴以外)。

 Bakeの次はコンポーネントやヘルパーといういわゆるモジュールの説明。もうちょっとBakeから踏み出したサンプル作成の説明などがあっても良かったなぁと思いますが、一通り機能を説明しなければいけない入門書というスタイル上仕方が無いのかもしれませんね。
 Emailモジュールというのが1.1では無かったモジュールで、これは使えそう。

 続いて「開発のヒント」としてバリデーションやキャッシュ機能という実践よりの機能の紹介に移りますが、モデルの説明、ビューの説明、コントローラーの説明と分けて扱ったガイドブックの方が読んでいて、全体を俯瞰できて良かったような印象を受けました。

 実際の開発の紹介的に「チームによるサイト構築」は個人的には完全に不要でした。アジャイル手法や要件定義、設計ついて短く紹介していますが、本当にさわりだけで全然書ききれていません(当然といえば当然ですが)。仕事でフレームワークを用いて段階の人にはもと足りないだろうし、仕事で使わない人にはほとんど無用の章です。

 全体的な感想としては、入門書として導入からBakeでCakePHPの基礎を把握するにはガイドブックより、本書の方が丁寧に書かれていたので入門書としてはオススメです。
 もう一歩先の部分はCakePHPガイドブックの方が充実していたように思います。

 フレームワークを初めて触るような方やCakePHP1.2で開発する方は本書を選択し、フレームワークでの開発経験があり、CakePHPの機能の全容をある程度深く学びたい方は1.1版ですがCakePHPガイドブックが良いと思います。

 CakePHPは入門書は充実してきたので、そろそろ中級者以上を対象にした書籍を出して欲しいところですね。

 






2008年08月26日

CakePHP:新しい本がでるようですね(1.2対応)

 Amazonから案内が来ました。
 CakePHPの1.2に対応した新しい本がでるようです。
 個人的には入門と銘打った本はそろそろ一区切りにして、
 もうちょっと突っ込んだ内容のものが欲しいのですが。

 とかいいながら、予約しちゃうのですが・・・



2008年07月09日

cakePHP:久しぶりのbakeではまる

 久しぶりに機能追加を思い立ち、
 CakePHPでbakeを用いてテーブル操作用のコントローラーを作成しようとして見事に嵌ったのでメモ。

 viewをつくろうとしたら、
 なぜかDBのカラム等の情報が取れていないようで、
 まるで足組み(scafold)の用を成していない。

 色々試してみると、
 テーブル名にアンダーバー(_)があると取得できない模様。
 不細工な対応だが、テーブル名を変更して対応。

2008年03月31日

CakePHPでダンプ

 CakePHPでSQL文を出力するのは、
 
define('DEBUG', 2);

 でしたね・・・
 0、1のboolだと思い込んでしばらく悩んでしまった。

 値を出力する場合にvar_dumpを使っていましたが、

 CakePHPはグローバル関数でprというのがあることに気がつく。

 タイプ数も少ないし、
 HTML形式である程度見やすく表示できるし便利。

 んー、常識?

2008年02月11日

ひさびさのcakePHP

 最近、PHPとかなり疎遠になっていたので、
 久しぶりにcakePHPをさわってみる。

 まずはローカル環境+Eclipseで編集できるように、
 XAMPPとEclipseの設定をいじくりながら、cakePHPが動くように調整。

 XAMPP環境の場合、
 インストール後にhttpd.confの

LoadModule rewrite_module modules/mod_rewrite.so

 のコメントアウトを外してあげれば、
 あとは各.htaccessにRewriteBaseの追加で動く。

 はずだったのに・・・。

 apacheの再起動でなぜかコケてしまった。

 XAMPPだとよくわからないので、
 コマンドラインでapacheを直接起動してみると、

apache.exe -k start
(OS 10048)通常、各ソケット アドレスに対してプロトコル、ネットワーク アドレス、ま
たはポートのどれか 1 つのみを使用できます。 : make_sock: could not bind to addr
ess 0.0.0.0:443
no listening sockets available, shutting down
Unable to open logs


 ソケットとかプロトコルなんかを聞くと嫌な予感がする私。
 
netstat -a -o

 でポートを調べてみると、
 80番ポートをどなたかが使用している模様。
 タスクマネージャーでもよくわからなかったので、

 怪しいアプリをストップしていくと・・・

 Skypeでした。

 
 とりあえず、Skypeを停めて、apacheを再起動するとすんなり起動。

Profile

シーラカンス

Recent Comments
QRコード
QRコード
livedoor Readerに登録
RSS
livedoor Blog(ブログ)