revolution/laravel-laminas-form

Laravel Laminas Form

1.10.0 2024-02-20 04:57 UTC

README

tests Maintainability Test Coverage

Laravel Laminas Form

https://docs.laminas.dev/laminas-form/

需求

  • PHP >= 8.1
  • Laravel >= 10.0

版本控制

  • 基础: semver
  • 删除旧PHP或Laravel版本: +0.1. composer应该能很好地处理它。
  • 只支持最新主要版本(master分支),但你也可以向旧分支提交PR。

安装

composer require revolution/laravel-laminas-form

从LaminasForm建议

https://github.com/laminas/laminas-form/blob/master/composer.json

        "laminas/laminas-captcha": "^2.7.1, required for using CAPTCHA form elements",
        "laminas/laminas-code": "^2.6 || ^3.0, required to use laminas-form annotations support",
        "laminas/laminas-eventmanager": "^2.6.2 || ^3.0, reuired for laminas-form annotations support",
        "laminas/laminas-recaptcha": "in order to use the ReCaptcha form element"

演示

https://github.com/kawax/laravel-laminas-form-project

Artisan命令

php artisan make:form SampleForm

app/Http/Forms/SampleForm.php

表单类

namespace App\Http\Forms;

use Revolution\LaminasForm\Form;
use Laminas\Form\Element;

class SampleForm extends Form
{
    /**
     * Create a new form.
     *
     * @param null|string $name
     *
     * @return void
     */
    public function __construct($name = null)
    {
        parent::__construct($name);

        $this->setAttributes([
            'action' => url('/'),
            'method' => 'post',
        ]);

        $name = new Element\Text('name');
        $name->setAttributes([
            'id'    => 'name',
            'class' => 'form-control',
            'value' => old('name'),
        ]);
        $name->setLabel('Your name');
        $name->setLabelAttributes([
            'class' => 'col-sm-2 col-form-label',
        ]);
        $name->setOptions([
            'wrapper-class' => 'mb-3 row',
            'element-class' => 'col-sm-10',
        ]);

        $this->add($name);

        $this->add([
            'type'       => Element\Email::class,
            'name'       => 'email',
            'attributes' => [
                'id'    => 'email',
                'class' => 'form-control',
                'value' => old('email'),
            ],
            'options'    => [
                'label'            => 'Your email address',
                'label_attributes' => [
                    'class' => 'col-sm-2 col-form-label',
                ],
                'wrapper-class'    => 'mb-3 row',
                'element-class'    => 'col-sm-10',
            ],
        ]);

        $this->add([
            'type'       => Element\Hidden::class,
            'name'       => '_token',
            'attributes' => [
                'value' => csrf_token(),
            ],
        ]);

        $this->add([
            'name'       => 'send',
            'type'       => 'Submit',
            'attributes' => [
                'value' => 'Submit',
                'class' => 'btn btn-primary',
            ],
        ]);
    }
}

控制器

use App\Http\Forms\SampleForm;

    public function __invoke()
    {
        $form = new SampleForm();

        return view('form')->with(compact('form'));
    }
use App\Http\Forms\SampleForm;

    public function __invoke(SampleForm $form)
    {
        return view('form')->with(compact('form'));
    }

视图

简单渲染

{{ $form->render() }}

与LaminasForm的echo $this->form($form);相同

详细渲染

@php
    $form->prepare();
@endphp

{!! $form->form()->openTag($form) !!}

{{ csrf_field() }}

<div class="mb-3 row">
    <label for="name" class="col-sm-3 col-form-label">{!! $form->get('name')->getLabel()  !!}</label>
    <div class="col-sm-9">
        {!! $form->formInput($form->get('name')) !!}
    </div>
</div>

<div class="mb-3 row">
    <label for="email" class="col-sm-3 col-form-label">{!! $form->get('email')->getLabel()  !!}</label>
    <div class="col-sm-9">
        {!! $form->formInput($form->get('email')) !!}
    </div>
</div>

<div class="mb-3 row">
    <div class="col-sm-9 offset-sm-3">
        {!! $form->formSubmit($form->get('send')) !!}
    </div>
</div>

{!! $form->form()->closeTag($form) !!}

表单对象可以通过魔法方法调用Laminas的ViewHelper。

https://docs.laminas.dev/quick-start/

ViewHelper渲染

{{ $form->render('bootstrap5horizon') }}

https://github.com/kawax/laravel-laminas-form/blob/master/docs/helpers.md

验证

使用Laravel的FormRequest。

许可证

MIT
版权kawax