【发布时间】:2020-10-12 20:00:25
【问题描述】:
我在我的 Laravel 网站上有一个视图,其中显示了一些产品。当用户点击一个产品时,他们会被带到那个特定的产品页面。在每个特定的产品页面上,都有一个“订购”按钮。当用户单击“订购”按钮时,他们将被带到仅针对他们单击“订购”按钮的特定产品的结帐页面。下面的控制器处理显示所有产品和单个产品。
产品控制器:
public function index()
{
$products = Product::get();
return view('products.products')->with('products', $products);
}
public function show($slug)
{
$product = Product::where('slug', $slug)->firstOrFail();
return view('products.product')->with('product', $product);
}
路线:
Route::get('products', 'ProductController@index')->name('products');
Route::get('products/{product}', 'ProductController@show')->name('product');
Route::get('order', 'OrderController@create')->name('order')->middleware('verified');
Route::post('order', 'OrderController@order')->name('order');
我有一个单独的控制器来处理订单页面。如何将特定产品的数据传递到订单控制器/视图中?
【问题讨论】:
-
对于 Stackoverflow 的当前形式,这可能是一个过于宽泛的问题。您需要研究 Sessions 的工作方式(在页面之间保留数据)、购物车系统等;电子商务的所有主要内容。
-
我不想使用购物车系统,因为我的网站不像普通的电子商务网站那样工作。用户一次只能为一种产品下一个订单。我只是想知道如何在 2 个控制器之间传递单个变量。
-
哦,好吧,没那么糟糕。我认为您可能仍会使用 Session;当您登陆
products/{product}时,将该产品设置在会话中(如session()->put('orderProduct', $product);,然后当您登陆order时,引用它:session()->get('orderProduct');。这是该方法的概述,可以在此处找到更多信息:@ 987654321@ -
是的,我调查过了,虽然我不确定这是正确的做法。但是,既然您已经推荐了会话,我将尝试实现它的使用。你确定没有更简单的方法吗?
-
是的,可以说将
session()用于单个产品有点多余。您始终可以直接在 URL 中引用产品,例如/order/product/{product},但我想说任何一种方式都可以。
标签: php laravel model-view-controller controller global-variables