Symfony의 폼 빌더에서 영감을 받은 Laravel 5용 폼 빌더입니다. Laravels FormBuilder 클래스의 도움으로 쉽게 수정하고 재사용할 수 있는 양식을 생성합니다. 기본적으로 Bootstrap 3을 지원합니다.
Laravel 4 버전의 경우 laravel4-form-builder를 확인하세요.
부트스트랩 3 대신 부트스트랩 4를 사용하려면 laravel-form-builder-bs4를 설치하세요.
1.5.*
이전 버전에서 >1.6.*
으로 업그레이드했고 양식 값 바인딩에 문제가 있는 경우 default_value
이름을 value
로 바꾸세요.
변경 로그에서 더 많은 정보를 확인하세요.
자세한 문서는 https://kristijanhusak.github.io/laravel-form-builder/를 참조하세요.
변경 내역은 여기에서 확인할 수 있습니다.
composer require kris/laravel-form-builder
또는 composer.json
파일을 수동으로 수정하여 다음을 수행합니다.
{
"require" : {
"kris/laravel-form-builder" : " 1.* "
}
}
그리고 composer install
실행하십시오.
그런 다음 config/app.php
에 서비스 공급자를 추가합니다.
' providers ' => [
// ...
Kris LaravelFormBuilder FormBuilderServiceProvider::class
]
그리고 Facade ( config/app.php
에도 있음)
' aliases ' => [
// ...
' FormBuilder ' => Kris LaravelFormBuilder Facades FormBuilder::class
]
주의 사항 : 이 패키지는 laravelcollective/html
패키지를 추가하고 별칭(Form, Html)이 IoC 컨테이너에 없으면 로드합니다.
양식 클래스를 만드는 것은 쉽습니다. 간단한 장인 명령으로:
php artisan make:form Forms/SongForm --fields= " name:text, lyrics:textarea, publish:checkbox "
양식은 다음 내용으로 app/Forms/SongForm.php
경로에 생성됩니다.
<?php
namespace App Forms ;
use Kris LaravelFormBuilder Form ;
use Kris LaravelFormBuilder Field ;
class SongForm extends Form
{
public function buildForm ()
{
$ this
-> add ( ' name ' , Field:: TEXT , [
' rules ' => ' required|min:5 '
])
-> add ( ' lyrics ' , Field:: TEXTAREA , [
' rules ' => ' max:5000 '
])
-> add ( ' publish ' , Field:: CHECKBOX );
}
}
필드 없이 빈 양식을 인스턴스화하려면 --fields
매개변수 전달을 건너뛰면 됩니다.
php artisan make:form Forms/PostForm
다음을 제공합니다:
<?php
namespace App Forms ;
use Kris LaravelFormBuilder Form ;
class PostForm extends Form
{
public function buildForm ()
{
// Add fields here...
}
}
그런 다음 컨트롤러에서 클래스를 인스턴스화하고 뷰에 전달합니다.
<?php
namespace App Http Controllers ;
use Illuminate Routing Controller as BaseController ;
use Kris LaravelFormBuilder FormBuilder ;
class SongsController extends BaseController {
public function create ( FormBuilder $ formBuilder )
{
$ form = $ formBuilder -> create ( App Forms SongForm::class, [
' method ' => ' POST ' ,
' url ' => route ( ' song.store ' )
]);
return view ( ' song.create ' , compact ( ' form ' ));
}
public function store ( FormBuilder $ formBuilder )
{
$ form = $ formBuilder -> create ( App Forms SongForm::class);
if (! $ form -> isValid ()) {
return redirect ()-> back ()-> withErrors ( $ form -> getErrors ())-> withInput ();
}
// Do saving and other things...
}
}
대체 예:
<?php
namespace App Http Controllers ;
use Illuminate Routing Controller as BaseController ;
use Kris LaravelFormBuilder FormBuilder ;
use App Forms SongForm ;
class SongsController extends BaseController {
public function create ( FormBuilder $ formBuilder )
{
$ form = $ formBuilder -> create (SongForm::class, [
' method ' => ' POST ' ,
' url ' => route ( ' song.store ' )
]);
return view ( ' song.create ' , compact ( ' form ' ));
}
public function store ( FormBuilder $ formBuilder )
{
$ form = $ formBuilder -> create (SongForm::class);
if (! $ form -> isValid ()) {
return redirect ()-> back ()-> withErrors ( $ form -> getErrors ())-> withInput ();
}
// Do saving and other things...
}
}
모든 필드가 모델 속성임을 고려하여 양식 제출 후 모델을 저장하려는 경우:
<?php
namespace App Http Controllers ;
use App Http Controllers Controller ;
use Kris LaravelFormBuilder FormBuilder ;
use App SongForm ;
class SongFormController extends Controller
{
public function store ( FormBuilder $ formBuilder )
{
$ form = $ formBuilder -> create ( App Forms SongForm::class);
$ form -> redirectIfNotValid ();
SongForm:: create ( $ form -> getFieldValues ());
// Do redirecting...
}
필요한 속성만 저장할 수 있습니다.
<?php
namespace App Http Controllers ;
use App Http Controllers Controller ;
use Kris LaravelFormBuilder FormBuilder ;
use App SongForm ;
class SongFormController extends Controller
{
public function store ( FormBuilder $ formBuilder , Request $ request )
{
$ form = $ formBuilder -> create ( App Forms SongForm::class);
$ form -> redirectIfNotValid ();
$ songForm = new SongForm ();
$ songForm -> fill ( $ request -> only ([ ' name ' , ' artist ' ])-> save ();
// Do redirecting...
}
또는 양식 제출 후 모델을 업데이트할 수 있습니다.
<?php
namespace App Http Controllers ;
use App Http Controllers Controller ;
use Kris LaravelFormBuilder FormBuilder ;
use App SongForm ;
class SongFormController extends Controller
{
public function update ( int $ id , Request $ request )
{
$ songForm = SongForm:: findOrFail ( $ id );
$ form = $ this -> getForm ( $ songForm );
$ form -> redirectIfNotValid ();
$ songForm -> update ( $ form -> getFieldValues ());
// Do redirecting...
}
경로 만들기
// app/Http/routes.php
Route:: get ( ' songs/create ' , [
' uses ' => ' SongsController@create ' ,
' as ' => ' song.create '
]);
Route:: post ( ' songs ' , [
' uses ' => ' SongsController@store ' ,
' as ' => ' song.store '
]);
form()
도우미 함수를 사용하여 보기에 있는 양식을 인쇄합니다.
<!-- resources/views/song/create.blade.php -->
@extends('app')
@section('content')
{!! form($form) !!}
@endsection
/songs/create
로 이동하세요. 위의 코드는 다음 HTML을 생성합니다.
< form method =" POST " action =" http://example.dev/songs " >
< input name =" _token " type =" hidden " value =" FaHZmwcnaOeaJzVdyp4Ml8B6l1N1DLUDsZmsjRFL " >
< div class =" form-group " >
< label for =" name " class =" control-label " > Name </ label >
< input type =" text " class =" form-control " id =" name " >
</ div >
< div class =" form-group " >
< label for =" lyrics " class =" control-label " > Lyrics </ label >
< textarea name =" lyrics " class =" form-control " id =" lyrics " > </ textarea >
</ div >
< div class =" form-group " >
< label for =" publish " class =" control-label " > Publish </ label >
< input type =" checkbox " name =" publish " id =" publish " >
</ div >
</ form >
또는 간단한 배열을 사용하여 더 쉽게 양식을 생성할 수 있습니다.
<?php
namespace App Http Controllers ;
use Illuminate Routing Controller as BaseController ;
use Kris LaravelFormBuilder FormBuilder ;
use Kris LaravelFormBuilder Field ;
use App Forms SongForm ;
class SongsController extends BaseController {
public function create ( FormBuilder $ formBuilder )
{
$ form = $ formBuilder -> createByArray ([
[
' name ' => ' name ' ,
' type ' => Field:: TEXT ,
],
[
' name ' => ' lyrics ' ,
' type ' => Field:: TEXTAREA ,
],
[
' name ' => ' publish ' ,
' type ' => Field:: CHECKBOX
],
]
,[
' method ' => ' POST ' ,
' url ' => route ( ' song.store ' )
]);
return view ( ' song.create ' , compact ( ' form ' ));
}
}
프로젝트는 PSR-2 표준을 따르며 PHPUnit 테스트로 다룹니다. 풀 요청에는 테스트가 포함되어야 하며 Travis CI 빌드를 통과해야 합니다.
테스트를 실행하려면 먼저 composer install
사용하여 종속성을 설치하세요.
그 후 vendor/bin/phpunit
사용하여 테스트를 실행할 수 있습니다.