【问题标题】:ZF2 - pass variables to zend build-in helperZF2 - 将变量传递给 zend 内置助手
【发布时间】:2014-07-19 11:43:44
【问题描述】:

我想将变量(即服务管理器)传递给 zend 的内置助手。是否可以?更清楚地说:

  1. 有一个叫Url的zend helper,它构造了url的
  2. 在这个帮助程序中,我想从数据库中获取一些数据,所以我需要传递连接或模型(其实没关系)
  3. 取决于第 2 点中的数据。我想构建我的自定义链接

嗯,事情看起来像这样:我正在尝试制作自己的自定义路由。所以在数据库中我有控制器、动作和它的别名。例如:

 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 常规 url。

【问题讨论】:

标签: php zend-framework2


【解决方案1】:

在你有他的帮助类文件的模块的 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;
    }

}

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2016-01-07
    • 2018-07-23
    • 2014-09-25
    • 1970-01-01
    • 2017-04-23
    • 2011-08-30
    • 1970-01-01
    • 2015-09-30
    • 2020-02-05
    相关资源
    最近更新 更多