2013-04-04 88 views
0

我實施瞭解決方案at this articleCakePHP向URL添加語言參數

beforeFilter」和「_setLanguage」正常工作。如果URL具有語言參數,我可以成功設置Cookie /會話變量。並在控制器之間使用它。

該解決方案還包括將url()函數添加到AppHelper

class AppHelper extends Helper { 
    function url($url = null, $full = false) { 
     if(!isset($url['language']) && isset($this->params['language'])) { 
      $url['language'] = $this->params['language']; 
     } 
     return parent::url($url, $full); 
    } 
} 

但我有很多網址在我的視圖文件中寫入而不使用HtmlHelper。像這樣:

// myfile.ctp 
<a href="/mypage/">click me plase<a> 

所以看起來好像AppHelper :: url解決方案不能解決我的問題。爲URL添加語言前綴會更好嗎?

我想定義這樣一個全局變量:

// AppController::_beforeFilter() 
if ($this->request->params['language'] != "") 
{ 
    Configure::write('URLprefix', '/'.$this->request->params['language']); 
} else { 
    Configure::write('URLprefix', ''); 
} 

然後改變視圖文件是這樣的:

// myfile.ctp 
<a href="<?php echo URLprefix; ?>/mypage/">click me plase<a> 

但它似乎沒有一個很好的方法。有沒有更好的方式爲網址添加前綴?或者我應該手動添加到所有鏈接?

相關:
Adding a prefix to every URL in CakePHP
CakePHP 2.x i18n route
CakePHP 2.1 URL Language Parameter

回答

1

你應該使用HtmlHelper::link()HtmlHelper::url()

產生時,這將確保你的路由都考慮到生成應用程序中的所有鏈接和URL網址(反向路由

例如,如果你決定定義一個「友好」的URL路徑/logout/users/logout,那麼這樣的:

echo $this->Html->link('Log out', array(
    'controller' => 'users', 
    'action' => 'logout' 
)); 

將創建此鏈接:

<a href='/logout'>Log out</a> 

如果以後決定修改'友好'網址路線(/sign-out)作爲註銷網址,則應用程序中的所有鏈接將自動進行調整。

相同調用的HtmlHelper,現在將輸出:

<a href='/sign-out'>Log out</a> 

瞭解更多關於這個問題在這裏:

Reverse Routing