在网址中没有控制器的CakePHP页面

时间:2013-06-06 11:59:44

标签: php cakephp cakephp-2.1

是否可以在URL中没有控制器的情况下进行页面路由但仍有其他控制器工作?例如:

执行以下工作以使URL中没有/ pages /但是如果我尝试访问任何其他控制器它不起作用:

  • 来自:Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));
  • 收件人:Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'index'));

有没有办法设置路由器,以便它运行控制器/操作(如果存在)。如果没有它运行页面控制器/动作?

3 个答案:

答案 0 :(得分:3)

我认为简短的回答是,不 - 这是不可能以你希望的方式*。路由不是真正的“逻辑”驱动,所以除非你能想出一种方法来匹配你想要的两个方面,你不能做“如果控制器存在,那么 _,否则_ “那种事。

*但是,您可以在路线文件中将每个“页面”添加为一行。这将允许直接访问“约”,“联系”......等,而与它们不完全匹配的事物由其余路径处理。

答案 1 :(得分:3)

我知道我迟到了,但这是我寻找此事的人的小费。

routes.php

foreach(scandir('../View/Pages') as $path){
  if(pathinfo($path, PATHINFO_EXTENSION) == "ctp"){
    $name = pathinfo($path, PATHINFO_FILENAME);
    Router::connect('/'.$name, array('controller' => 'pages', 'action' => 'display', $name));
  }
}

这将为View / Pages文件夹中的每个ctp文件创建一个路径。

答案 2 :(得分: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_\-]*'
    )
);