anlutro/form

动态表单构建器。

0.3.14 2015-08-12 11:52 UTC

This package is auto-updated.

Last update: 2024-09-24 08:57:07 UTC


README

厌倦了默认Laravel 4表单构建器中的bug和怪异行为,我写了自己的,并且使其与框架无关。功能包括:

  • 每个表单都是其自己的对象,具有(可选的)自己的行为
  • 为表单对象设置模型以预先填充表单输入
  • 从会话中获取旧输入
  • 验证输入

警告:在0.x版本期间不保证向后兼容性。

安装

composer require anlutro/form

从Packagist或GitHub标签列表中选择最新稳定版本。

Laravel 4

将 'anlutro\Form\ServiceProvider' 添加到 app/config/app.php 中的服务提供商列表。

其他框架/原始PHP

您需要设置一个共享的 anlutro\Form\Builder 实例,并且这个实例应该被注入到所有表单实例中。

为了从表单实例中获取输入,您应该在Builder实例上调用 setRequest。请求应该是 Symfony\Component\HttpFoundation\Request 实例。

为了使会话中的旧输入、CSRF令牌和验证正常工作,您需要在Builder实例上构造和设置一个会话和/或验证服务。接口位于 Adapters 命名空间中,一旦您有一个实现了这些接口的对象,您可以通过 setSessionAdaptersetValidationAdapter 来设置它们。

如果您为流行的库编写了适配器,请考虑发起一个拉取请求,以便将其添加到包中!

使用方法

对于简单的表单,我们将使用类 anlutro\Form\DefaultForm。将其注入到您的控制器中...

use anlutro\Form\DefaultForm;
public function __construct(DefaultForm $form)
{
	$this->form = $form;
}

或者如果可用,直接构造它。

$this->form = new DefaultForm($formBuilder);

在您的控制器动作中,您可以定义表单的行为。以下所有内容都是可选的。

// The model is where the form gets its data. It can be an existing active-
// record model, entity or an array of dummy data.
$this->form->setModel($myModel);
$this->form->setAction('http://mysite.com/my-route');
$this->form->setMethod('PUT');

在显示表单的控制器动作中将表单传递给视图。在您的视图中 - 使用您可用的任何模板引擎

<?= $form->open(['class' => 'form-horizontal']) ?>
<div class="form-group">
  <?= $form->text('my_field', ['class' => 'form-control']) ?>
</div>
<?= $form->close() ?>

处理表单POST请求的控制器动作中

$input = $this->form->getInput();
$this->service->doStuff($input);

如果您的表单有自定义行为 - 获取器、设置器等,您可以通过扩展 AbstractForm 类并注入您的自定义类来代替 DefaultForm

use anlutro\Form\AbstractForm;
class MyForm extends AbstractForm {}

请查看示例目录以获取更多信息。

联系

如果您有任何问题或建议,请在GitHub上发起一个问题。

许可证

本存储库的内容是在 MIT许可证 下发布的。