cakehp-don';t在url中显示索引操作


cakephp don't display index action in url

我在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'))';

我在没有动作参数的情况下尝试过

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

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

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

路由按照您设置它们的顺序进行匹配。颠倒Router::connect()语句的顺序,就完成了。ie.首先为/:language设置路由,然后为/:语言/:控制器设置路由,再为/:语文/:控制器/:动作设置路由:'

此外,不需要重写AppHelper::url()以在生成url中包含该语言。在Router::connect()语句中使用"persistent"键,它将为您完成任务。