2013-04-21 73 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控制器插件,這是不同的東西。