带有slug和语言的CakePHP路由器

时间:2012-01-30 15:49:28

标签: php cakephp localization url-routing

我有点陷入死胡同试图在CakePHP中使用我的路线。我几乎阅读了www中的每篇文章,其中一些文章接近我需要的内容,但与其他文章结合起来并没有按预期工作。还尝试了一些路由器lib-s,但是相同的

这就是我需要的:

url中的语言参数和页面的slug。所以:

  前端的

     

目录'/'应该是默认语言,controller => pagesslug => home

     

/:lang - 与上述相同,但选择语言

     

/:slug - controller => pagesaction => index并使用默认语言

传递:slug参数      

/:lang /:slug - 与上面的set lang参数

相同      

/:controller /:slug -

     

/:lang /:controller /:slug - 与上面的set lang参数

相同      
      
  • 我在这些链接中不需要任何action -
  •   
     管理面板的

     

/ admin - 'controller'=> 'settings','action'=> '索引'

     

/ admin /:controller /:action / ....这一个是默认的

     
      
  • 管理网址中不需要语言参数,但操作存在,除了索引操作
  •   

另外我应该如何在视图中创建链接,以便路由器能够正常工作?

1 个答案:

答案 0 :(得分:1)

    Router::connect("/admin", array('action' => 'index', 'controller' => 'settings', 'prefix' => 'admin', 'admin' => true));
    Router::connect("/admin/:controller", array('action' => 'index', 'prefix' => 'admin', 'admin' => true));
    Router::connect("/admin/:controller/:action/*", array('prefix' => 'admin', 'admin' => true));

    Router::connect("/:language/*", array('action' => 'home', 'controller' => 'pages'));
    Router::connect("/:language/:controller", array('action' => 'index'));
    Router::connect("/:language/:controller/*");

你可以复制第二组路线,但是改变:语言到slug,你应该把它放在if中并验证给定的语言,如果它没有验证然后加载slug路线。