2011-11-12 18 views
0

私はCakePHP 2.0で作業していたので、言語ヘルパーを作って、私の意見にいくつかの言語ベースのものを渡す必要はありませんでした。このために、私はLanguageHelperを作成しました。CakePHP 2.0:予期せぬヘルパーの振る舞い(HtmlHelper :: link)

私の最初の仕事はすべてのリンクに言語を含めることでした。

<?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}')); 
} 

誰もが期待される結果を取得する方法を知っていますか?

EDIT:

私は次は私に期待された結果得られないことも言及する必要があります:私はまだ1.3に取り組んでいるが、私は仮定

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

<?php echo $this->Html->link('Link', array('controller' => 'pages', 'action' => 'home', 'lang' => Configure::read('Language.default'))); ?> 

ソリューションをそれは変更されませんでした:あなたは、$オプションの配列ではなく、あなたのヘルパーの$ url配列に 'lang'パラメータを入れなければなりません。あなたのヘルパーの

最後の行は次のようになります。

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

また、あなたがあなたのリンクで不要な属性を避けるために、他の変数を使用する必要があります。

+0

それはそうでした、私は今これらの2つを混合するために本当に馬鹿だと感じます。私は、HTMLヘルパーを使用するときには、ビューで正しくやっていました。なぜ、後でオプションに入れるのかわかりません。どうもありがとう! –

関連する問題