pstephan1187/laravel-forms

该包已被放弃,不再维护。没有建议的替代包。

一个用于编程创建和处理表单和字段的包。

0.3.3 2016-12-22 15:06 UTC

This package is not auto-updated.

Last update: 2022-04-25 02:18:32 UTC


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();

字段

创建字段

可以通过两种方式添加新字段。您可以通过FormBuilderaddField方法添加,或者手动创建一个字段并将其添加到表单中。

$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 属性中定义默认属性。

然后,您可以设置或覆盖任何自定义方法。