cakephp不会在url中显示索引操作

时间:2013-08-15 06:25:03

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

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

它工作正常,但当我转到索引操作时,网址变为something.com/some_controller/index

如果我不覆盖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'))';

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

如果是动作的名称,如果它是索引动作,我怎么能这样做呢?

1 个答案:

答案 0 :(得分:0)

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

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