【问题标题】:CakePHP Router with slug and language带有 slug 和语言的 CakePHP 路由器
【发布时间】:2012-02-22 09:46:42
【问题描述】:

我试图在 CakePHP 中管理我的路线有点走投无路。我几乎阅读了 www 中的所有文章,其中一些接近我需要的内容,但与其他不按预期结合使用。也尝试了一些路由器lib-s,但是一样

这是我需要的:

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

前端

目录'/'应该指向默认语言,controller => pages, slug => home

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

/:slug - controller => pages , action => index 并传递 :slug 参数,使用默认语言

/:lang/:slug - 与上面设置 lang 参数相同

/:controller/:slug -

/:lang/:controller/:slug - 与上面设置 lang 参数相同

  • 我在这些链接中不需要任何action-s

用于管理面板

/admin - 'controller' => 'settings', 'action' => 'index'

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

  • admin url 中不需要语言参数,但存在动作,索引动作除外

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

【问题讨论】:

    标签: php cakephp localization url-routing


    【解决方案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/*");
    

    您可以复制第二组路由,但是将 :language 更改为 slug,您应该将其放入 if 并验证给定的语言,如果它不验证则加载 slug 路由。

    【讨论】:

    • 谢谢,稍加编辑就完美了。但是如何创建更改语言链接这不起作用:$this->Html->link(__('Lala', true), array_merge($this->passedArgs, array('language' => 'eng')));
    • 它输出什么?它应该工作。我不确定 $this->passedArgs 是否为您提供所需的数据,打印出该数组并查看您是否正在传递控制器和操作。
    • $this->passedArgs 只通过 slug,我还能用什么?
    • 控制器和动作,查看文档了解信息。
    猜你喜欢
    • 2013-02-15
    • 2016-05-11
    • 2015-09-30
    • 1970-01-01
    • 2012-02-09
    • 2013-12-19
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多