Générateur de formulaires pour Laravel 5 inspiré du générateur de formulaires de Symfony. Avec l'aide de Laravels FormBuilder, la classe crée des formulaires qui peuvent être facilement modifiés et réutilisés. Par défaut, il prend en charge Bootstrap 3.
Pour la version Laravel 4, consultez laravel4-form-builder.
Pour utiliser bootstrap 4 au lieu de bootstrap 3, installez laravel-form-builder-bs4.
Si vous avez effectué une mise à niveau vers >1.6.*
à partir de 1.5.*
ou une version antérieure et que vous rencontrez des problèmes avec la liaison des valeurs de formulaire, renommez default_value
en value
.
Plus d'informations dans le journal des modifications.
Pour une documentation détaillée, reportez-vous à https://kristijanhusak.github.io/laravel-form-builder/.
Le journal des modifications peut être trouvé ici.
composer require kris/laravel-form-builder
Ou manuellement en modifiant le fichier composer.json
:
{
"require" : {
"kris/laravel-form-builder" : " 1.* "
}
}
Et lancez composer install
Ajoutez ensuite le fournisseur de services à config/app.php
' providers ' => [
// ...
Kris LaravelFormBuilder FormBuilderServiceProvider::class
]
Et Façade (également dans config/app.php
)
' aliases ' => [
// ...
' FormBuilder ' => Kris LaravelFormBuilder Facades FormBuilder::class
]
Remarque : Ce package ajoutera le package laravelcollective/html
et chargera les alias (Form, Html) s'ils n'existent pas dans le conteneur IoC.
Créer des classes de formulaire est simple. Avec une simple commande artisanale :
php artisan make:form Forms/SongForm --fields= " name:text, lyrics:textarea, publish:checkbox "
Le formulaire est créé dans le chemin app/Forms/SongForm.php
avec le contenu :
<?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 );
}
}
Si vous souhaitez instancier un formulaire vide sans aucun champ, ignorez simplement le paramètre --fields
:
php artisan make:form Forms/PostForm
Donne :
<?php
namespace App Forms ;
use Kris LaravelFormBuilder Form ;
class PostForm extends Form
{
public function buildForm ()
{
// Add fields here...
}
}
Après cela, instanciez la classe dans le contrôleur et transmettez-la pour afficher :
<?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...
}
}
Exemple alternatif :
<?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...
}
}
Si vous souhaitez stocker un modèle après la soumission d'un formulaire en considérant que tous les champs sont des propriétés du modèle :
<?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...
}
Vous ne pouvez enregistrer que les propriétés dont vous avez besoin :
<?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...
}
Ou vous pouvez mettre à jour n'importe quel modèle après l'envoi du formulaire :
<?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...
}
Créer les itinéraires
// app/Http/routes.php
Route:: get ( ' songs/create ' , [
' uses ' => ' SongsController@create ' ,
' as ' => ' song.create '
]);
Route:: post ( ' songs ' , [
' uses ' => ' SongsController@store ' ,
' as ' => ' song.store '
]);
Imprimez le formulaire en vue avec la fonction d'assistance form()
:
<!-- resources/views/song/create.blade.php -->
@extends('app')
@section('content')
{!! form($form) !!}
@endsection
Allez dans /songs/create
; le code ci-dessus générera ce code 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 >
Ou vous pouvez générer des formulaires plus facilement en utilisant un simple tableau
<?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 ' ));
}
}
Le projet suit la norme PSR-2 et est couvert par des tests PHPUnit. Les demandes d'extraction doivent inclure des tests et réussir la version de Travis CI.
Pour exécuter des tests, installez d’abord les dépendances avec composer install
.
Après cela, les tests peuvent être exécutés avec vendor/bin/phpunit