Reputation: 1323
I am working on a web application using Laravel-5.8. In the CRUD, I was able to Create and View records. However, I have problem with Update and delete.
Controller
class HrHolidayGroupsController extends Controller
{
public function index()
{
$userCompany = Auth::user()->company_id;
abort_unless(\Gate::allows('holiday_group_access'), 403);
if (auth()->user()->isAdmin()) {
$groups = HrHolidayGroup::all();
} else {
$groups = HrHolidayGroup::where('company_id', $userCompany)->get();
}
return view('hr.holiday_groups.index')->with('groups', $groups);
}
public function create()
{
$userCompany = Auth::user()->company_id;
abort_unless(\Gate::allows('holiday_group_create'), 403);
return view('hr.holiday_groups.create');
}
public function store(StoreHolidayGroupRequest $request)
{
abort_unless(\Gate::allows('holiday_group_create'), 403);
$group = HrHolidayGroup::create([
'group_name' => $request->group_name,
'description' => $request->description,
'company_id' => Auth::user()->company_id,
'created_by' => Auth::user()->id,
'created_at' => date("Y-m-d H:i:s"),
'is_active' => 1,
]);
Session::flash('success', 'Holiday Group is created successfully');
return redirect()->route('hr.holiday_groups.index');
}
public function show($id)
{
abort_unless(\Gate::allows('holiday_group_show'), 403);
return view('hr.holiday_groups.show', ['group' => HrHolidayGroup::findOrFail($id)]);
}
public function edit($id)
{
$userCompany = Auth::user()->company_id;
abort_unless(\Gate::allows('holiday_group_edit'), 403);
$group = HrHolidayGroup::where('id', $id)->first();
return view('hr.holiday_groups.edit')->with('group', $group);
}
public function update(UpdateHolidayGroupRequest $request, $id)
{
abort_unless(\Gate::allows('holiday_group_edit'), 403);
$group = HrHolidayGroup::find($id);
$group->group_name = $request->group_name;
$group->description = $request->description;
$group->company_id = Auth::user()->company_id;
$group->updated_by = Auth::user()->id;
$group->updated_at = date("Y-m-d H:i:s");
$group->is_active = 1;
$group->save();
Session::flash('success', 'Holiday Group is updated successfully');
return redirect()->route('hr.holiday_groups.index');
}
public function destroy(Request $request, $id)
{
$group = HrHolidayGroup::find($id);
$group->delete();
Session::flash('success', 'Holiday Group deleted successfully.');
return redirect()->route('hr.holiday_groups.index');
}
routes/web.php
Route::group(['prefix' => 'hr', 'as' => 'hr.', 'namespace' => 'Hr', 'middleware' => ['auth']], function () {
Route::resource('holiday_groups', 'HrHolidayGroupsController');
});
index.php
<tbody>
@foreach($groups as $key => $group)
<td>
{{$key+1}}
</td>
<td>
{{$group->group_name ?? '' }}
</td>
<td>
{{ $group->description ?? '' }}
</td>
<td>
@can('holiday_group_show')
<a class="btn btn-xs btn-primary" href="{{ route('hr.holiday_groups.show', $group->id) }}">
{ trans('global.view') }}
</a>
@endcan
@can('holiday_group_edit')
<a class="btn btn-xs btn-info" href="{{ route('hr.holiday_groups.edit', $group->id) }}">
{{ trans('global.edit') }}
</a>
@endcan
@can('holiday_group_delete')
<a class="btn btn-xs btn-danger" data-toggle="modal" data-target="#confirm-delete{{ $group->id }}" data-original-title="Close">
span style="color:white;">{{ trans('global.delete') }}</span>
</a>
@endcan
<div class="modal fade" id="confirm-delete{{ $group->id }}" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">Delete Holiday Group</h4>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<form action="{{route('hr.holiday_groups.destroy',['id'=>$group->id])}}" method="post">
{{ csrf_field() }}
<p>Are you sure you want to delete this Holiday Group?</p>
<div class="modal-header">
<h4>{{ $group->group_name }}</h4>
</div>
</form>
</div>
<div class="modal-footer justify-content-between">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="submit" class="btn btn-danger">Delete</button>
</div>
</div>
<!-- /.modal-content -->
</div>
<!-- /.modal-dialog -->
</div>
<!-- /.modal -->
</td>
</tr>
@endforeach
</tbody>
I started using Laravel about five months ago, and I need to complete this project in a short time. The problem I have is that, when I click on save button in the edit/update form I got this error:
The PUT method is not supported for this route. Supported methods: GET, HEAD
Initially, the error was:
The POST method is not supported for this route.
This is the my code for the edit form:
edit.blade.php
<form action="{{route('hr.holiday_groups.edit', ['id'=>$group->id])}}" method="post" class="form-horizontal" enctype="multipart/form-data">
{{ csrf_field() }}
<input type="hidden" name="_method" value="PUT">
<div class="form-body">
<div class="row">
<div class="col-md-6">
<div class="form-group row">
<label class="control-label text-right col-md-3">Group Name<span style="color:red;">*</span></label>
<div class="col-md-9 controls">
<input type="text" name="group_name" placeholder="Enter group name here" class="form-control" value="{{old('group_name',$group->group_name)}}" required data-validation-required-message="This field is required">
</div>
</div>
</div>
<!--/span-->
<div class="col-md-6">
<div class="form-group row">
<label class="control-label text-right col-md-3">Description</label>
<div class="col-md-9">
<textarea rows="2" name="description" class="form-control" placeholder="Enter Description here" value="{{old('description',$group->description)}}">{{old('description',$group->group_name)}}</textarea>
</div>
</div>
</div>
</div>
</div>
<div>
<!--<input class="btn btn-primary" type="submit" value="{{ trans('global.save') }}">-->
<button type="submit" class="btn btn-primary">{{ trans('global.save') }}</button>
<button type="button" onclick="window.location.href='{{route('hr.holiday_groups.index')}}'" class="btn btn-default">Cancel</button>
</div>
</form>
I added @method('PUT') to the code, but the error is still there. How do I resolve this issue?
Thank you
Upvotes: 0
Views: 2114
Reputation: 50491
The edit
route is for showing the edit form. It isn't for processing it; that would be what update
is for. Send you form to:
route('hr.holiday_groups.update', ['holiday_group' => $group->id])
Upvotes: 1