geniv / nette-general-form
Nette 框架的通用表单类
v1.1.6
2019-02-03 19:04 UTC
Requires
- php: >=7.0
- nette/application: >=2.4
- nette/component-model: >=2.3
- nette/di: >=2.4
- nette/mail: >=2.4
- nette/utils: >=2.4
- tracy/tracy: >=2.4
README
安装
$ composer require geniv/nette-general-form
或
"geniv/nette-general-form": "^1.1"
require
"php": ">=7.0", "nette/application": ">=2.4", "nette/component-model": ">=2.3", "nette/di": ">=2.4", "nette/mail": ">=2.4", "nette/utils": ">=2.4", "tracy/tracy": ">=2.4"
包含在应用程序中
使用 IEvent
class MyEvent implements IEvent ... public function update(IEventContainer $eventContainer, array $values) // usage method by IEventContainer ... $eventContainer->getForm() $eventContainer->addValues($values) $eventContainer->setValues($values) $eventContainer->removeValue($key) $eventContainer->getComponent() $eventContainer->getEventIndex() $eventContainer->getEvents()
使用 IFormContainer 和 IEventContainer (可以使用魔术 __invoke
方法)
private $formContainer; private $eventContainer; public $onSuccess, $onException; public function __construct(IFormContainer $formContainer, array $events) ... // $this->eventContainer = EventContainer::factory($this, $events, 'onSuccess', 'onException'); $this->eventContainer = EventContainer::factory($this, $events); $this->formContainer = $formContainer; ... $form->onSuccess[] = $this->eventContainer;
或 旧方法 不使用 __invoke
try { $this->notify($form, $values); $this->onSuccess($values); } catch (EventException $e) { $this->onException($e); }
使用 ITemplatePath (不带返回类型!)
class MyForm extends Control implements ITemplatePath ... public function setTemplatePath(string $path) { $this->templatePath = $path; }
可用的事件(实现 IEvent
)
- DumpEvent - FireLogEvent - ClearFormEvent - SetValueEvent (setValues(array)) - CallbackEvent (onCallback(IEventContainer, array)) - EmailNotifyEvent (getMessage(), setTemplatePath(string))
SetValueEvent
- SetValueEvent([active: false, role: guest])
CallbackEvent
- CallbackEvent
在演示者中的使用
$callbackEvent->onCallback[] = function (IEventContainer $eventContainer, array $value) { if ($this->identityModel->existLogin($value['login'])) { throw new EventException('duplicate login'); } if ($this->identityModel->existEmail($value['email'])) { throw new EventException('duplicate email'); } };
EmailNotifyEvent
admin: Identity\Events\RegistrationEmailNotifyEvent # email for admin user: Identity\Events\RegistrationEmailNotifyEvent # email for user # or - Identity\Events\ForgottenEmailNotifyEvent
其中类名(防止 DI 中多个服务)
class RegistrationEmailNotifyEvent extends EmailNotifyEvent {} class ForgottenEmailNotifyEvent extends EmailNotifyEvent {}
在演示者中的使用
$emailNotifyEvent->onConfigure[] = function (IEventContainer $eventContainer, array $value) use ($emailNotifyEvent) { $emailNotifyEvent->setTemplatePath(__DIR__ . '/templates/Forgotten/emailFormForgotten.latte'); $message = $emailNotifyEvent->getMessage(); $message->setFrom('info@email.cz'); $message->setSubject('informacni email pro uzivatele'); $message->addTo($value['email']); }; // or $emailNotifyEvent->onConfigure[] = function (IEventContainer $eventContainer, array $value) use ($emailNotifyEvent) { $message = $emailNotifyEvent->getMessage(); $message->setFrom('info@email.cz'); switch ($eventContainer->getEventIndex()) { case 'user': $emailNotifyEvent->setTemplatePath(__DIR__ . '/templates/Registration/emailFormUser.latte'); $message->setSubject('informacni email pro uzivatele'); $message->addTo($value['email']); break; case 'admin': $emailNotifyEvent->setTemplatePath(__DIR__ . '/templates/Registration/emailFormAdmin.latte'); $message->setSubject('informacni email pro admina'); $message->addTo('email@email.com'); break; } };
定义中的事件可以使用多次,并定义如匿名索引或文本索引
events: - DumpEvent - DumpEvent fire1: FireLogEvent fire2: FireLogEvent
扩展
使用 GeneralForm
$formContainer = GeneralForm::getDefinitionFormContainer($this); $events = GeneralForm::getDefinitionEventContainer($this);
使用 GeneralControl
class MyForm extends GeneralControl { public function __construct(IFormContainer $formContainer, array $events, ITranslator $translator = null) { parent::__construct($formContainer, $events, $translator); $this->templatePath = __DIR__ . '/MyPath.latte'; // set path } }
异常
类: EventException