【问题标题】:cakephp don't display index action in urlcakephp 不在 url 中显示索引操作
【发布时间】:2013-08-15 06:25:02
【问题描述】:

我在 AppHelper.php 中使用以下代码将语言参数注入到使用 HtmlHelper 创建的链接中

public function url($url = null, $full = false) {
  if(!isset($url['language']) && isset($this->params['language'])) {
    $url['language'] = $this->params['language'];
  }
  return parent::url($url, $full);
}

它工作正常,但是当我进入索引操作时,url 变为 something.com/some_controller/index

如果我不覆盖 url 方法,那么 url 就是 something.com/some_controller

这些是我的路线

Router::connect('/:language/:controller/:action/*',
                   array(),
                   array('language' => 'eng|fra'));

Router::connect('/:language/:controller',
                   array('action' => 'index'),
                   array('language' => 'eng|fra')); 

Router::connect('/:language',
                   array('controller' => 'pages', 'action' => 'display'),
                   array('language' => 'eng|fra'));

我这样调用链接方法

$this->Html->link(__('Users'), array('controller'=>'users', 'action'=>'index'))';

我在没有action参数的情况下试过了

$this->Html->link(__('Users'), array('controller'=>'users'))';

没有 action 参数,但如果我在同一个控制器管理的页面上,它会添加当前操作

如果是索引操作,我怎样才能使操作的名称不会成为 url 的一部分?

【问题讨论】:

    标签: php cakephp internationalization cakephp-2.3 cakephp-routing


    【解决方案1】:

    路由按照您设置它们的顺序进行匹配。颠倒你的 Router::connect() 语句的顺序,你就完成了。 IE。首先为 /:language' 设置路由,然后为 /:language/:controller' 设置路由,然后为 /:language/:controller/:action:' 设置路由。

    也不需要覆盖 AppHelper::url() 以在生成 url 中包含语言。在您的 Router::connect() 语句中使用 'persist' 键,它会为您完成这项工作。

    【讨论】:

    • 谢谢,这正是我需要的!
    猜你喜欢
    • 1970-01-01
    • 2014-09-01
    • 2014-04-16
    • 1970-01-01
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多