evista / formista
轻量级表单API
dev-master / 1.0.x-dev
2015-11-05 17:30 UTC
Requires
- php: >=5.3.0
Requires (Dev)
- phpunit/phpunit: 4.*
- scrutinizer/ocular: ~1.1
This package is auto-updated.
Last update: 2024-09-05 00:23:32 UTC
README
这里应该是您的描述。尽量限制在一两段话之内,并提及您支持的PSRs,以避免用户和贡献者的任何混淆。
安装
通过Composer
$ composer require evista/formista
用法
`
简单表单
要创建表单,只需添加一个新的类,该类以任何名称扩展BaseForm类use Evista\Formista\ValueObject\FormField; use Evista\Formista\Form\BaseForm; class ExampleForm extends BaseForm { //... }
没有表单元素,此类不太有用。要添加任何字段,例如一个隐藏的输入,你必须实现一个名为 generateFields() 的类方法。
public function generateFields(){ // Name field $name = new FormField(FormField::TYPE_TEXT_INPUT); $name ->setName('name') ->setAttributes(['placeholder' => 'Minta János', 'id' => 'name']); $this->formFields['name'] = $name; }
现在,您的 ExampleForm 有一个名为 name 的输入字段。如果您想显示表单,只需使用此类即可。
$form = new ExampleForm(); print '<input type="'.$form->getField('name')->getType().'" name="'.$form->getField('name')->getName().'" value="'.$form->getField('name')->getValue().'"/>';用户将此提交给服务器后,您可以像以前一样重建表单:```php $form = new ExampleForm(); ``` 但这次每个字段值都将填充用户发送的内容。```php $form->getField('name')->getValue() // Bálint ``` 这不仅更方便,而且使您的代码更易读和易于理解。但 Fom API 可以做更多:您可以设置验证;```php // 电话 $phone = new FormField(FormField::TYPE_TEXT_INPUT); $phone ->setName('phone') ->setAttributes(['placeholder' => '+36 30 111 2222', 'id' => 'phone']) ->setSanitizationCallback(function($value){ // only numbers, whitespaces and + return trim(preg_replace($this->phoneNumberPattern, '', $value)); }) ->setValidationCallback( function($value){ // Length constrain if(strlen($value)<5){ return 'Telephone number is not valid'; } // Regex constrain if(preg_match($this->phoneNumberPattern, $value)){ return 'Telephone number is not valid'; } // False means it's OK! return false; } ) ->setMandatory(true); $this->formFields['phone'] = $phone; ``` 使用 setValidationCallback() 方法,您可以定义一个函数,该函数接收提交的值作为 $value。返回 false 表示提交的数据没有问题。当您调用 validate() 方法时,表单将对所有输入运行所有验证。```php $form->validate(); ``` 您可以使用 setMandatory() 方法将任何字段设置为必填。验证不是自动的,因此请务必调用 validate() 方法。```php $form = new ExampleForm(); if(count($errors = $form->validate()) > 0){ //something is wrong, the messages are in the $errors array } // It's valid yeah ``` 您可以设置一个自动调用的清理回调,当实例化表单时将调用。Csrf保护也是完全自动的,因此您不需要做任何事情。
Ajax表单
变更日志
请参阅 CHANGELOG 了解最近更改的详细信息。
测试
$ composer test
贡献
请参阅 CONTRIBUTING 和 CONDUCT 了解详细信息。
安全
如果您发现任何安全相关的问题,请通过电子邮件 sera.balint@e-vista.hu 联系,而不是使用问题跟踪器。
致谢
许可
MIT许可证(MIT)。请参阅 许可文件 了解更多详细信息。