
CakePHPについての紹介されている書籍についてまとめてみました。
バージョンアップの激しいオープンソースの書籍を読む場合はバージョンを気にしなくてはいけなく、CakePHPの場合は1.1系か1.2系かなどで構成が大きく異なる時もありますが、CakePHPそのものの雰囲気を巨視的に体感するには書籍はお勧めかもしれません。
なんでも、Model・View・Controllerのパスは複数指定することができるそうです。
http://www.mono-space.net/blog/php/e070409_mvc_path.htm(Model,View,Controllerを共有する)
/app/config/bootstrap.phpに記述するのですが、なんとbootstrap.phpの一番下に以下のような記述がありました(常識??)
環境はCake1.2系なんですが、URLをhttp://life-hack.jp/blog/charly/
のようにプロジェクト名の次にユーザ名を全部のURLに入れたい場合があると思います。
ブログシステムなどを作る場合などはドメイン/ユーザ名/controller/actionにしたい場合も多いかと思います。
しかし、Cakeのデフォルトではプロジェクト名(ディレクトリ名)の次には基本的にcontrollerが来るようにできていて、http://life-hack.jp/blog/charly/16のようにすることで存在しないページを自動でリダイレクトする仕組みは作れても、ユーザ名などを全コントローラの前に挿入することは面倒となってしまいます。
そこで、CakePHPコア部を改良することでURLに毎回ユーザ名を入れれるようにしてみたので紹介します。
「一覧リスト」と「メール送信」機能を追加しました。
「一覧リスト」はサイトマップ的なSEOの効果を見込んでいます。
こうやってちまちまと機能追加しているのですが、このブログシステム、将来的にはソース(CakePHPベース)は公開するつもりです。
現在簡易テンプレートシステムは完成しているのですが、デザイナーさんがインストールして自分でテンプレートを触れるレベルまで作りたいと思っています(現状はCakePHPを理解していないとテンプレートがいじれないんで・・・)。
CakePHPを用いて様々なローカル環境で作業しているのですが、Cakeの特性上かわかりませんが、存在しないフィールドやテーブルにアクセスしようとしたら落ちてしまう場合があります。
そこでテーブルのインストーラがあれば、常にテーブル情報が最新に保てるようになると思い、その第一弾としてテーブル情報のdumpプログラムを作りました。
インストーラの作成予定ですが、
とまぁこんな感じでしょうか。
ローカルとサーバーで常にテーブル状態を同期すればいいだけなんですが、それがなかなか面倒でして、設定ファイルさえ用意すれば(その設定ファイルはグラフィカルに編集可能)常に最新のテーブルを保てると同時に、システムをパッケージとして提供する際のインストーラも作成できるかと思っています(実際そううまくはいかないものですが・・・)。ただ、テーブル情報の簡易dumpは有用かと思ったので今の段階で公開することにします。
CakePHPの1.2系から導入された(1.1系でもディレクトリだけは存在したw)「Behavior」、これでController→Component、View→Helper、Model→Behaviorという住み分けが完成したそうです。
そこでこのBehavior、何が出来るかというと他のComponentやHelperと同じようにMVC各クラスに共通機能を追加するためのモジュールとなっています。
CakePHP1.2ではデフォルトで/libs/model/behaviorsにacl.php、translate.php、tree.phpが入っていて、Modelクラスに追加できるようになっています。
ユーザが作成したBehaviorクラスは/app/model/behaviorに置くのですが、modelクラスでのBehaviorの利用法が他のControllerクラスやViewクラスと異なっていたため若干はまりました。。
現在作成中のBlogシステム(http://life-hack.jp/blog/charly)はCakePHPで作られているのですが、HatenaDiaryの仕組みを元にしているため、最後の「charly」の部分はユーザーIDとなっています。
しかし、CakePHPは不便なことにルートディレクトリ(この場合は「http://life-hack.jp/blog/」)の次のディレクトリ(この場合は「charly」)をコントローラークラスの名称だと認識してCharlyControllerを探しに行きます。
当然CharlyControllerは見つからないため「Missing Controller」となるわけです。
Missing Controllerを対処するためには
の2通りが考えられます。
今回の目標ははBlogControllerに引数として「charly」とそれ以降の引数を渡すことです。
SVNを使っていたりFTPで一括でアップロードする際にローカル環境とサーバー環境が違うためアップロードしたとたんにエラーになるのを防ぐ方法
まぁアップロードする際にdatabase.phpをフィルタリングする設定にすることでも事足りるんですが。
どこかで同じ事をしていた人を見ましたが、メモってことで。
if(FULL_BASE_URL == 'http://localhost')を用いることによって様々な場面でローカルならこう、サーバーならこうっていうロジックを作成できます。
ちなみに自分の場合はGoogle AdSenseをローカルでは非表示にして、サーバーでは表示するなどといった作りをしています(誤クリックで利用停止になりたくないんで・・・)。←IPやらではじくようにする方が絶対ですが、色んなPCを使ってアクセスするんで開発環境では・・・ってだけ分けてます。
なるほどと思うTipsでした。 From CakePHP
トラックバック・コメント機能はまだ未実装ですが、hatena記法の一部を実装できたので一応の完成とします。
hatena記法で実装した機能は以下のとおり