ビギナー向け:よくあるCakePHP開発での落とし穴

元記事はこちら

By alexdd55

MVCフレームワークになじみのない場合は特に、CakePHPでゼロからはじめるのは簡単なことではありません。この記事がみなさんのお役に立つことを願っています。


ファイル名の誤り

私は何度もやってしまいます。ファイル名の末尾に’s’を付けたり付けなかったり、コード内やファイル名でもそうです。この間違いを見つけるのに(じつはファイル名の誤りなのに)何時間もコードだけ見ていたりして、イライラさせられます。

規約通りであることに努めましょう。
コントローラはいつも複数形です。例)users_controller.php
モデルはいつでも単数形です。例)user.php

ビューでは “echo” を使うことを忘れない

フォームをフォームヘルパーを使って作ったのに表示されない・・・悩みます。まず関係するすべての行で”echo”を使ったかどうかを確認しましょう。

プレーンなHTMLを使う場合はこのように書きます。

<div> 
<?php echo $some['array']; ?> 
</div>

phpにHTMLを埋め込む場合は以下のように書きます。

<?php 
echo '<div>'; 
echo $some['array']; 
echo '</div>'; 
?>

プレーンなHTMLを使うほうが、Netbenasのような開発環境を使う場合にコードフォーマットを整えてくれますし、生産性も上がるでしょう。

画像への正しいパス

Htmlヘルパーを使わずにビューで画像を表示させると、問題が起きます。Htmlヘルパーはいつでも画像ファイルへの正しいパスを作成してくれます。サイト構成が変わっても問題ありません。標準的なHTMLのIMGタグを使用するとビューで問題となり、画像が表示されないということが起こります。

リンク:
Htmlヘルパー:http://book.cakephp.org/view/835/image

訳者注:日本語版はこちらです。
http://book.cakephp.org/ja/view/1441/image

AJAX呼び出しによる意図しない結果

これは腰痛のもとになります。ロジックはすべて問題なくても、期待した結果が返ってきません。私の場合、たいていは新しいメソッドを作ったときに起きるようです。デバッグレベルをチェックしてみましょう。きっとそこが問題です。


function foobar()  {
configure::write('debug',0);
// somthing happens here
}

時間の節約になり、とても役立つでしょう。

ナイスなURL

SEOやナイスなURLについて考えると、(私を含め)多くの人はコントローラとアクション名をアドレスバーで見ていい感じになるように命名するでしょう。

もしよくわからないのであれば、分かるようになる時まで無視しましょう。

データベースや命名の規約があるのは、まず動作させるためであり、URLが綺麗かどうかについては心配しなくて良いのです。

はじめの頃は、私も命名に時間の半分を費やしていました。時間を無駄にせず、リンクにはHtmlヘルパーを使うようにし、まずは動作させます。あとで、プログラミングが終わってからでも、routesの設定でどうにでもなります。

[CakePHPの]ルーティングがよくやってくれるので驚くでしょう。Htmlヘルパーでリンクを作っていれば、自動的にすべてのリンクを調整してくれます。

リンク:
Htmlヘルパー:http://book.cakephp.org/view/206/Inserting-Well-Formatted-elements#link-836
ルーティング:http://book.cakephp.org/view/46/Routes-Configuration

訳者注:日本語版はこちらです。
Htmlヘルパー:http://book.cakephp.org/ja/view/1442/link
ルーティング:http://book.cakephp.org/ja/view/945/ルートの設定

クエリは所属の場所へ

はじめの頃は、いつも[SQL]クエリをコントローラに書いていました。それが一番簡単な方法で、混乱しない方法だったからです。しかしCakePHPに慣れてくるにつれ、それは愚かな方法だったと気づきました。きれいな構成にならないのです。

なによりも、すべての関係するものをモデルに入れ、データの取得はモデルで行います。コントローラは望みどおりきれいなままです・・・とにかくやってみましょう。プロジェクトが複雑になってきたら、そうやっておいてよかったと思うでしょう。

訳者注:二文目の原文は以下ですが、「stay lean」はおそらく「stay clean」のtypoと思われます。
The controller will stay lean and thats what you want… just believe it.

・・・忘れないでください・・・

何をするにしても、相変わらずPHPのままであり、どこでも何でもあなたの望むことができるのです。しかし気を付けていないと、CakePHPを数週間経験するうちに、やろうと思ったこととはぜんぜん違うようになってしまい、「動作ののろい」コードに逆もどりしてしまいます。

(翻訳終わり)

訳者より:

「設定より規約」のCakePHPには、規約がいろいろあります。規約に関してはこちらにまとめられています。規約が多いということは、覚えてしまえばどうということはないというメリットでもあります。最初のうちはチートシートなどを活用してみましょう。

対処法もいろいろあります。たとえば、AJAXに関しては、各コントローラ内のbeforeFilterでアクション毎に定義する方法もあります。bakeryのコメント欄では、以下のようなコードが挙げられています。

<?php  
class AppController extends Controller { 
    if ( $this->RequestHandler->isAjax() ) { 
        Configure::write ( 'debug', 0 ); 
    } 
} 
?>

この方法であれば、各コントローラに記述する必要がなくなるでしょう。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です