2011-04-15 26 views
1

我仍在嘗試使用URL路由,並設法使其工作。zend - 從路由的URL創建一個全局變量

我routes.ini具有這樣的:

[製作]
routes.register.route =:朗/註冊
routes.register.defaults.controller =寄存器
routes.register.defaults .action =指數
routes.register.defaults.lang = EN
routes.register.reqs.lang = 「[AZ] {2}」

我的網址應該是這樣的: http://www.mysite.com/en/register 所以現在,在我的控制,我可以做到這一點:

$lang = $request->getParam('lang');

我的問題是:我試圖獲得在選擇元素的國家的名單,這取決於lang元素是英語還是法語,將返回所述語言的國家。

爲此,我需要將「lang」傳遞給表單。 然後在表單中,將它傳遞給查詢那裏的國家的模型。 如果有變化,它也會改變很多地方。

所以回到剛纔的問題:

我可以只設置這個變量作爲全球性的?

回答

2

我會將變量傳遞給控制器​​的窗體。

// Controller action 
public function formAction() 
{ 
    $lang = $this->getParam('lang'); 
    $form = new My_Form_Xyz($lang); 
    $this->view->form = $form; 
} 

// My_Form_Xyz 

protected $lang; 

public function __construct($lang) 
{ 
    $this->lang = $lang; 
    parent::__construct(); 
} 

public function init() 
{ 
    switch ($this->lang) { 
     case 'en': 
      $selectOptions = array(); 
      break; 
     case 'klingon': 
      $selectOptions = array(); 
      break; 
    } 
} 
0

通過表單設置器注入(如ArneRie建議)是更好的解決方案。但是,如果您沒有離散表單類,或者您從ini文件生成表單,則可以在引導程序中的任意位置訪問$front->dispatch()之後的任何參數

Zend_Controller_Front::getInstance()->getRequest()->getParam('lang'); 
Zend_Controller_Front::getInstance()->getRequest()->getParam('lang');