zend - 从路由URL创建变量全局变量

时间:2011-04-15 05:03:02

标签: zend-framework routes global-variables

我还在尝试使用网址路由,并设法让它发挥作用。

我的routes.ini有这个:

  

[制作]
  routes.register.route =:lang / register
  routes.register.defaults.controller = register
  routes.register.defaults.action = index
  routes.register.defaults.lang = en
  routes.register.reqs.lang =“[a-z] {2}”

我的网址如下所示: http://www.mysite.com/en/register 所以现在,在我的控制器中,我可以这样做:

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

我的问题是:我正在尝试获取select元素中的国家/地区列表,这取决于lang元素是英语还是法语,将返回所述语言的国家/地区。

为此,我需要将“lang”传递给表单。 然后在表单中,将其传递给查询那里国家的模型。 如果有变化,那么很多地方也会发生变化。

回到这个问题:

我可以将此变量设置为全局吗?

2 个答案:

答案 0 :(得分: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;
    }
}

答案 1 :(得分:0)

通过表单设置器注入(由ArneRie建议)是更好的解决方案。但是如果您没有离散表单类,或者从ini文件生成表单,则可以在引导程序中$front->dispatch()之后的任何地方访问这样的参数

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