CakePHP コントローラーのアクションをコンポーネントにまとめる
本業のほうが忙しく久々の更新になってしまいましたが小ネタです。
Cakeを使っていると最初はbakeやscaffoldを利用する機会がありますが、序々に利用頻度が減ってきました。(現在では殆ど使っていません)
理由としては、社内での共通のルールであったり、プロジェクト毎の特性を反映した雛型から複製して作成したほうが効率的になってきたということが大きいと思います。
ただ、bakeでの自動生成や複製方式だと初回は良いのですが、大規模なものになってくると、同様のソースが点在し一括での改修などが面倒なことになってきます。
ということで、明らかに同様の処理はscaffold風にコンポーネント化することにしました。
※コンポーネントからコントローラーを制御する場合は、ロジックが分散すると見通しが悪くなりますので、ロジック全体を委譲できる場合に利用することをお勧めします。
Read more
CakePHP zip圧縮コンポーネント
CodeIgniterの標準ライブラリにはZip圧縮クラスがあり、簡単に以下のような機能を実装することができます。
・Zipアーカイブを作成し、サーバーに保存やダウンロードを行う
・サーバーのファイルやディレクトリをZipに追加
・動的にテキストデータをZipに追加
このクラスをCakePHPのコンポーネントクラスとして利用できるように少々改良しました。
Read more
DAY12: メール送信
symfony1.1以降でのメール送信
symfony1.1以降で変わった点として、メール送信のためのライブラリが附属しなくなりました。
一言にまとめると、「自分の好きなライブラリを使えるよ」ということですが、言い換えると「symfonyではどれも標準でサポートしないよ」ということです。
Read more
DAY11: シンジケーションフィード
フィードを作成
デザインはさておきaskeetもそこそこ動くアプリケーションとして完成しつつあります。今日も本家のチュートリアルにのっとってやっていきましょう。
今日はフィードの作成です。といってもプラグインを利用するのでそれほど深く悩まなくてもすむはずです。
DAY10: AJAXでデータ操作
質問の投稿
新しい質問の投稿をAJAXを使ったフォームで実装していきます。
ログインフォームをAJAXで実装しているので基本は同じです。
symfony1.0との違いはやはりsfFormを利用した実装です。
DAY9: ローカルの改善
これまでのおさらい
symfonyで簡単なよくあるAJAXを実装するための関数や機能が用意されているのがわかりました。
また、外部ライブラリがコアのプラグインとして提供されるようになったということがわかりました。
9日目はテキストエリアのMarkdown対応と、ルーティングの変更です。
CakePHP1.2 Behaviorでモデルのメソッドキャッシュを行う
CakePHP1.2から新たにBehavior(振る舞い)クラスが実装され、モデルに共通の処理を定義することが可能になりました。
今回はBehaviorを使ってモデルの各メソッドの結果を自動的にキャッシュするクラス(CacheBehavior)を検討してみました。
CakePHPでは標準でビューキャッシュをサポートしていますが、Cacheクラスを利用することで簡単にキャッシュ機能を組み込むことができます。
DAY8: symfonyでAJAXを使う
これまでのおさらい
ようやくそれらしいアプリケーションができてきた感があります。でも、まだ8日目なんですね。。
本日はAJAXをsymfonyでやってみるということです。ではがんばってチュートリアルを実践してみます。
DAY7: モデルとビューの操作
これまでのおさらい
ようやく6日間がおわったというところです。本チュートリアルの目的はsymfony1.0との違いを確認したいということだったのですが、sfFormを使う時点でかなり違ったものになった印象を感じてしまいます。
ただ、フォーム処理を切り分けるという意識がsymfony1.0のころに比べてはっきりしているため以前あったバリデーションをアクションでやりくりしなくてはいけない場合があった違和感はなくなりました。
総合的にみて、symfony1.2のsfFormはWebアプリケーションを開発するためにはフォームヘルパーよりも数段優れている印象を受けます。
Read more
DAY6: セキュリティーとバリデーション
5日目までのaskeet
5日目でsfFormを使ったログインフォームの実装を行いました。
本家では6日目にバリデーションを行うのですが、すでにsfFormで設定を行っているので、確認しつつ進めていきましょう。
