我目前正在做一個關于不同型別的頭發顏色的網店,但我現在有一個問題。我正在開發一個按鈕,可以自動洗掉會話檔案中的一個產品。為此我使用了一個$request->session()->forget('cart');行。
我的控制器是這樣的:
public function index()
{
// Dit zorgt ervoor dat alle producten in het tabel Product-
// opgehaald worden en de variabele $products gezet worden。
$products = Product::all();
return view('winkelmand', compact('products'))。
}
/***。
* 顯示創建新資源的表單。
*
* @return void
*/
public function create()
{
return false;
}
/****.
*將新創建的資源存盤在存盤器中。
*
* @param IlluminateHttpRequest $request
* @return Application|Factory|View
*/
public function store(Request $request)
{
$product = Product::find($request-> id);
if (!$product) {
abort(404)。
}
$id = $request-> id;
$cart = session()->get('cart') 。
// Als het winkelwagendje leeg is, dan is it het eerste productif (!$cart) {
$cart = [!
$id => [
"name" => $product-> name,
"description" => $product-> description,
"price" => $product->price,
"數量" => 1
]
];
session()->put('cart', $cart) 。
return view('winkelmand')。
}
//Als het product al bestaat, dan de quantiteit verhogen met 1.
if (isset($cart[$id]) {
$cart[$id][' quantity'] ;
session()->put('cart', $cart) 。
return view('winkelmand')。
}
//Als het product niet bestaat dan toevoegen met quantiteit = 1.
$cart[$id] = [
"name" => $product-> name,
"price" => $product->price,
"description" => $product-> description,
"數量" => 1
];
session()->put('cart', $cart) 。
return view('winkelmand')。
}
/**。
* 顯示指定的資源。
*
* @param Request $request
* @param int $id
* @return Application|Factory|View
*/
public function show(Request $request, $id)
{
return false。
}
/***。
*顯示編輯指定資源的表單。
*
* @param int $id
* @return IlluminateHttpResponse
*/
public function edit($id)
{
return false;
}
/**。
*更新存盤中的指定資源。
*
* @param IlluminateHttpRequest $request
* // * @param int $id
* @return IlluminateHttpResponse
*/
public function update(Request $request)
{
if ($request->id && $request-> quantity) {
$cart = session()->get('cart') 。
$cart[$request->id][" quantity"] = $request-> quantity;
session()->put('cart', $cart) 。
session()->flash('success', 'Cart updated successfully')。
}
}
/**。
* 從存盤中洗掉指定的資源。
*
* // * @param int $id
* @return string
*/
public function destroy(Request $request)
{
//Deze functie moet ervoor zorgen dat er door middel van een knop de
// desbetreffende item verwijderd wordt uit het winkelwagentje.。
// Deze functie werkt alleen nog niet and wordt dus nebruikt in de webshop。
$request->session()->forget('cart') 。
dd('cart')。
return view('winkelmand')。
}
我使用一個表單和方法POST在HTML中添加了一個按鈕:
<td>
< form action="/winkelmand/{{ $id }}" method="POST">
@csrf
< input name="_method"/span> type="hidden" value="delete" />
< input type="submit" value="x" />
</form>
</td>
因此,它應該從會話中檢索一個特定的產品(從任何產品按鈕被按下),然后它應該從會話中忘記這個鍵。
有誰能幫我解決這個問題?
Ps. 抱歉我的詞匯量太大。
uj5u.com熱心網友回復:
你從未分享過問題是什么。它沒有作業嗎?根據你的代碼,我假設你得到的是perma 404.
一些提示:
- 不需要做
abort(404),你可以直接使用findOrFail($request->id)。 - 當你可以利用Implicit Binding的優勢時,不需要做
findOrFail。 。
- 不需要寫
<input name="_method" type="hidden" value="delete" />,你可以直接做@method('DELETE').
我假設你的問題是,你正在使用$request->id,但你從未發送id。你在URL中使用了id,但是為了使你的代碼發揮作用,你應該這樣做:
/**.
* 將新創建的資源存盤在倉庫中。
*
* @param IlluminateHttpRequest $request
* @return Application|Factory|View
*/
public function store(Request $request, $id)
{
$product = Product::findOrFail($id)。
記得把這部分代碼替換成我上面的代碼:
public function store(Request $request)
{
$product = Product::find($request-> id);
if (!$product) {
abort(404)。
}
$id = $request-> id;
這仍然是尋找產品的存在(沒有隨機的ids)。然后獲取cart,查找id是否存在于該cart中,并unset它(洗掉它),再次保存cart,然后完成。
public function destroy(Request $request, $id)
{
Product::findOrFail($id)。
$cart = session()->get('cart')。
if (isset($cart[$id]) {
unset($cart[$id] ) 。
session()->put('cart', $cart) 。
}
return view('winkelmand')。
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/319161.html
標籤:
