2 个按钮使用 Laravel 在具有相同路由的同一控制器中访问不同的方法
2 button accessing different method in the same controller with the same route using Laravel
我的 blade 中有 2 个按钮。我想用它们更新相同的数据库列,当我单击按钮 1 时,它将列更新为 1,当我单击第二个按钮时,它将列更新为 2。我使用相同的路径来执行此操作,因为我必须将 "id" 从视图传递到控制器。
视图中的按钮:
{!! Form::open(['method' => 'GET', 'route' => ['show.approve_notification_application', $userdetail->id], 'style'=>'display:inline']) !!}
{!! Form::submit('Accpet', ['class' => 'btn btn-success']) !!}
{!! Form::close() !!}
{!! Form::open(['method' => 'GET', 'route' => ['show.approve_notification_application', $userdetail->id], 'style'=>'display:inline']) !!}
{!! Form::submit('Send to Super Admin', ['class' => 'btn btn-success']) !!}
{!! Form::close() !!}
路线
Route::get('/notification_list/notification_application/{notification_id}', 'AdminController@approveNotification')->name('show.approve_notification_application');
Route::get('/notification_list/notification_application/{notification_id}', 'AdminController@sendNotificationToSuperAdmin')->name('show.approve_notification_application');
控制器
public function approveNotification($id){
$notification = Notification::find($id);
$notification->approved = '2';
$notification->save();
return redirect()->route('admin.notification_list');
}
public function sendNotificationToSuperAdmin($id){
$notification = Notification::find($id);
$notification->approved = '1';
$notification->save();
return redirect()->route('admin.notification_list');
}
我不知道该怎么做。当我点击任何按钮时,似乎只有第二条路线有效,这意味着无论我点击哪个按钮,它总是将 table 更新为值 1.
您遇到问题的原因:
在路由文件中 - 你调用了 2 个具有相同名称的方法 - 这就是它到达第二条路由的原因(第二个名称覆盖第一个);
如何解决?
首先 - 删除其中一条路线。
然后 - 在您的表单中添加一个隐藏字段,这样您以后就可以知道单击了哪个按钮
之后 - 您需要在控制器中添加一个 IF - 根据 $id
像这样:
if ($yourHiddenField == 1) {
... your code here...
} elseif ($yourHiddenField == 2 ) {
... your code here ...
}
(需要先获取隐藏字段的值)
那是因为你不能设置两个或多个具有相同URL和方法类型的路由。您可以将 URL 与 Route:get('hi')
和 Route::post('hi')
.
等其他类型一起使用
回到你的问题,你可以这样做:
按钮
{!! Form::open(['method' => 'GET', 'route' => ['show.approve_notification_application', $userdetail->id], 'style'=>'display:inline']) !!}
{!! Form::hidden('type', 0) !!}
{!! Form::submit('Accpet', ['class' => 'btn btn-success']) !!}
{!! Form::close() !!}
{!! Form::open(['method' => 'GET', 'route' => ['show.approve_notification_application', $userdetail->id], 'style'=>'display:inline']) !!}
{!! Form::hidden('type', 1) !!}
{!! Form::submit('Send to Super Admin', ['class' => 'btn btn-success']) !!}
{!! Form::close() !!}
控制器
public function approveNotification(Request $request, $id){
$notification = Notification::find($id);
$notification->approved = $request->input('type') == 1 ? 1 : 2;
$notification->save();
return redirect()->route('admin.notification_list');
}
不要忘记在文件顶部的命名空间后插入 use Illuminate\Http\Request
。
路线
保留第一个,删除第二个。
我的 blade 中有 2 个按钮。我想用它们更新相同的数据库列,当我单击按钮 1 时,它将列更新为 1,当我单击第二个按钮时,它将列更新为 2。我使用相同的路径来执行此操作,因为我必须将 "id" 从视图传递到控制器。
视图中的按钮:
{!! Form::open(['method' => 'GET', 'route' => ['show.approve_notification_application', $userdetail->id], 'style'=>'display:inline']) !!}
{!! Form::submit('Accpet', ['class' => 'btn btn-success']) !!}
{!! Form::close() !!}
{!! Form::open(['method' => 'GET', 'route' => ['show.approve_notification_application', $userdetail->id], 'style'=>'display:inline']) !!}
{!! Form::submit('Send to Super Admin', ['class' => 'btn btn-success']) !!}
{!! Form::close() !!}
路线
Route::get('/notification_list/notification_application/{notification_id}', 'AdminController@approveNotification')->name('show.approve_notification_application');
Route::get('/notification_list/notification_application/{notification_id}', 'AdminController@sendNotificationToSuperAdmin')->name('show.approve_notification_application');
控制器
public function approveNotification($id){
$notification = Notification::find($id);
$notification->approved = '2';
$notification->save();
return redirect()->route('admin.notification_list');
}
public function sendNotificationToSuperAdmin($id){
$notification = Notification::find($id);
$notification->approved = '1';
$notification->save();
return redirect()->route('admin.notification_list');
}
我不知道该怎么做。当我点击任何按钮时,似乎只有第二条路线有效,这意味着无论我点击哪个按钮,它总是将 table 更新为值 1.
您遇到问题的原因:
在路由文件中 - 你调用了 2 个具有相同名称的方法 - 这就是它到达第二条路由的原因(第二个名称覆盖第一个);
如何解决?
首先 - 删除其中一条路线。
然后 - 在您的表单中添加一个隐藏字段,这样您以后就可以知道单击了哪个按钮
之后 - 您需要在控制器中添加一个 IF - 根据 $id 像这样:
if ($yourHiddenField == 1) {
... your code here...
} elseif ($yourHiddenField == 2 ) {
... your code here ...
}
(需要先获取隐藏字段的值)
那是因为你不能设置两个或多个具有相同URL和方法类型的路由。您可以将 URL 与 Route:get('hi')
和 Route::post('hi')
.
回到你的问题,你可以这样做:
按钮
{!! Form::open(['method' => 'GET', 'route' => ['show.approve_notification_application', $userdetail->id], 'style'=>'display:inline']) !!}
{!! Form::hidden('type', 0) !!}
{!! Form::submit('Accpet', ['class' => 'btn btn-success']) !!}
{!! Form::close() !!}
{!! Form::open(['method' => 'GET', 'route' => ['show.approve_notification_application', $userdetail->id], 'style'=>'display:inline']) !!}
{!! Form::hidden('type', 1) !!}
{!! Form::submit('Send to Super Admin', ['class' => 'btn btn-success']) !!}
{!! Form::close() !!}
控制器
public function approveNotification(Request $request, $id){
$notification = Notification::find($id);
$notification->approved = $request->input('type') == 1 ? 1 : 2;
$notification->save();
return redirect()->route('admin.notification_list');
}
不要忘记在文件顶部的命名空间后插入 use Illuminate\Http\Request
。
路线
保留第一个,删除第二个。