0

CakePHP は初めてで、「ライブ」サイトがどのようにこれを行うのか疑問に思っています。

2つの可能性があります:

1) その (拡張された) AppController に一連のページ (関数) を持つ 1 つのコントローラーがあります。

2) 多くのコントローラーがあり、それぞれの (拡張) AppController に少数のページ (関数) があります。

(おそらく私の質問はもう届いていると思いますが、別の言い方もします)

連絡先ページをブログ ページとは別のコントローラーに配置する必要がありますか? (答えはイエスだと思います。) なぜですか?

4

1 に答える 1

4

すべてのコントローラーを作成する必要はありません。実際、それを回避するためのより良い方法があるので、あなたはすべきではありません。静的なページが多いほど、手に負えなくなる可能性があります。

静的ページの場合

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/

繰り返しますが、これは可能なことのほんの一例です。結局、あなたはあなたとあなたのチームの両方のためにあなたのコードを整理するのを助けるとあなたが考える方法に固執するべきです。

于 2010-12-03T05:15:49.580 に答える