-1

我正在将 ZF1 应用程序迁移到 ZF2,这是控制器中使用操作帮助程序类 UserBuilder 的代码:

$userBuilder = $this->userBuilder;

目前该页面抱怨:

Notice: Undefined property: Stock\Controller\ScreenerController::$userBuilder

从<推荐的项目目录结构>可以看到目录application/controllers/helpers依然存在。

我在 Zend Framework 1 中有很多控制器动作助手。我很好奇 Zend Framework 2 中是否有一些概念?以及如何迁移它们?

4

2 回答 2

1

很久以前,我在莫斯科的 ZFCon 2012 上看过Enrico Zimuel的演讲,在你的管子里,我找不到那个链接,

但我可以在幻灯片共享中找到他的演示文稿,下面是链接

ZF2 快速启动

在演示文稿中,Enrico Zimuel建议使用一个 git 存储库,该存储库托管一个用作模拟器的示例应用程序。

下面是该 git 存储库的链接,该存储库实际上是一个示例 ZF1 应用程序,已迁移以与 ZF2 一起使用。它就像一个模拟器,用 ZF1 代码测试 ZF2。

ZF2迁移原型

这是一个ZF1迁移原型

它实际上

  1. 创建 ZF1 调度程序的“Zf1Compat”版本作为事件侦听器。
  2. 引导程序很大程度上模仿了 ZF1 的 Zend_Application 引导程序的工作方式。
  3. 默认路由使用新的 ZF2 MVC 路由,但模仿了 ZF1 提供的路由。

我发布这个只是为了提到有一个解决迁移问题的解决方案非常好。

这也可能对需要迁移的其他人有所帮助,因为没有人知道有一个具有此原型的 git 存储库,而且我还没有看到任何博客帖子或在任何地方指定此存储库链接的帖子(我真的不知道为什么?)。

笔记 : -

这只会减少您的迁移工作,您将失去 ZF2 的许多优势,并且您无法真正利用框架的功能。

于 2013-04-21T23:16:20.630 回答
0

Zend 1 动作助手对应于Zend 2 控制器插件

您只需进行一些更改即可完成这项工作。

在 Zend 2 中创建控制器插件的一种方法是:

  • 在控制器下创建一个文件夹,例如。“模块/应用程序/src/控制器/插件”

  • 在使用您的插件名称创建的文件夹下创建一个 php 文件,例如。MyPlugin.php 并添加以下内容:

namespace Application\Controller\Plugin;

use Zend\Mvc\Controller\Plugin\AbstractPlugin;

class MyPlugin extends AbstractPlugin {

    public function doSomething()
    {
        // put your code here
        return '1';
    }

}
  • 将控制器插件添加到您的 module.config.php(例如 module/Application/config/module.config.php)中:
    'controller_plugins' => array(
        'invokables' => array(
            'Plugin1' => 'Application\Controller\Plugin\MyPlugin',
        )
    ),
  • 在您的控制器中使用它,例如。
    class IndexController extends AbstractActionController
    {
        public function indexAction()
        {
            $plugin = $this->Plugin1(); // or $this->plugin('Plugin1');
            echo $plugin->doSomething();
            return new ViewModel();
        }
    }

不要混淆 Zend 1 插件和 Zend 2 控制器插件,它们是不同的东西。

于 2017-02-03T09:22:03.900 回答