【问题标题】:Laravel passing multiple parameter to controllerLaravel 将多个参数传递给控制器
【发布时间】:2020-11-30 16:16:33
【问题描述】:

我想删除一张图片并返回到用户页面,所以我尝试将 2 个参数传递给我的控制器(我的用户 ID 和 image_id)。

但我得到了这个错误

函数 App\Http\Controllers\McuFormDocumentController::destroy() 的参数太少,通过了 1 个,预期正好有 2 个

我在刀片中的按钮代码

<button id="delete" class="btn btn-danger btn-sm" data-title="{{ $mcu_form_document['title'] }}"
        style="color: #fff; font-size: 1.2em;"
        href="{{ route('mcu-form-document.destroy', ['id'=>$id ,'img'=>$mcu_form_document['id']]) }}">
    Delete <i class="la la-trash" style="color: #fff; font-size: 1.2em;"></i>
</button>

<form action="{{ route('mcu-form-document.destroy', ['id'=>$id ,'img'=>$mcu_form_document['id']]) }}" method="post" id="deleteForm">
    {{ csrf_field() }}
    {{ method_field('DELETE') }}

    <input type="submit" value="" style="display:none;">
</form>

我的控制器

public function destroy($id,$img_id)
{
    $mcu_form_document = McuFormDocument::find($img_id);
    $mcu_form_document->delete();

    return redirect()
        ->route('mcu.resume.list', ['id' => $id])
        ->with('success', 'Document has been successfully deleted!');
}

我的路线

    Route::resource('mcu-resume', 'McuResumeController');

【问题讨论】:

  • 检查您的路线php artisan route:list 资源不会使用超过 1 个参数创建任何路线
  • 是的,你能告诉我更多该怎么做吗?
  • 你必须自己定义一个带有 2 个参数的路由……但是为什么你需要传递你的 'user_id' 呢?
  • 我需要 user_id 路由回该用户编辑页面
  • 您要么需要将其创建为嵌套资源,要么创建您自己的带有 2 个参数的删除路由

标签: laravel controller parameter-passing


【解决方案1】:

我的解决方案是在 href 中传递参数时使用连接

 href="{{ route('mcu-form-document.destroy', $id .'|'.$mcu_form_document['id']) }}"

并在我的控制器中使用 preg_split 进行拆分

    public function destroy($params)
    {
    $str_arr = preg_split("/\|/", $params);
    $id = $str_arr[0];
    $img_id = $str_arr[1];
    // dd($id . "-" . $img_id);
    }

希望这对其他人有所帮助..谢谢所有的帮助

【讨论】:

    【解决方案2】:

    或者您也可以在控制器中添加请求参数,使您能够传递多个数据并获取所需的值,如下所示:

    use Illuminate\Http\Request;
    
    public function destroy(Request $request)
    {
       $id = $request->get('id');
       $image_id = $request->get('img');
       $mcu_form_document = McuFormDocument::find($image_id);
       $mcu_form_document->delete();
    
       return redirect()
        ->route('mcu.resume.list', ['id' => $id])
        ->with('success', 'Document has been successfully deleted!');
     }
    
    
     //web.php
     Route::delete('mcu-resume-destroy', 'McuResumeController@destroy');
    

    【讨论】:

    • $id 为空
    • 你可以尝试使用 action('McuFormDocumentController@destroy', [ 'id' => $id, 'img'=>$mcu_form_document['id'] ]) 应该与 route()也是。
    猜你喜欢
    • 2015-10-19
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    • 2017-01-12
    • 1970-01-01
    • 2015-10-11
    相关资源
    最近更新 更多