0

我想知道是否有可能在下一行出现类似的内容,但排除某些操作。因为我想要管理、添加、删除……去相应的操作而不是显示操作。我知道通过预先明确指定这些规则是可能的,但如果你有很多这些规则,它在路由器文件中看起来并不好。

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

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

谢谢。

4

1 回答 1

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 为页面编写管理。“Pages”在 cake 中或多或少是一个保留词,使用这些词可能会遇到大麻烦(曾经写过一个“File”插件,包括“File”模型。浪费时间,好像从 cake1.2 或 1.3 开始实际上是一个“文件”类来处理文件操作)。创建一些新的东西,如“ContentPage”或其他任何东西。那你就省钱了。这一段可能没用,因为您的控制器甚至没有命名为“页面”,但我讨厌删除长的,所以它保留,以防您需要此信息一次。

此外,我建议不要更改编程语言,这意味着,您要么使用英语或西班牙语,要么使用其他语言,但不能同时使用这两种语言,或者更糟。你可以为你的路线命名任何你想要的名字,但类名可能应该保留在英文中,因为 cake 也是。

问候 func0der

于 2012-11-15T22:21:02.437 回答