Laravel Collectiveを使用して入力フォーム・バリデーションを作成するまでの一連の流れです。フォームを作成してから、requestsを作ります。
php composer.phar require laravelcollective/html
.config/app.php
Collective\Html\HtmlServiceProvider::class, 'Form' => Collective\Html\FormFacade::class, 'Html' => Collective\Html\HtmlFacade::class,
view: resources/view/admin/users/
create.blade.php
<h1>Create Users</h1> {!! Form::open(['method'=>'POST', 'action'=>'AdminUsersController@store', 'files'=>true]) !!} {{ csrf_field()}} <div class="form-group"> {!! Form::label('name', 'Name') !!} {!! Form::text('name', null, ['class'=>'form-control']) !!} </div> <div class="form-group"> {!! Form::submit('Create Post', ['class'=>'btn btn-primary']) !!} </div> {!! Form::close() !!}
AdminUsersController.php
テーブルからリストを呼び出す
public function create() { // $roles = Role::lists('name','id')->all(); return view('admin.users.create', compact('roles')); }
create.blade.php
array(”=>’Choose Options’) + $rolesとして、rolesテーブルから自動的にselect文を生成する
{!! Form::open(['method'=>'POST', 'action'=>'AdminUsersController@store', 'files'=>true]) !!} {{ csrf_field()}} <div class="form-group"> {!! Form::label('name', 'Name') !!} {!! Form::text('name', null, ['class'=>'form-control']) !!} </div> <div class="form-group"> {!! Form::label('email', 'Email') !!} {!! Form::email('email', null, ['class'=>'form-control']) !!} </div> <div class="form-group"> {!! Form::label('role_id', 'Roles') !!} {!! Form::select('role_id',array(''=>'Choose Options') + $roles, null, ['class'=>'form-control']) !!} </div> <div class="form-group"> {!! Form::label('status', 'Status') !!} {!! Form::select('status',array(1 => 'Active', 0 =>'Not Active'), null, ['class'=>'form-control']) !!} </div> <div class="form-group"> {!! Form::label('password', 'Password') !!} {!! Form::password('password', null, ['class'=>'form-control']) !!} </div> <div class="form-group"> {!! Form::submit('Create Post', ['class'=>'btn btn-primary']) !!} </div> {!! Form::close() !!}
$ php artisan make:request UsersRequest
Request/UsersRequest.php
※authorizeをfalseのままだとforbiddenに遷移します
public function authorize() { return true; } public function rules() { return [ 'name' => 'required', 'email' => 'required', 'role_id' => 'required', 'password' => 'required' ]; }
Controller: AdminUsersRequest.php
use App\Http\Requests\UsersRequest; public function store(UsersRequest $request) { return $request->all(); }
create.blade.php
@if(count($errors) > 0) <div class="alert alert-danger"> <ul> @foreach($errors->all() as $error) <li>{{$error}}</li> @endforeach </ul> </div> @endif
### エラーはテンプレート化する
@include('includes.form_error')
LaravelCollectiveも、初めて使ったときはメリットが分かりませんでしたが、少しずつ実用性を体感していきます。