【问题标题】:CakePHP 2.0: Unexpected Helper Behavior (HtmlHelper::link)CakePHP 2.0:意外的帮助程序行为 (HtmlHelper::link)
【发布时间】:2011-11-12 14:41:11
【问题描述】:

我正在开发我的 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);
}
}

【问题讨论】:

    标签: cakephp html-helper cakephp-2.0


    【解决方案1】:

    我仍在开发 1.3,但我认为这没有改变:您必须将 'lang' 参数放入帮助程序中的 $url 数组中,而不是放入 $options 数组中。

    你的助手的最后一行应该是:

    $this->Html->link($title, array_merge($url, array('lang' => $options['lang']), $options, $confirmMessage);
    

    此外,您应该使用其他变量来避免链接中不必要的属性。

    【讨论】:

    • 做到了,我现在觉得把这两者混为一谈真的很愚蠢。在使用 Html 帮助程序时,我的做法是正确的,不知道为什么后来我把它放在选项中。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    • 2012-06-08
    • 2012-05-12
    • 1970-01-01
    相关资源
    最近更新 更多