pstephan1187 / laravel-forms
一个用于编程创建和处理表单和字段的包。
Requires
- laravel/framework: >=5.1.0
README
Formery是一个用于在Laravel中编程创建和验证表单的包。它默认配置为使用Twitter Bootstrap,但可以轻松地自定义以使用您想要的任何内容。
目前,Formery支持Laravel > 5.1,并且必须在blade模板中使用。它还不支持纯PHP模板或Twig。
安装
composer require pstephan1187/laravel-forms
在您的应用程序配置中注册服务提供者
Formery\ServiceProvider::class,
可选地,将视图发布到您的resources/views/
目录
php artisan vendor:publish
快速入门
创建表单
use Formery\FormBuilder;
// In your controller constructor, new up a form and set the action:
$this->form = new FormBuilder('/');
// You may also override the default 'POST' method
$this->form = new FormBuilder('/', 'GET');
// Create a text field with a name of "name" and label of "Name". Also make it required.
$this->form->addField('name', 'Name', \Formery\FieldTypes\Text::class)->addRules('required');
// Create an email field. Make sure the email is unique
$this->form->addField('email', 'Email', \Formery\FieldTypes\Email::class)->addRules(['required', 'unique:users,email_address']);
// Add a password field. Make sure it matches its confirmation field.
$this->form->addField('password', 'Password', \Formery\FieldTypes\Password::class)->addRules(['required', 'confirmed']);
$this->form->addField('password_confirmation', 'Confirm Password', \Formery\FieldTypes\Password::class);
// Add the submit button. Align it to the right
$this->form->addButton('Login', 'submit', ['class' => 'pull-right']);
将表单传递到您的视图中
// In your controller route, pass the form to the view:
return view('form-view')->with(['form' => $this->form]);
在blade模板中渲染表单
@form($form)
当表单提交时进行验证
// In your controller route:
$this->form->validate($request);
// Process your data here!
validate
方法使用与Laravel中包含的相同的功能。它会自动将带有错误和旧输入的表单返回到表单中。
表单构建器
构造函数
当你创建一个表单时,第一个参数是必需的。这设置了表单将提交到的目标路径。第二个参数设置提交方法,默认为POST
。
$form = new FormBuilder(‘/create-user’);
$form = new FormBuilder(route(‘user.create’), ‘PUT’);
跨站请求伪造保护
Formery默认利用Laravel的CSRF保护。如果需要,您可以禁用它。
$form->useCsrf(false);
自动占位符
您可以告诉表单自动为所有适用的输入字段生成占位符。占位符文本将设置为字段的标签。
$form->usePlaceholders();
使用旧输入
Formery会自动捕获旧输入并在验证未通过时将其推送到表单字段中。如果您希望,可以关闭此功能。
$form->captureOldInput(false);
添加字段
在创建字段时,您必须设置名称、标签和类型。您可以可选地设置要在输入元素上设置的任何属性
$first_name_field = $form->addField('first_name', 'First Name', \Formery\FieldTypes\Text::class);
$last_name_field = $form->addField('last_name', 'Last Name', \Formery\FieldTypes\Text::class, ['title' => 'Last Name']);
$email_field = new \Formery\FieldTypes\Email('email', 'Email');
$form->getFields->push($email_field);
下面有更多关于字段的信息。
按钮
按钮默认放置在表单底部。如果您想覆盖此设置,可以自定义表单视图。按钮的添加方式与字段类似,但您不需要指定类型。第一个参数是标签,第二个参数是按钮类型。按钮类型默认为button
。
$form->addButton('Register', 'submit', ['class' => 'pull-right']);
上传
您可以通过调用allowUploads
方法设置适当的表单enctype
以进行上传。
$form->allowUploads();
渲染表单
Formery先前注册了一个用于注册表单的指令。
@form($form)
您也可以手动渲染表单。调用render
方法将返回表单的视图对象。
$form->render();
字段
创建字段
可以通过两种方式添加新字段。您可以通过FormBuilder
的addField
方法添加,或者手动创建一个字段并将其添加到表单中。
$name_field = $form->addField('name', 'Name', \Formery\FieldTypes\Text::class);
$email_field = new \Formery\FieldTypes\Email('email', 'Email');
$form->getFields->push($email_field);
addField
方法将返回字段,以便您可以对其添加字段方法。
$form->addField('name', 'Name', \Formery\FieldTypes\Text::class)->addRule('required');
验证规则
验证由Laravel处理,但Formery设置了一些合理的默认值和添加规则到字段的方法。许多字段在创建时就已经有了默认规则。例如,Email
字段需要其输入为有效的电子邮件地址。
您也可以添加规则。addRule
方法将给定的字符串附加到字段的规则上。例如
$email_field->addRule('required');
将|required
附加到字段的当前规则集,最终结果为email|required
。
您也可以添加一个规则数组。
$email_field->addRule(['required', 'unique:users,email_address']);
属性
您也可以为字段添加属性。任何属性都将放置在输入元素上。有几种方式可以添加属性。首先,您可以在创建字段时添加它们
$form->addField('name', 'Name', \Formery\FieldTypes\Text::class, ['disabled' => true]);
new \Formery\FieldTypes\Email('email', 'Email', ['placeholder' => 'email@example.com']);
您也可以使用__call
魔术方法添加属性。方法名将是属性名,方法值将是属性值。调用不带值的方法将属性设置为标志。
$field->class('my-class');
$field->disabled();
这些方法也是可链的。
$field->class('my-class')->disabled();
选项
某些字段类型(选择、复选框、单选按钮)需要一组选项。您可以使用options
方法实现。选项应定义为一个数组数组。每个选项数组都需要一个label
键。您还应该定义一个value
键。如果没有定义值键,则该选项的值将为null
。您还可以定义一个disabled
键。如果将该键设置为true
,则该选项将禁用。
$checkbox_field->options([
['label' => 'Extra Small', 'value' => 'xs'],
['label' => 'Small', 'value' => 'sm'],
['label' => 'Medium', 'value' => 'md'],
['label' => 'Large', 'value' => 'lg'],
['label' => 'Extra Large', 'value' => 'xl'],
]);
选择字段也支持“optgroups”。这些定义方式与选项非常相似,但它们需要而不是值,需要一个options
键。该options
键将包含一个选项数组。
$select_field->options([
['label' => 'United States', 'value' => 'us'],
['label' => 'US States', 'options' => [
['label' => 'Alabama', 'value' => 'al'],
['label' => 'Missouri', 'value' => 'mo'],
['label' => 'Washington', 'value' => 'wa'],
]],
['label' => 'Great Britain', 'value' => 'gb'],
['label' => 'Australia', 'value' => 'au'],
['label' => 'Spain', 'value' => 'sp'],
]);
默认值
对于常规字段,您可以通过使用value
方法分配值。
$field->value('Default Value');
对于复选框、单选按钮和多选框,您可以分配一个数组。
$field->value(['option_one', 'option_two']);
对于选择框,您还可以分配一个默认选择选项。
$select_field->initial('Selection an option');
这将设置一个禁用选项为第一个和已选选项(除非选择框有值)和给定的标签。您还可以通过第二个参数传递值。
$select_field->initial('Selection an option', 'nothing');
可用的字段类型
以下字段类型在Formery中可用。当然,您也可以创建自己的。
Formery\FieldTypes\Checkbox
Formery\FieldTypes\Email
Formery\FieldTypes\File
Formery\FieldTypes\Number
Formery\FieldTypes\Password
Formery\FieldTypes\Radio
Formery\FieldTypes\Select
Formery\FieldTypes\Text
Formery\FieldTypes\Url
覆盖视图文件
如果您想为单个字段使用自定义视图,可以使用setViewFile
方法。
$field->setViewFile('my-custom-blade-file');
如果您想自定义某类型所有字段的视图,可以将视图发布到您的 resources/views/vendor/form/
目录(见安装说明中的上方)并自定义字段类型模板。
自定义字段类型
您也可以创建自定义字段类型。例如日期选择器、颜色选择器、文件浏览器等。为此,创建一个继承自 Formery\Field
类的类。
至少,您必须定义一个 protected $view_file
属性。当字段被渲染时,它会处理该视图,并将自己作为 $field
变量传递给视图。
您还可以在 protected $rules
属性中定义默认规则,以及在 protected $attributes
属性中定义默认属性。
然后,您可以设置或覆盖任何自定义方法。