zored / reverse-form
使用视图脚本渲染ZF3表单。它可以扩展到使用其他框架,如Twitter Bootstrap。
1.0.0
2017-11-24 15:09 UTC
Requires
- php: >=7.1
- zendframework/zendframework: >=3.0
This package is not auto-updated.
Last update: 2024-09-29 04:46:57 UTC
README
这是一个早期alpha版本,一些功能已经实现,但未来的工作方式可能会有所改变。
Uni-Form表单示例在:http://reverseform.modo.si/form/test-uniform
Twitter Bootstrap表单示例在:http://reverseform.modo.si/form/test-bootstrap
介绍
ReverseForm是一个表单渲染模块。它通过视图助手创建渲染对象。它还提供了一个扩展了Zend\Form\Element的对象,即ReverseForm\ExtendedElement,这将有助于更快地创建更复杂的元素。
目标
- 支持其他框架渲染表单,如移动端框架。
- 提供创建新元素的统一方式。它应该处理元素的JS、CSS和配置部分。
- 元素应该支持本地化。
使用Composer安装
- 在您的
composer.json
中添加此项目
"require": { "zored/reverse-form": "0.1", }
- 使用composer获取仓库
$ php composer.phar update
- 在您的
config/application.config.php
文件中启用它
return array( 'modules' => array( // ... 'ReverseForm', ), // ... );
表单渲染器
目前我提供了两种类型的渲染器,但通过扩展ReverseForm\Renderer可以轻松创建其他渲染器。在开始之前,请查看/config/module.config.php
中的所有选项。
- ReverseForm\Renderer\Uniform使用额外的标记来渲染表单,使其与Uni-Form兼容。
- ReverseForm\Renderer\Bootstrap显然渲染Twitter Bootstrap。
Uniform渲染器
$this->form->setAttribute('action', $this->url('album', array('action' => 'test-form'))); $formRenderer = $this->formRenderer($form, 'renderer.uniform', 'vertical'); // vertical or horizontal $formRenderer->prepare(); // this is how you create it in your viewscript
从Uni-Form获取您的CSS。检查module_config.php中加载文件的路径。
Bootstrap渲染器
$this->form->setAttribute('action', $this->url('album', array('action' => 'test-form'))); $formRenderer = $this->formRenderer($form, 'renderer.bootstrap', 'vertical'); // vertical or horizontal $formRenderer->prepare(); // this is how you create it in your viewscript
它不会自动将CSS或JS文件加载到视图中。如果您需要加载额外文件,可以从配置中完成。
使用方法
在您的视图脚本中执行
<h1>Form Testing</h1> <?php $form = $this->form; $form->setAttribute('action', $this->url('album', array('action' => 'test-form'))); $formRenderer = $this->formRenderer($form, 'renderer.uniform', 'horizontal'); $formRenderer->prepare(); echo $formRenderer->openTag(); ?> <div class="well"> <?php print_r($form->getMessages()); ?> </div> <fieldset class="<?= $formRenderer->_formStyle; ?>"> <legend>Some Legend</legend> <?= $formRenderer->formHidden($form->get('security')); ?> <?= $formRenderer->formRow($form->get('status')); ?> <?= $formRenderer->formRow($form->get('status2')); ?> <?= $formRenderer->formRow($form->get('status3')); ?> <?= $formRenderer->formRow($form->get('codemirrortest')); ?> <?= $formRenderer->formRow($form->get('tinymcetest')); ?> <?= $formRenderer->formRow($form->get('datepicker')); ?> <?= $formRenderer->formRow($form->get('datetimepicker')); ?> <?= $formRenderer->formRow($form->get('daterangepicker')); ?> <?= $formRenderer->formCaptcha($form->get('captchaImage')); ?> <?= $formRenderer->formRow($form->get('gmap')); ?> <?= $formRenderer->formRow($form->get('artist')); ?> <?= $formRenderer->formRow($form->get('title')); ?> <?= $formRenderer->formRow($form->get('file')); ?> <?= $formRenderer->formRow($form->get('countrytextarea')); ?> <?= $formRenderer->formAction($form->get('actions')); ?> </fieldset> <?= $formRenderer->closeTag(); ?> <script>$(document).ready(function(){<?= $formRenderer->getElementJsContent(); ?>});</script>
在您的操作中执行
$form = new ReverseForm\Form\TestForm(); if ($this->getRequest()->isPost()) { $form->setInputFilter(new InputFilter); $form->setData($this->getRequest()->getPost()); } return array('form' => $form, 'post' => $this->getRequest()->getPost());
您应该这样做
请随意改进它。将它们合并到项目中,并感谢您。
待办事项
- 许多元素视图脚本看起来很相似,唯一的区别是JS部分。将所有看起来相同的元素重构为一个视图脚本。已完成。
- 编写一些良好的文档。
- 演示模块正在路上。
- 找出字段模板的当前方式太丑了