safan-form / form-manager
表单管理器
Requires
- php: >=5.4.0
- safan-lab/safan: 1.*
This package is not auto-updated.
Last update: 2024-09-23 14:38:56 UTC
README
saafan框架中用于管理和构建表单的表单管理器。
要求
PHP > 5.4.0
安装
如果你在你的项目的依赖项中使用Composer,请在你的"composer.json"中添加以下内容
"require": {
"safan-form/form-manager": "1.*"
}
更新模块配置列表 - safan-framework-standard/application/Settings/modules.config.php
<?php
return [
// Safan Framework default modules route
'Safan' => 'vendor/safan-lab/safan/Safan',
'SafanResponse' => 'vendor/safan-lab/safan/SafanResponse',
// Write created or installed modules route here ... e.g. 'FirstModule' => 'application/Modules/FirstModule'
'FormManager' => 'vendor/safan-form/form-manager/FormManager',
];
添加配置 - safan-framework-standard/application/Settings/main.config.php
<?php
'init' => [
'form' => [
'class' => 'FormManager\FormManager',
'method' => 'init',
]
]
用法
在Safan处理器中通过名称'formManager'初始化FormManager,要使用此类,调用例如。
$formManager = Safan::handler()->getObjectManager()->get('formManager');
要声明表单类型,你可以使用...
$form = $formManager->generateForm(new YourCustomForm());
要使用FormManager,首先你需要在你的模块中声明一个在命名空间'Form'中的类,该类扩展FormType类,这是包含表单凭证的类。FormType是默认类,其命名空间为FormManager/Type/FormType。例如。
<?php
namespace Main\Modules\Main\Form;
use FormManager\Type\FormType;
use FormManager\Builder\FormBuilderInterface;
class ContactType extends FormType
{
public function buildForm(FormBuilderInterface $builder)
{
$builder->addAction('/')
->add('name', '', [
'label' => 'Name',
'attr' => ['class' => 'form-control', 'required' => 'required'],
'validation' => ['min' => 5]
]
)
->add('email', 'email', [
'label' => 'Email',
'attr' => ['class' => 'form-control', 'required' => 'required'],
'validation' => [
'min' => 5,
'message' => 'Incorrect email address.',
'callback' => function($email) {
return preg_match("/^[a-z0-9_-]{1,20}@(([a-z0-9-]+\.)+(com|net|org|mil|"."edu|gov|arpa|info|biz|inc|name|[a-z]{2})|[0-9]{1,3}\.[0-9]{1,3}\.[0-"."9]{1,3}\.[0-9]{1,3})$/is", $email);
}
],
]
)
->add('body', 'textarea', [
'label' => 'Body',
'attr' => ['class' => 'contactTextarea form-control', 'style' => 'height:100px;resize: none;' ,'id' => 'myCustomIdForTextarea'],
'validation' => ['min' => 5]
]
)
->add('submit', 'submit', [
'attr' => ['class' => 'btn btn-primary col-md-12 col-sm-12 col-xs-12', 'value' => "Send"]
]
)
->addMethod('post')
->addEnctype('multipart/form-data');
}
public function getName()
{
return 'contact';
}
}
你的FormType类必须声明两个抽象方法 --- 'buildForm()' 和 'getName()'。第一个方法 - 'buildForm()' 依赖于FormBuilder $builder,它构建表单字段。第二个方法 - 'getName()' 返回表单的名称,你可以在Form类中获取。
对于任何类型的字段,你都可以声明'validation',这将由FormValidation类在初始化时进行验证。现在支持'min'、'max'和'callback'验证,但你可以通过扩展Validation类并在此类中声明自定义方法来添加自定义类型。
'callback'必须返回布尔类型。对于'type' 'min'和'max',有默认的'messages',但你可以通过在'validation'数组中添加'message'类型来声明自定义消息。
视图
要在视图中构建表单,你可以使用...(例如,在我们的示例中,我们使用bootstrap类在bootstrap视图中构建表单,但你可以使用你自己的类或另一个前端框架)
<div class="col-sm-6 mt15">
<form action="<?= $form->action() ?>" method="<?= $form->method() ?>" enctype="<?= $form->enctype() ?>">
<?= $form->formErrors(); ?>
<div class="row">
<div class="col-sm-12 mb20">
<div class="form-group">
<?= $form->row($form->name()); ?>
</div>
<div class="form-group">
<?= $form->row($form->email()); ?>
</div>
<div class="form-group">
<?= $form->row($form->body()); ?>
</div>
<div class="form-group">
<?= $form->row($form->submit()); ?>
</div>
</div>
</div>
</form>1
</div>
每个字段都是使用在buildForm方法中声明的此字段名称声明的。
如果验证数据后你在控制器中验证表单,错误部分就会生效。
$formData = $form->getPostData();
if($form->isValid($formData)) {
/// ...
}
如果有错误,错误消息将显示在每个声明的验证字段的底部。