venne / forms
Venne 表单组件
dev-master / 3.0.x-dev
2015-03-03 07:22 UTC
Requires
- php: >=5.5.0
- nette/di: 2.3@dev
- nette/forms: 2.3@dev
Requires (Dev)
- nette/tester: ~1.3.2
- phing/phing: ~2.10.1
- squizlabs/php_codesniffer: ~1.5.0
Suggests
This package is auto-updated.
Last update: 2024-08-29 03:58:02 UTC
README
将表单作为嵌套工厂创建
+- IFormFactory ---+ +- IFormFactory --+ +- IFormFactory -+
| Base factory | -> | Adds inputs | -> | Adds mapping | -> create() : Form
+------------------+ +-----------------+ +----------------+
优势
- 在一个地方更改整个应用程序的表单配置。
- 每个工厂都可以独立使用。
- 不需要继承表单。
安装
使用 Composer 安装 Venne/Forms 是最佳方式
composer require venne/forms:@dev
使用方法
创建基本工厂
示例
services: basicFormFactory: class: Nette\Application\UI\Form arguments: [NULL, NULL] implement: Venne\Forms\IFormFactory setup: - setRenderer(@system.formRenderer) - setTranslator(@translator.translator) autowired: no
将表单作为工厂创建
实现 Venne\Forms\IFormFactory
class FooFormFactory implements Venne\Forms\IFormFactory { private $formFactory; public function __construct(IFormFactory $formFactory) { $this->formFactory = $formFactory; } public function create() { $form = $this->formFactory->create(); $form->addText('foo', 'Foo'); $form->addSubmit('_submit', 'Save'); return $form; } }
注册表单
在构造函数中定义嵌套表单工厂
services: fooFormFactory: class: FooFormFactory(@basicFormFactory)
在表示器中使用它
class ExamplePresenter extends Nette\Application\UI\Presenter { private $fooFormFactory; public function __construct(FooFormFactory $fooFormFactory) { $this->fooFormFactory = $fooFormFactory; } public function createComponentFooForm() { $form = $this->fooFormFactory->create(); $form->onSuccess[] = $this->fooFormSuccess; return $form; } public function fooFormSuccess($form) { ... } }
通过 kdyby\doctrine-forms
连接表单
use Venne\Bridges\Kdyby\DoctrineForms\FormFactoryFactory; class ExamplePresenter extends Nette\Application\UI\Presenter { private $fooFormFactory; private $formFactoryFactory; public function __construct(FooFormFactory $fooFormFactory, FormFactoryFactory $formFactoryFactory) { $this->fooFormFactory = $fooFormFactory; $this->formFactoryFactory = $formFactoryFactory; } public function createComponentFooForm() { $entity = ....; $form = $this->formFactoryFactory ->create($this->fooFormFactory) ->setEntity($entity) ->create(); $form->onSuccess[] = $this->fooFormSuccess; return $form; } public function fooFormSuccess($form) { ... } }