【问题标题】:Controller didn't get more arguments laravel控制器没有得到更多参数 laravel
【发布时间】:2017-04-16 00:56:49
【问题描述】:

我正在尝试通过发布请求向控制器发送两个参数和一个请求。这是我发送参数的代码:

<form class="form-horizontal" name="form1"  method="post" action="{{ route('shipment_view', $uniqueid, $category_name) }}" role="form" enctype="multipart/form-data">

这是我发送参数的控制器:

    public function storeShipment(Request $request, $number, $category_name){

           $category = Category::where('category_name', $category_name)->first();
           $user = Auth::user();

           $item = new Item([

           'id' => $user->id,
           'category_id' => $category->id,
           'unq' => $number,
           'fullname' => $request->input('name'),
           ]);

           $item->save();
   }

但是当我打开视图时它给了我错误

ErrorException in NewShipmentController.php line 53:
Missing argument 3 for App\Http\Controllers\NewShipmentController::storeShipment()

更新:

我的路由功能:

Route::post('/ship/preview/{number}',[
   'uses' => 'Controllerr@storeShipment',
    'as' => 'shipment_view'
]);

有什么想法吗?

【问题讨论】:

  • 显示相同的路线
  • @kapil.dev 我用路由功能更新问题,你可以看到
  • 在您的路线中只有一个变量,而在函数中您传递的是 2 ,我认为这会导致问题

标签: laravel laravel-5


【解决方案1】:

用下面的替换你的路由函数

 Route::post('/ship/preview/{number}/{category_name}',[
   'uses' => 'Controllerr@storeShipment',
    'as' => 'shipment_view'
]);

希望这能解决您的问题。

【讨论】:

  • 是的,我知道,但是有什么方法可以只传递路由数字变量,因为我希望我的视图像 /ship/preview/{number},我不希望 /ship/预览/{number}/{category_name}
  • 这是不可能的,因为函数会期望得到 2 个参数,而它只得到一个
  • 不,你不能。如果可能,您可以在控制器中运行查询以通过数字查找 category_name
  • 如果你不想显示 cat_name 那么你可以通过表单传入,并从 $request 变量中访问它。
  • 另一种方法是使用加密来保护您的主要 ID,例如 url/1/2 或 url/3/4
【解决方案2】:

您可以通过自己请求获取所有参数但在此之前您如何定义路由

public function storeShipment(Request $request){

    $number = $request->number;
    $category_name = $request->number 
}

【讨论】:

    猜你喜欢
    • 2018-04-15
    • 1970-01-01
    • 2017-12-06
    • 1970-01-01
    • 1970-01-01
    • 2015-02-28
    • 1970-01-01
    • 2013-10-12
    • 2019-06-11
    相关资源
    最近更新 更多