在我的默认布局中,我想显示指向当前页面但具有不同前缀的链接。我使用前缀'language'来使用www.site.com/eng/controller/action/param等地址。
我尝试了$this->Html->link('eng', array('language' => 'eng') );
但这会创建与url eng/controller/action
的链接而不传递参数,没有命名参数且没有url参数。
我怎么能这样做?我更喜欢优雅的解决方案,如1行代码 - 我知道它可以完成,但找不到它:(。
答案 0 :(得分:1)
试试这个:
// helper method, possibly AppHelper, or in AppController and set a view var
function getCurrentParams() {
$route = Router::currentRoute();
$params = $this->request->params;
$pass = $params['pass'];
$named = $params['named'];
unset($params['pass'], $params['named']);
if (!empty($route->options['pass'])) {
$pass = array();
}
return array_merge($params, $named, $pass);
}
$params = $this->SomeHelper->getCurrentParams();
$params['language'] = 'eng';
// use $params for your link now
答案 1 :(得分:1)
就我而言,这个简单的解决方案也有效!
<?php
App::uses('HtmlHelper', 'View/Helper');
class MyHtmlHelper extends HtmlHelper {
public function url($url = null, $full = false) {
if(!isset($url['language']) && isset($this->params['language']) && is_array($url)) {
$url['language']= $this->params['language'];
}
if(count($url) == 1 && isset($url['language'])){
$params = $this->params;
$url = array_merge($params['pass'],$url);
}
return parent::url($url, $full);
}
}
和AppController
public $helpers = array(
...
'Html' => array('className' => 'MyHtml')
...
);
答案 2 :(得分:0)
$this->Html->link('eng', array('language' => 'eng', 'pass') );
答案 3 :(得分:0)
这样的事情应该有效:
$url = Router::parse($this->here);
$url['language'='end';
$this->Html->link('eng', $url);
这不是一行,但你可以将它压缩成一行但是它很难理解。
你可以将它包装在一个帮助器/函数中,但这可以是一行调用; - )