不能在我的项目中使用$ this-> form() - > ***()帮助器

时间:2012-12-22 08:21:15

标签: zend-form zend-framework2 zend-view

我在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-&gt; htmlList($ items)正常工作

1 个答案:

答案 0 :(得分:1)

表单视图助手都位于Zend\Form\View\Helper命名空间中。有一个单独的config,其中所有表单视图助手都注入到视图助手插件管理器中。

通常这会自动发生。至少,当您需要"zendframework/zendframework"而不是所有单独的组件时,这是开箱即用的。在Zend\Mvc命名空间中有一个special factory,它有助于实例化视图帮助程序的插件管理器。它还尝试从其他组件注入视图助手:navigationi18nform视图助手。

话虽如此,有两种选择可能会对你造成错误:

  1. 工厂对这些额外的视图助手配置进行class_exists()调用。如果由于自动加载问题而无法找到类Zend\Form\View\HelperConfig,则不会初始化表单视图助手。

  2. 甚至没有打电话给工厂。如果您使用Zend\Mvc\Application这可能是一个错误,请提供有关您的案例的更多信息,以便其他人可以重现它。如果您不使用该应用程序,则必须手动连接这些内容。

  3. 在后者的情况下,你想自己连接东西,实例化帮助器配置,抓住视图助手管理器并注入它:

    // $renderer is the Zend\View\Renderer\PhpRenderer
    
    $plugins = $renderer->getHelperPluginManager();
    $config  = new Zend\Form\View\HelperConfig;
    $config->configureServiceManager($plugins);