zenify / modular-form-renderer
此包已被 废弃 并不再维护。没有建议的替代包。
关于此包最新版本(v0.0.2)的许可证信息不可用。
v0.0.2
2015-10-16 13:21 UTC
Requires
- nette/forms: ^2.3
- nextras/forms: ^1.6
This package is not auto-updated.
Last update: 2015-12-31 22:29:09 UTC
README
当你需要 多个表单渲染器 而不想将它们变成意大利面时。
安装
通过 Composer
$ composer require zenify/modular-form-renderer
使用
简单创建自己的类,该类将实现 Zenify\ModularFormRenderer\Contract\Forms\Decorator\FormDecoratorInterface
。
此 CrazySelectJqueryFormDecorator
将向表单中的每个选择框添加 crazy-select
类。这可能很有用,因为支持一些将选择框转换为丰富选择工具的 JavaScript 扩展。
use Nette\Forms\Controls\SelectBox; use Nette\Forms\Form; use Zenify\ModularFormRenderer\Contract\Forms\Decorator\FormDecoratorInterface; final class CrazySelectJqueryFormDecorator implements FormDecoratorInterface { /** * {@inheritdoc} */ public function decorate(Form $form) { foreach ($form->getControls() as $baseControl) { if ($baseControl instanceof SelectBox) { $baseControl->setAttribute('class', 'crazy-select'); } } } /** * {@inheritdoc} */ public function getWrappers() { // we need no custom wrappers return []; } }
然后我们需要将此装饰器添加到渲染器中。这样,我们可以添加多个分隔的装饰器,每个装饰器都将被应用。
use Nette\Application\UI\Form; use Zenify\ModularFormRenderer\Forms\Rendering\FormDecoratorRenderer; class MyPresenter ... { /** * @return Form */ protected function createComponentSelectForm() { $formDecoratorRenderer = new FormDecoratorRenderer; $formDecoratorRenderer->addFormDecorator(new MyOwnFormDecorator); $form = new Form; $form->addSelect('category', 'Category'); $form->setRenderer($formDecoratorRenderer); return $form; } }
现在所有选择框都将具有我们的类 crazy-select
!
具有相同设置的多个表单
如果你有很多表单,你将不得不将此渲染器添加到每个表单中。这不是很多工作,对吧?
Simple FormFactory 会帮我们。
use Nette\Forms\Form; use Nette\Forms\IFormRenderer; use Zenify\ModularFormRenderer\Forms\Rendering\FormDecoratorRenderer; final class FormFactory { /** * @returns Form */ public function create() { $form = new Form; $form->setRenderer($this->createFormRenderer()); return $form; } /** * @return IFormRenderer */ private function createFormRenderer() { $formDecoratorRenderer = new FormDecoratorRenderer; $formDecoratorRenderer->addFormDecorator(new MyOwnFormDecorator); // here you can add some other decorators, or use conditions // e.g. add Bootstrap3FormDecorator only for admin forms return $formDecoratorRenderer; } }
然后在 config.neon
中注册为服务
services: - FormFactory
并在演示者中使用
use FormFactory; use Nette\Application\UI\Form; use Zenify\ModularFormRenderer\Forms\Rendering\FormDecoratorRenderer; class MyPresenter ... { /** * @var FormFactory */ private $formFactory; public function __construct(FormFactory $formFactory) { $this->formFactory = $formFactory; } /** * @return Form */ protected function createComponentSelectForm() { $form = $this->formFactory->create(); // here we can omit all "setup" code $form->addSelect('category', 'Category'); return $form; } }
测试
$ phpunit
贡献
有关详细信息,请参阅 CONTRIBUTING。