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

路线

保留第一个,删除第二个。