すべてのコントローラーを作成する必要はありません。実際、それを回避するためのより良い方法があるので、あなたはすべきではありません。静的なページが多いほど、手に負えなくなる可能性があります。
静的ページの場合
pages_controller.phpをcake/libs/controllerフォルダーからapp/controllersフォルダーにコピーします。次のコードをdisplay()アクションに追加します。
function display() {
...
$page = Inflector::slug($page);
if (method_exists($this, $page)) {
$this->$page();
}
$this->render(join('/', $path));
return;
}
次に、routes.phpファイルを変更して、さまざまな静的ページを追加します。
Router::connect('/about', array('controller' => 'pages', 'action' => 'display', 'about'));
Router::connect('/contact', array('controller' => 'pages', 'action' => 'display', 'contact'));
現在、お問い合わせフォームは静的ページですが、いくつかのロジックが添付されています。したがって、PagesControllerにアクセスして、これ(または単に静的ではない他のページ)専用のアクションを作成できます。
function contact() {
if (!empty($this->data)) {
...
}
}
基本的に、ルートは静的ページリクエストをPagesControllerのdisplay()
アクションに転送します。表示アクションは、同じ名前のメソッドが存在するかどうかを確認します。含まれている場合は、そのアクションを実行し、pages /{page}.ctpビューを表示します。
非静的ページの場合、例:ブログ
さて、これには間違いなくモデルが必要です。実際、複数のモデル(投稿hasManyコメント、投稿HABTMタグ)。これらの異なるモデルを操作してアクセスするには、コードを別のコントローラーに配置することをお勧めします。
多くの人は、URLに基づいてコントローラーに名前を付けるのが好きです。たとえば、などのURLが必要な場合は、コントローラーにBlogController/blog
という名前を付けます。
私が好む方法は、ルーティングを使用して必要なURLを取得し、CakePHPの規則に従ってコントローラーに名前を付けたままにすることです。
例えば。PostsControllerは、Postモデルと関連モデルを制御します。ただし、URLにすべての投稿のリストを表示したい場合は、/blog
それを指すルートを記述し/posts/index
ます。
Router::connect('/blog', array('controller' => 'posts', 'action' => 'index'));
追加のルートを設定することもできます。例:/blog/2010/06/10/whats-in-a-post
を指す/posts/view/
。
繰り返しますが、これは可能なことのほんの一例です。結局、あなたはあなたとあなたのチームの両方のためにあなたのコードを整理するのを助けるとあなたが考える方法に固執するべきです。