Cakephp 2.1 Router :: connect / *除了一些动作

时间:2012-11-15 21:31:05

标签: regex cakephp

我想知道是否有可能在下一行中使用此类内容但排除某些操作。因为我想管理,添加,删除,...以进行相应的操作而不是显示操作。我知道可以通过明确地预先指定这些规则来实现,但是如果你有其中一些规则,它在路由器文件中看起来不会很好。

 Router::connect('/paginas/manage', array('controller' => 'paginas', 'action' => 'manage')); 
 ...
 Router::connect('/paginas/*', array('controller' => 'paginas', 'action' => 'display'));

所以目的是删除第一行...

感谢。

1 个答案:

答案 0 :(得分:1)

在PaginasController中执行类似这样的操作,基本上我认为是PagesController: ....

public function display(){
// Assuming default behavior of cakephp here
...
if (!empty($path[0])) {
    $page = $path[0];
    if(
        method_exists($this, $page) &&
        !in_array(
            $page,
            array(
                // Methods that never should be executed in this controller are going in here
            )
        )
    ){
        $this->{$page}();
    }
}
}

这将在控制器中执行特定方法。您可以将其退出,以便之后停止工作。 这可能有点危险,因为它也可以访问AppController的父方法。

另外一种方法,你还需要两个这里描述的Router :: connect()规则:http://api.cakephp.org/class/router#method-Routerconnect

Router::connect(
  'paginas/:action/*',
  array(),
  array('paginas' => '(manage|add|delete)')
);

首先是另一个,然后是另一个。 从未测试过!

虽然我不明白为什么应该有公共方法来编辑页面。使用它们将它们与其余部分分开:http://book.cakephp.org/2.0/en/development/routing.html#prefix-routing

我建议,如果您正在尝试按照我的想法这样做,那么您将不会开始使用PagesController为页面编写管理。 “页面”在蛋糕中是一个或多或少保留的单词,你可以在使用这些单词时遇到大麻烦(编写一个“文件”插件,一旦包含“文件”模型。浪费时间,好像从cake1.2或1.3那里实际上是一个“文件”类来处理文件操作)。创建一些新的东西,如“ContentPage”或其他任何东西。那你就是一个更加安心的人。这个段落可能没用,因为你的控制器甚至没有命名为“Pages”,但是我讨厌删除长的,所以它保留,以防万一你需要这个信息。

另外,我建议不要更改编程语言,这意味着,您要么使用英语或西班牙语,要么使用英语或西班牙语,或者不是两者或更糟。你可以随意命名你的路线,但是类名应该留在英语中,因为蛋糕也是。

问候 func0der