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のような使い方ができるのであれば、その方が楽。