如何在ZF1项目中呈现ZF2表单

时间:2014-02-17 07:45:43

标签: php forms zend-framework zend-framework2

我正在尝试在ZF1项目中使用ZF2类。我一直关注此链接:Use ZF2 in a ZF1 project。我可以通过继承AbstractTableGateway来使用ZF2类来创建模型,表模型。

我在控制器上获取对象。但是,当我尝试在视图(phtml)上渲染这些表单对象时。抛出错误,就像这样:

Fatal error: Call to undefined method Zend\Form\Form::openTag() in /var/www/myproject/application/modules/tools/views/scripts/tablesample/add.phtml on line 14

以下是视图文件:

<?php
use Zend\Form\Form as Form;
$baseUrl = $this->baseUrl();
$formObject = new Form();
// this is demo  print block of form element
$form = $this->form;
$form->setAttribute('action', $baseUrl.'tools/tablesample/add');
$form->prepare();

echo $formObject->openTag($form);
echo $this->formRow($form->get('name'));
echo $this->formRow($form->get('gender'));
echo $this->formRow($form->get('hobby'));
echo $this->formRow($form->get('email'));
echo $this->formRow($form->get('birth'));
echo $this->formRow($form->get('address'));
echo $this->formRow($form->get('direction'));
echo $this->form()->closeTag();

?>

我认为ZF1没有检测到ZF2的表单助手,或者在ZF1项目中可能有任何其他方式使用ZF2表单助手。

如何在ZF1应用程序中正确呈现我的ZF2表单?

我正在按照本教程创建表单:Zend Framework 2 : Extending Zend\Form to add Select, Multicheckbox, Email,Date, Textarea, and Radio element

我只需要确认是否可以在ZF1项目中使用ZF2表单。 如果可以使用,请向我展示本教程的视图文件。

1 个答案:

答案 0 :(得分:0)

虽然我个人无法提供任何建议将ZF2整合到ZF1中;从ZF2方面来看,您收到的错误是由于这一行:

$formObject->openTag($form);

您正在尝试使用表单对象Zend\Form\Form来呈现表单的开放标记。相反,您需要使用表单 view helper Zend\Form\View\Helper\Form),然后将表单($form)作为参数传递。

例如

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

您实际上正在为表单结束标记(不需要任何参数)执行此操作:

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

另外,我不确定你对$formObject = new Form()的目的;您发布的代码中不需要新的表单实例(并且您不应该在视图中创建新的实例,无论如何)。

$this->form()将被渲染器的魔法__call()捕获;然后将检查是否有一个使用服务名称form注册的视图助手(在找到时返回它)。

所有视图助手都在这个庄园里工作。它们是对提供给它们的参数进行内省并呈现适当HTML的对象。

例如,$this->form()用于呈现表单打开标记。另一个例子可能是URL助手($this->url('route')),它将从提供的参数生成一个URL。

我建议reading up on the view helper documentation并仔细查看已内置视图助手的源代码,因为这样可以让您了解它们的工作方式。