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も、初めて使ったときはメリットが分かりませんでしたが、少しずつ実用性を体感していきます。