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($ items)などの他のビューヘルパーは正しく機能します

4

1 に答える 1

1

フォームビューヘルパーはすべてZend\Form\View\Helper名前空間にあります。すべてのフォームビューヘルパーがビューヘルパープラグインマネージャーに挿入される個別の構成があります。

通常、これは自動的に行われます。"zendframework/zendframework"少なくとも、すべての個々のコンポーネントが必要であるとは限らない場合、これはそのままで機能します。Zend\Mvc名前空間には、ビューヘルパーのプラグインマネージャーをインスタンス化するのに役立つ特別なファクトリがあります。また、他のコンポーネント(、、およびビューヘルパー)からビューヘルパーを挿入しようとnavigationi18nますform

そうは言っても、これがうまくいかなかった2つのオプションがあります。

  1. ファクトリは、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);
于 2012-12-22T16:49:11.387 に答える