2013-08-15 1 views
0

Я ищу способ избежать помех между слизнями и контроллером/плагином в URL-адресе cakephp автоматически. с в соответствии с этой статьей (http://lecterror.com/articles/view/advanced-routing-with-cakephp-one-example) мой файл route.php любит это:, избегая помех между слизнями и именами контроллеров или плагинов в cakephp 2.x router

$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') 
     ) 
    ); 

первый маршрут отлично работает, но второй маршрут не торт будет искать имя контроллера же префиксом языка!

ответ

1

удаление регулярного выражения TypeSlug во втором маршруте - это решение.