cake php链接到当前页面的不同前缀

时间:2012-05-28 11:29:16

标签: cakephp cakephp-2.0

在我的默认布局中,我想显示指向当前页面但具有不同前缀的链接。我使用前缀'language'来使用www.site.com/eng/controller/action/param等地址。

我尝试了$this->Html->link('eng', array('language' => 'eng') );

但这会创建与url eng/controller/action的链接而不传递参数,没有命名参数且没有url参数。

我怎么能这样做?我更喜欢优雅的解决方案,如1行代码 - 我知道它可以完成,但找不到它:(。

4 个答案:

答案 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);

这不是一行,但你可以将它压缩成一行但是它很难理解。

你可以将它包装在一个帮助器/函数中,但这可以是一行调用; - )