ZF2 - 将变量传递给zend内置帮助器

时间:2014-07-19 11:43:44

标签: php zend-framework2

我想将变量(可能是服务人员)传递给zend的内置帮助器。可能吗?为了更清楚:

  1. 有一个叫做Url的zend帮助器,它构造了url'
  2. 在这个帮助器中我想从数据库中获取一些数据,所以我需要传递连接或模型(并不重要)
  3. 取决于数据到达第2点。我想构建我的自定义链接
  4. 嗯,事情看起来像这样:我试图制作自己的自定义路由。所以在数据库中我有控制器,动作和它的别名。例如:

     Home\Controller\Home | index | myalias
    

    路由工作正常,这意味着如果我输入url:

     example.com/myalias
    

    然后Zend将打开Home控制器和索引操作。但在整个页面上,我有由Zend内置Url助手制作的URL,如下所示:

    $this->url('home', array('action' => 'index'));
    

    所以链接看起来:

    example.com/home/index
    

    我想将链接更改为

    example.com/myalias
    

    不更改整页上Url助手生成的链接。所以在帮助者返回url之前,应检查该url是否有别名,如果是,那么应该返回该别名exept regular url。

1 个答案:

答案 0 :(得分:0)

在你有helper类文件的模块的Module.php中,写下以下内容 -

//use statements

class Module {
    //public function getAutoloaderConfig() { [...] }

    //public function getConfig() { [...] }

    public function getViewHelperConfig() {
        return array(
            'factories' => array(
                'Url' => function ($sm) {
                    $locator = $sm->getServiceLocator();
                    $viewHelper = new View\Helper\Url;

                    //passing ServiceLocator to Url.php
                    $viewHelper->setServiceLocator($locator);  //service locator is passed.

                    return $viewHelper;
                },
            ),
        );
    }
}

现在在Url.php中,我们需要一个函数setServiceLocator()getServiceLocator()

//use statements

class Url {

    public $serviceLocator;

    public function getServiceLocator() {
        return $this->serviceLocator;
    }

    public function setServiceLocator($serviceLocator) {
        if($this->serviceLocator == null)
            $this->serviceLocator = $serviceLocator;

        return;
    }

}

我希望它有所帮助。