2

URL にコントローラーを使用せずにページをルーティングすることは可能ですが、他のコントローラーは機能しますか? 例:

URL に /pages/ のないページがある場合は次のように動作しますが、他のコントローラーにアクセスしようとすると動作しません。

  • から:Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));
  • に:Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'index'));

ルーターが存在する場合、コントローラー/アクションを実行するようにルーターをセットアップする方法はありますか。そうでない場合は、ページコントローラー/アクションを実行しますか?

4

3 に答える 3

3

短い答えは、ノーだと思います-あなたが望んでいる方法では不可能です*。ルーティングは実際には「ロジック」駆動型ではないため、両方の点で必要なものを一致させる方法を考え出さない限り、「コントローラーが存在する場合は_、そうでない場合_」のようなことはできません。

*ただし、各「ページ」をルート ファイルの行として追加することはできます。これにより、「about」、「contact」などに直接アクセスできるようになりますが、それらと完全に一致しないものは残りのルートによって処理されます。

于 2013-06-06T14:37:03.417 に答える
0

上記の Dave の回答とは逆の方法で、各ページではなく各コントローラーのルートを追加することで、実際にこれを解決しました。(新しいコントローラーを頻繁に追加することはありませんが、定期的に新しいコンテンツを追加します。)

// define an array of all controllers that I want to be able to view the index page of
$indexControllers = array('posts','events','users');

//create a route for each controller's index view
foreach ($indexControllers as $controller) {
    Router::connect(
        '/' . $controller,
        array(
            'controller' => $controller,
            'action' => 'index'
        )
    );
}

//create a route to remove 'view' from all page URLs
Router::connect(
    '/:title',
    array(
        'controller' => 'contents',
        'action' => 'view'
    ),
    array(
        'pass' => array('title'),
        'title' => '[a-z0-9_\-]*'
    )
);
于 2014-01-23T01:53:44.733 に答える