0

在我的默认布局中,我想显示指向当前页面但前缀不同的链接。我使用前缀“语言”来使用像 www.site.com/eng/controller/action/param 这样的地址。

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

但这会在eng/controller/action没有传递参数、没有命名参数和没有 url 参数的情况下创建与 url 的链接。

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

4

4 回答 4

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
于 2012-05-28T17:42:48.660 回答
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')
    ...
);
于 2014-06-30T10:19:11.330 回答
0

$this->Html->link('eng', array('language' => 'eng', 'pass') );

于 2012-05-28T12:02:37.543 回答
0

像这样的东西应该工作:

$url = Router::parse($this->here);
$url['language'='end';
$this->Html->link('eng', $url);

它不是一行,但你可以将它压缩成一行,但它会很不可读。

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

于 2012-05-28T15:00:48.293 回答