如何将参数传递给Laravel包中的控制器操作?

时间:2016-01-28 20:28:01

标签: php laravel package laravel-5.1 laravel-routing

在我制作的Laravel包中,我想将用户重定向到需要参数的控制器操作(在同一个包中)。

控制器:

public function postMatchItem(Request $request, $id)
{
    $this->validate($request, [
        'item_match' => 'required|numeric|exists:item,id',
    ]);

    $spot_buy_item = SpotBuyItem::find($id);

    $item = Item::find($request->input('item_match'));

    $price = $item->getPrice();

    $spot_buy_item_response = new SpotBuyItemResponse();
    $spot_buy_item_response->spot_buy_item_id = $id;
    $spot_buy_item_response->spot_buy_id = $spot_buy_item->spot_buy_id;
    $spot_buy_item_response->item_id = $item->id;
    $spot_buy_item_response->user_id = $spot_buy_item->user_id;
    $spot_buy_item_response->spot_buy_price = $price;
    $spot_buy_item_response->created_ts = Carbon::now();
    $spot_buy_item_response->save();

    return redirect()->action('Ariel\SpotBuy\Http\Controllers\Admin\SpotBuyController@getPart', [$id]);
}

重定向中的操作与我在routes.php文件中使用的路径相同,以指导用户执行此控制器操作

路线:

Route::get('/part/{id}', 'Ariel\SpotBuy\Http\Controllers\Admin\SpotBuyController@getPart')->where('id', '[0-9]+');

我尝试过这条路径的变体而没有成功,包括文档建议的SpotBuyController@getParthttps://laravel.com/docs/5.1/responses#redirects

注意:我通过在routes.php中命名我的路由并使用return redirect()->route('route_name', [$id]);来实现此目的,但我仍然想知道如何将包控制器操作传递给->action()功能。

1 个答案:

答案 0 :(得分:5)

它试图从App\Http\Controllers命名空间内访问您的控制器。可以看到他们已在错误中将其添加到您的控制器名称中:

App\Http\Controllers\Ariel\SpotBuy\Http\Controllers\Admin\SpotBuyController@getP‌​art

您需要在开头使用Ariel转义\命名空间:

return redirect()->action('\Ariel\SpotBuy\Http\Controllers\Admin\SpotBuyController@getPart', [$id]);