何も考えずにSlugRouteを生成する
SlugRouteとは
単純に、
/posts/view/127
といったURLでは見栄えがあまり良いとは言えません。
そこで、例えばブログのタイトル等を使って、
/post/何も考えずにSlugRouteを生成する
といったURLにすることによって、SEO有効性も、URLを見た時の関心の引き具合も、ぐっと引き上げることができます。
これらのURLを扱うルーティングをまとめてSlugRouteと呼ぶことにします。
※そもそものSlugの定義とは少し違いますが、他の呼び方が思いつきませんでした。誰か教えて!
忍者プラグイン
まだドキュメントが出来上がっていませんが、忍者プラグインというものを作りました。
plugins/ninjaに適当に設置してください。(プラグインの設置はプラグイン :: CakePHPによる開発 :: マニュアル :: 1.3コレクションを参考にしてください。)
この中に以下のカスタムルートクラスが二つあります。
- AutoSlugRoute
- MultiSlugRoute
これらのどちらかを使うことにより、今すぐSlugRouteを作ることができます。
共通の機能としては、ざっくり
- 規約を使ったモデル、フィールドの自動決定
- モデル探索のキャッシュ
- キャッシュの削除
があります。
AutoSlugRoute
例えばdisplayField(titleなど)が設定されていれば、以下のようにするだけです。
これだけで、:titleにPost.titleが埋めこまれます。
また、様々な状況に対応するオプションは以下のものがあります。
MultiSlugRoute
複数のスラッグを使いたいときに用います。
基本的にAutoSlugRouteと同じですが、指定方法がいくらか変わります。
基本のモデルに紐づいたモデルも利用可能です。
オプション:
その他コールバックが実装できるなど、MultiSlugRouteはAutoSlugRouteより高機能です。
注意点
AutoSlugRouteはデフォルトで全件をキャッシュします。
これは高速に動作しますが、キャッシュ生成時に負荷が大きいため、局所的にパフォーマンスの劣化が起きる可能性があります。
MultiSlugRouteは必要な時にクエリを発行し、キャッシュをアップデートします。
これは全体的に満遍なく負荷がかかることを意味します。また、キャッシュのアップデートが頻繁にかかるため、全体的なパフォーマンスに気をつける必要があります。
以上のような問題を解決するために、細かいキャッシュコントロールを行う必要があるかもしれません。
また、1万件以上レコードのキャッシュが発生すると、キャッシュ読み込みの負荷が著しくかかります。(検証済みです)この場合、キャッシュをオフにすることも検討する必要があるでしょう。
これらパフォーマンス問題は、トレードオフな側面があります。
開発する規模によっては、コンポーネント単位での制御、またはIDによる制御をしないという設計もまた有効です。
詳細なキャッシュコントロールメソッドについては、ドキュメント、または解説をブログの記事にします。
最後に
レコードが固定、CMS、ブログなどという要件であれば、まったく支障なくSlugRouteが一瞬で作れ、堅牢です。
是非一度お試しください。
フィードバックお待ちしております。