Looking at any kind of basic example on ZF2 forms, I have something like this:
In Controller (any basic tutorial example)
$username = new Element\Text('username');
$username->setLabel('Username')->setAttributes(array(
'class' => 'username',
'size' => '30'
));
$form = new Form('my-form');
$form->add($username);
return $this->partial("xxx.phtml", array(
'form' => $form
));
In View
/**
* inside view template
*
* @var \Zend\View\Renderer\PhpRenderer $this
*/
echo $this->form($this->form);
Error I get
PHP Fatal error: Uncaught exception 'Zend\ServiceManager\Exception\ServiceNotFoundException' with message 'Zend\View\HelperPluginManager::get was unable to fetch or create an instance for form' in vendor\zendframework\zend-servicemanager\src\ServiceManager.php:557 Stack trace: #0 vendor\zendframework\zend-servicemanager\src\AbstractPluginManager.php(161): Zend\ServiceManager\ServiceManager->get('form', true) #1 vendor\zendframework\zend-view\src\Renderer\PhpRenderer.php(372): Zend\ServiceManager\AbstractPluginManager->get('form', NULL) #2 vendor\zendframework\zend-view\src\Renderer\PhpRenderer.php(390): Zend\View\Renderer\PhpRenderer->plugin('form') #3 module\XXX\view\xxx\xxx.phtml(8): Zend\View\Renderer in vendor\zendframework\zend-servicemanager\src\ServiceManager.php on line 557
I suspect that some fundamental plugin is not set up. Perhaps even the service that must register the plugin is not set up (ServiceManager)
What can I do to get ZF2 forms working in my otherwisely non-ZF2 app?
My intent is to use ZF2 form component to build forms, and to use them in my php application.
As you are not using the full application, the ViewPluginManager
will not be provided with the names of the form view helpers by default; as they live the Zend\Form\View
namespace.
You can easily register the missing services with a few lines best placed in your 'render factory' if you have one.
$viewPluginManager = $render->getHelperPluginManager();
$formConfig = new \Zend\Form\View\HelperConfig();
$formConfig->configureServiceManager($viewPluginManager);
echo $render->form($this->form);