brainfab/laravel-form

使用 Laravel 框架配合 Symfony 表单组件

dev-master 2017-01-27 18:13 UTC

This package is not auto-updated.

Last update: 2024-09-28 20:40:49 UTC


README

Latest Stable Version Total Downloads Latest Unstable Version License Code Climate

建设中

安装

使用 composer 安装此包

composer require brainfab/laravel-form

更新 composer 后,将 ServiceProvider 添加到 config/app.php 中的 providers 数组

Brainfab\LaravelForm\LaravelFormsServiceProvider::class,

将 Facade 添加到 config/app.php 中的 aliases 数组

'FormFactory' => Brainfab\LaravelForm\Facades\FormFactory::class,

(可选) 使用 publish 命令将包配置复制到本地配置

php artisan vendor:publish --tag=config

(可选) 使用 publish 命令将包视图复制到本地 views/vendor 文件夹

php artisan vendor:publish --tag=views

控制台

生成表单类:php artisan make:form 'App\Forms\UserForm'

使用示例

app/Forms/UserForm.php

<?php

namespace App\Forms;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

class UserForm extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('name', TextType::class, [
            'rules' => 'required|min:6',
            'label' => 'Name'
        ]);

        $builder->add('email', EmailType::class, [
            'rules' => 'required|email',
            'label' => 'Email'
        ]);

        $builder->add('save_btn', SubmitType::class, [
            'label' => 'Save'
        ]);
    }

    /**
     * @param OptionsResolver $resolver
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        //set default options
        $resolver->setDefaults([]);
    }
}

app/Http/Controllers/UserController.php

<?php

namespace App\Http\Controllers;

use App\Forms\UserForm;
use Brainfab\LaravelForm\Controller\LaravelForm;
use App\User;
use Illuminate\Http\Request;

class UserController extends Controller
{
    use LaravelForm;

    public function index(Request $request)
    {
        $user = new User();

        $form = $this->createForm(TestForm::class, $user);

        if ($request->isMethod('post')) {
            //submit request
            $form->handleRequest($request);

            if ($form->isValid()) {
                $user->save();
            }
        }

        return view('users', [
            'form' => $form->createView()
        ]);
    }
}

resources/views/users.blade.php

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>LaravelForm</title>
</head>
<body>

    {{form($form)}}

</body>
</html>