我正在开发我的CakePHP 2.0,并希望制作语言助手,所以我不必在视图中传递一些基于语言的东西。为此,我创建了一个LanguageHelper。
我的第一个任务是在所有链接中包含该语言。
<?php
class LanguageHelper extends AppHelper{
public $helpers = array(
'Html'
);
public function link($title, $url = null, $options = array(), $confirmMessage = false){
if(!isset($options['lang']) || !$options['lang']){
$options['lang'] = Configure::read('Language.default');
}
return $this->Html->link($title, $url, $options, $confirmMessage);
}
}
?>
现在我认为我使用以下内容:
<?php echo $this->Language->link('Link', array('controller' => 'pages', 'action' => 'home')); ?>
预期结果:
<a href="/nl-be/admin/pages/home">Link</a>
实际结果:
<a lang="nl-be" href="/admin/pages/home">Link</a>
即使使用以下内容:
<?php echo $this->Language->link('Link', array('controller' => 'pages', 'action' => 'home', 'lang' => Configure::read('Language.default'))); ?>
给我一个错误的结果:
<a lang="nl-be" href="/nl-be/admin/pages/home">Link</a>
以下是我的路线:
Router::connect('/', array('controller' => 'app', 'action' => 'defineLanguage'), array('lang' => '[a-zA-Z]{2}[-]{1}[a-zA-Z]{2}'));
Router::connect('/:lang', array('controller' => 'pages', 'action' => 'home'), array('lang' => '[a-zA-Z]{2}[-]{1}[a-zA-Z]{2}'));
$prefixes = Configure::read('Routing.prefixes');
foreach($prefixes as $prefix){
Router::connect('/:lang/' . $prefix, array('prefix' => $prefix, $prefix => true, 'controller' => 'pages', 'action' => 'index'), array('lang' => '[a-zA-Z]{2}[-]{1}[a-zA-Z]{2}'));
Router::connect('/:lang/' . $prefix . '/:controller', array('prefix' => $prefix, $prefix => true), array('lang' => '[a-zA-Z]{2}[-]{1}[a-zA-Z]{2}'));
Router::connect('/:lang/' . $prefix . '/:controller/:action', array('prefix' => $prefix, $prefix => true), array('lang' => '[a-zA-Z]{2}[-]{1}[a-zA-Z]{2}'));
}
任何人都知道获得预期结果的方法吗?
编辑:
我还应该提到以下内容确实给了我预期的结果:
<?php echo $this->Html->link('Link', array('controller' => 'pages', 'action' => 'home', 'lang' => Configure::read('Language.default'))); ?>
解决方案:
class LanguageHelper extends AppHelper{
public $helpers = array(
'Html'
);
public function link($title, $url = null, $options = array(), $confirmMessage = false){
if(!isset($url['lang']) || !$url['lang']){
$url['lang'] = Configure::read('Language.default');
}
return $this->Html->link($title, $url, $options, $confirmMessage);
}
}
答案 0 :(得分:0)
我仍在使用1.3,但我认为没有改变:你必须将'lang'参数放入助手中的$ url数组,而不是$ options数组。
你的助手的最后一行应该是:
$this->Html->link($title, array_merge($url, array('lang' => $options['lang']), $options, $confirmMessage);
此外,您应该使用其他变量来避免链接中不必要的属性。