我們可以利用內部 Routing 機制,不用真的發 HTTP request,就可以達到類似的效果了。
以下這段程式情境如下:
- 我們的顯示購物車頁面,有一個參數是欲加入的商品代號。如果這個參數有值,會先將此商品加入購物車以後才出現商品清單畫面,使用者從這個畫面開始結帳流程。
- 在此之前,我們的使用者是利用一隻 AJAX API 來將商品加入購物車。
public function getCheckoutForm(Request $request) {
$productId = $request->input('product_id', null);
if(!empty($productId)) {
// http://stackoverflow.com/questions/16597420/how-can-i-access-query-string-parameters-for-requests-ive-manually-dispatched-i
$rr = Request::create(route('post.ajax.addcart'), 'POST', ['product_id' => $productId, '_token' => csrf_token()]);
// Store the original input of the request and then replace the input with your request instances input.
$originalInput = $request->input();
$request->replace($rr->input());
$response = Route::dispatch($rr);
$request->replace($originalInput);
}
// getCheckoutForm() business logic
}
在這裡我們可以看到
- 我們先建立新的 Request 物件 $rr。
- 然後備份目前的 request input
- 將目前的 request input 置換成 $rr 的 input
- 利用 Route::dispatch() 產生 Request call
- 呼叫完畢以後再把目前 request input 換回來
沒有留言:
張貼留言