【问题标题】:avoiding interference between slugs and controller or plugin names in cakephp 2.x router避免 cakephp 2.x 路由器中 slug 和控制器或插件名称之间的干扰
【发布时间】:2013-08-18 03:16:54
【问题描述】:

我正在寻找一种方法来自动避免在 cakephp url 中的 slug 和控制器/插件之间产生干扰。 根据这篇文章 (http://lecterror.com/articles/view/advanced-routing-with-cakephp-one-example) 我的 route.php 文件是这样的:

$exceptions = Cache::read('exception_url_list'); 

if ($exceptions===false) {
    $controllers=App::objects('Controller') ;
    $plugins=App::objects('plugin');
    $i=0 ;
    foreach ($controllers as $controller) {
        $list[$i]=str_replace('Controller','',$controller) ;
        $i++ ;
    }
    $exceptions=array_merge($list,$plugins) ;
    $i=0 ;
    foreach ($exceptions as $value) {
        $value = Inflector::underscore($value);
        $value = strtolower($value) ;
        $list[$i]=$value ;
        $i++ ;
    }
    $exceptions=implode('|', $list) ;
    Cache::write('exception_url_list',$exceptions) ;
}

Router::connect('/:language/:typeslug',
    array('controller' => 'nodetypes', 'action' => 'view'),
    array(
        'language'=>'[a-z]{3}',
        'typeslug' => '(?!('.$exceptions.')((\W+)|$))[a-zA-Z\-_]+/?$',
        'pass'=>array('typeslug')
        )
    );

Router::connect('/:language/:typeslug/:nodeslug',
    array('controller' => 'nodes', 'action' => 'view'),
    array(
        'language'=>'[a-z]{3}',
        'typeslug' => '(?!('.$exceptions.')((\W+)|$))[a-zA-Z\-_]+/?$',
        'pass'=>array('typeslug','nodeslug')
        )
    );

第一条路线效果很好,但第二条路线不是蛋糕会搜索与语言前缀相同的控制器名称!

【问题讨论】:

    标签: regex cakephp url-routing slug


    【解决方案1】:

    在第二条路线中删除 TypeSlug 正则表达式是解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-15
      • 1970-01-01
      • 1970-01-01
      • 2021-05-05
      相关资源
      最近更新 更多