1

我正在自己的基础上编写 CMS。我用 Node 和 NodeType 逻辑实现了它的内容部分。(每个节点都属于一个节点类型)节点和节点类型表中都有 Slug 字段,我在路由器中写了这两个路由:

Router::connect('/:typeslug',array('controller' => 'nodetypes', 'action' => 'view'),array('pass'=>array('typeslug')));
Router::connect('/:typeslug/:nodeslug',array('controller' => 'nodes', 'action' => 'view'),array('pass'=>array('typeslug','nodeslug')));

它会达到这样的内容:http://domain.ext/article/my-custom-article
第一个问题:这是一个正确和正常的方法吗?
第二个问题:使用 wordpress 之类的复杂 slugging 的解决方案是什么?(例如,使用像存档日期这样的 slug:http://mydomain.ext/2013/01/01/article/ ....
更重要的是能够在管理部分中切换 slug 类型。

感谢指导

4

1 回答 1

1

问题 1

这是正确和正常的方法吗?

是的,这很好,看一下与 CakePHP 应用程序(文档PagesController)捆绑在一起的内容。

问题2

使用 wordpress 之类的复杂 slugging 的解决方案是什么?(例如使用像存档日期这样的slugs:http://mydomain.ext/2013/01/01/article/ ....

在这种特殊情况下,您必须在routes.php文件中设置其他路由。

例如:

Router::connect(
    '/article/:year/:month/:day/*', array('controller' => 'articles')
);

对http://mydomain.ext/article/2013/01/01的任何请求都将被路由到您的文章控制器中的以下操作:

public function index($year, $month, $day){
    ...
}

请注意,我稍微颠倒了您的 URL,因为它避免了对不存在的控制器的模棱两可的请求。

问题 3

...更重要的是能够在管理部分中切换 slug 类型。

在这种情况下,您可以根据另一个配置值打开和关闭路由。您必须专门为您的应用程序设置一个配置文件,但您可以在运行时对其进行修改:

路由.php:

// load your routing configuration 
Configure::load('application_config', 'default');
// setup your routes
if(empty(Configure::read('routing_1')){
    // default routing
    ...
}else{
    // routing 1
    ...
}

AdministrationController.php:

public function someAction(){
    // persist configuration to file
    Configure::dump('application_config', 'default', array('routing_1' => true));
}

有关更多信息,请查看文档中的读取和写入配置文件部分。

我希望这能为您指明正确的方向。

于 2013-05-17T22:04:28.230 回答