首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在我的项目中使用$this->form()->***()帮助器

无法在我的项目中使用$this->form()->***()帮助器
EN

Stack Overflow用户
提问于 2012-12-22 16:21:15
回答 1查看 1.1K关注 0票数 1

我在composer.json中指定了zend组件的列表

代码语言:javascript
复制
"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.*"

但是当我尝试在视图脚本中输出表单时:

代码语言:javascript
复制
<?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();
   ?>

我得到了异常:

代码语言:javascript
复制
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($items)可以正常工作

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-23 00:49:11

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

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

也就是说,有两个选项会让你出错:

  1. 工厂在这些额外的视图帮助器配置上执行class_exists()调用。如果由于自动加载问题而找不到Zend\Form\View\HelperConfig类,则表单视图帮助器不是initialized.
  2. The Zend\Form\View\HelperConfig,甚至不会调用它。如果您使用Zend\Mvc\Application,这可能是一个错误,请提供有关您的案例的更多信息,以便其他人可以复制它。如果您不使用该应用程序,则必须手动连接这些内容。

在后一种情况下,您希望自己连接这些东西,实例化helper配置,获取视图helper管理器并注入它:

代码语言:javascript
复制
// $renderer is the Zend\View\Renderer\PhpRenderer

$plugins = $renderer->getHelperPluginManager();
$config  = new Zend\Form\View\HelperConfig;
$config->configureServiceManager($plugins);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14001225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档