Laravel Collectiveで、編集する際は、Controllerから送られてきた$idに対し、Form::Model($user, [‘method’=>’PATCH’, …と書くだけ。
AdminUsersController.php
public function edit($id)
{
$user = User::FindOrFail($id);
$roles = Role::lists('name', 'id')->all();
return view('admin.users.edit', compact(['user','roles']));
}
View: index.blade.php
{{route(‘admin.users.edit’, $user->id)}}で、Editページへのリンク
<tr>
<td>{{$user->id}}</td>
<td><img height="50" src="/{{$user->photo ? $user->photo->file : ''}}"></td>
<td><a href="{{route('admin.users.edit', $user->id)}}">{{$user->name}}</a></td>
<td>{{$user->email}}</td>
<td>{{$user->role->name}}</td>
<td>{{$user->is_active == 1 ? 'Active' : 'No Active'}}</td>
<td>{{$user->created_at->diffForHumans()}}</td>
<td>{{$user->updated_at->diffForHumans()}}</td>
</tr>
edit.blade.php
->create.blade.phpをコピー
collectiveは、Form::Model($user, [‘method’=>’PATCH’, ‘action’=>[‘AdminUsersController@update’,$user->id], ‘files’=>true])と書く
{!! Form::Model($user, ['method'=>'PATCH', 'action'=>['AdminUsersController@update',$user->id], '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',$roles, null, ['class'=>'form-control']) !!}
</div>
<div class="form-group">
{!! Form::label('is_active', 'Status') !!}
{!! Form::select('is_active',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::label('photo_id', 'Photos') !!}
{!! Form::file('photo_id', null, ['class'=>'form-control']) !!}
</div>
<div class="form-group">
{!! Form::submit('Create Post', ['class'=>'btn btn-primary']) !!}
</div>
{!! Form::close() !!}
### 画像の表示
画像がないときは、placehold.itの画像を表示する🤩
<div class="col-sm-3">
<img src="{{$user->photo ? '/'.$user->photo->file : 'https://placehold.it/400x400'}}" alt="" class="img-responsive img-rounded">
</div>
AdminUsersController.php
public function update(UsersRequest $request, $id)
{
//
$user = User::findOrFail($id);
$input = $request->all();
if($file = $request('photo_id')){
$name = time(). $file->getClientOriginalName();
$file->move('images', $name);
$photo = Photo::create(['file'=>$name]);
$input['photo_id'] = $photo->id;
}
$input['password'] = bcrypt($request->password);
$user->update($input);
return redirect('/admin/users');
}
$ php artisan make:request UsersEditRequest
Request/UsersEditRequest.php
public function authorize()
{
return true;
}
public function rules()
{
return [
'name' => 'required',
'email' => 'required',
'role_id' => 'required',
];
}
AdminUsersController
use App\Http\Requests\UsersEditRequest;
public function update(UsersEditRequest $request, $id)
{
//
$user = User::findOrFail($id);
if($request->password == '' ){
$input = $request->except('password');
} else {
$input = $request->all();
$input['password'] = bcrypt($request->password);
}
if($file = $request->file('photo_id')){
$name = time(). $file->getClientOriginalName();
$file->move('images', $name);
$photo = Photo::create(['file'=>$name]);
$input['photo_id'] = $photo->id;
}
$user->update($input);
return redirect('/admin/users');
}
img src=”{{$user->photo ? ‘/’.$user->photo->file : ‘https://placehold.it/400×400’}}” alt=”” class=”img-responsive img-roundedの書き方は面白い。placeholdは画像化してimgフォルダに格納して呼び出していましたが、CDNのような使い方ができるのであれば、その方が楽。