Zend 2 - 每页都有表格

时间:2014-07-03 16:12:47

标签: forms zend-framework2

我是Zend Framework 2的新手

我想在每个页面(例如一个登录框)中添加一个表单,其功能与在其自己的模块中一样。所以它验证并且在动作之后不需要从模块重定向。

我已经查看了各种各样的事情,例如视图助手和动作助手,我没有发布任何代码,因为它可能只会增加混乱

我正在寻找如何实现这一目标的指南,因为我目前对如何最好地实现这一点感到困惑

1 个答案:

答案 0 :(得分:1)

这肯定是视图助手的用例。这为不同模块的多个视图提供了一个可重用的逻辑。

以登录表格为例。您可能希望在调用帮助程序时返回Zend\Form\Form实例。首先,创建帮助器:

namespace MyLogin\View\Helper;

use Zend\View\Helper\AbstractHelper;
use Zend\Form\Form;

class LoginForm extends AbstractHelper
{
    public function __invoke()
    {
        $form = new Form;
        $url  = $this->getView()->url('user/login');
        $form->setAttribute('action', $url);

        $form->add([
            'name' => 'username',
        ]);
        $form->add([
            'type' => 'password',
            'name' => 'password',
        ]);

        return $form;
    }
}

然后在配置中以“loginForm”名称注册此视图助手:

'view_helpers' => [
    'invokables' => [
        'loginForm' => 'MyLogin\View\Helper\LoginForm',
    ],
],

现在您可以在视图中使用帮助程序:

<?php $form = $this->loginForm() ?>
<?= $this->form()->openTag($form)?>
    <?= $this->formRow($form->get('username'))?>
    <?= $this->formRow($form->get('password'))?>
    <button type="submit" value="Login">
<?= $this->form()->closeTag()?>

当然,您可以在表单中应用任何登录信息,无论您需要重复使用的是什么:

  1. 返回一个表单实例,以便您的视图可以呈现表单
  2. 返回已在帮助器中的渲染视图,以便您的视图无需渲染
  3. 将所有选项设置为表单