2012-12-22 26 views
1

我指定我composer.json的Zend組件列表

"zendframework/zend-xmlrpc": "2.0.*", 
"zendframework/zend-config": "2.0.*", 
"zendframework/zend-log": "2.0.*", 
"zendframework/zend-db": "2.0.*", 
"zendframework/zend-inputfilter": "2.0.*", 
"zendframework/zend-json": "2.0.*", 
"zendframework/zend-form": "2.0.*", 
"zendframework/zend-mvc" : "2.0.*", 
"zendframework/zend-session" : "2.0.*", 
"zendframework/zend-view" : "2.0.*" 

但是,當我嘗試輸出形式視圖腳本:

<?php 

    use Zend\Form\Form; 
    use Zend\Form\Element; 

    $form = new Form(); 

    $form->setAttribute('action', '/contact/process'); 
    $form->setAttribute('method', 'post'); 

    $form->prepare(); 
    echo $this->form()->openTag($form); 

    echo $this->form()->closeTag(); 
    ?> 

我得到異常:

ServiceNotFoundException: Zend\ServiceManager\ServiceManager::get was unable to fetch or create an instance for form 

#in /var/www/projectdir/vendor/zendframework/zend-servicemanager/Zend/ServiceManager/ServiceManager.php line 452 
#at ServiceManager->get('form', true) in /var/www/projectdir/vendor/zendframework/zend-servicemanager/Zend/ServiceManager/AbstractPluginManager.php line 110 
#at AbstractPluginManager->get('form', null) in /var/www/projectdir/vendor/zendframework/zend-view/Zend/View/Renderer/PhpRenderer.php line 340 
#at PhpRenderer->plugin('form') in /var/www/projectdir/vendor/zendframework/zend-view/Zend/View/Renderer/PhpRenderer.php line 359 
#at PhpRenderer->__call('form', array()) in /var/www/projectdir/views/editWorker.phtml line 19 
#at PhpRenderer->form() in /var/www/projectdir/views/editWorker.phtml line 19 
..... 

但是其他視圖助手,例如通過$ this-> htmlList($項目)正常工作

回答

1

表單視圖助手都設在Zend\Form\View\Helper命名空間。有一個單獨的config,其中所有表單視圖幫助器都被注入到視圖幫助器插件管理器中。

通常這會自動發生。至少,當你需要"zendframework/zendframework"而不是所有單獨的組件都可以直接使用。在Zend\Mvc命名空間中有一個special factory,它有助於實例化視圖幫助器的插件管理器。它還嘗試從其他組件注入視圖助手:navigationi18nform視圖助手。

話雖這麼說,有以下兩種選擇這個地方出了問題你:

  1. 工廠做這些額外的視圖助手CONFIGS一個class_exists()電話。如果由於自動加載問題導致無法找到類Zend\Form\View\HelperConfig,則表單視圖幫助程序不會被初始化。

  2. 工廠甚至沒有叫。如果您使用Zend\Mvc\Application,這可能是一個錯誤,請提供一些關於您的案例的更多信息,以便其他人可以重現它。如果您不使用應用程序,則必須手動連接這些類型的東西。

在後一種情況下,你想連線自己的東西,初始化助手配置,搶視圖助手經理和它注入:

// $renderer is the Zend\View\Renderer\PhpRenderer 

$plugins = $renderer->getHelperPluginManager(); 
$config = new Zend\Form\View\HelperConfig; 
$config->configureServiceManager($plugins); 
+1

我參加昨天downvoted這個答案。既然你看不到是誰做的,請留下評論。如果在這個答案中有任何錯誤,請這麼說。匿名downvote不會幫助任何人在這裏。 –

+0

你是我今天的英雄,非常感謝。 – P0rnflake

相關問題