2013-04-21 143 views
-1

我迁移ZF1应用ZF2,这里是在控制器中的代码使用动作助手类UserBuilder:Zend框架2动作助手?

$userBuilder = $this->userBuilder; 

目前的页面抱怨:

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

从< Recommended Project Directory Structure> ,我们可以看到目录application/controllers/helpers仍然存在。

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

+1

也许试着解释你实际上想要做什么,我们可以帮助你。你在谈论ControllerPlugins吗?如果你实际上正在谈论ZF1中的动作助手,以获得小部件化内容,那么这个博客可能会让你感兴趣:[如何替换ZF2中的“动作助手”(并制作出精美的widgetized内容)](http://www.michaelgallego .fr/blog/2012/10/06/how-to-replace-the-action-helper-in-zf-2-and-make-great-widgetized-content /) – Sam 2013-04-21 16:36:36

+0

我想你必须声明变量: ** protected $ userBuilder; ** – 2013-04-21 18:35:42

+0

实际上,UserBuilder是我在ZF1中编写的动作助手类。 – user1633272 2013-04-22 03:50:21

回答

1

龙回来了,我已经看的Enrico Zimuel的演讲在莫斯科的2012 ZFCon,在你管,我无法找到链接进行,

但我可以在幻灯片分享发现他的介绍,下面是链接

ZF2 quick start

随着演示,Enrico Zimuel建议承载一个示例应用程序,它可以作为一个模拟器一个Git仓库。

下面是该git存储库的链接,它实际上是迁移到ZF2的示例ZF1应用程序。它的工作原理类似于使用ZF1代码测试ZF2的仿真器。

ZF2 migration prototype

这是一个ZF1迁移原型

它实际上

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

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

这也可以帮助其他人需要迁移,因为没有人知道有一个git存储库有这个原型,我没有看到任何博客发布或SO发布指定此存储库链接任何地方(我真的不知道不知道为什么?)。

注: -

这不仅降低了迁移的工作,你会失去大量的ZF2的 优点,你也不能真正利用一个 框架的特性。

0

我已经为一个项目做了这个。 Zend 1动作助手对应于Zend 2控制器插件。

您只需进行一些更改即可完成此项工作。在Zend中1创建一个控制器插件

的一种方式是:

  • 控制器例如下创建文件夹。 “模块/应用程序/ 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.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控制器插件,这是不同的东西。