Php 在Laravel中的控制器之间传递数据

Php 在Laravel中的控制器之间传递数据,php,laravel,model-view-controller,controller,global-variables,Php,Laravel,Model View Controller,Controller,Global Variables,我在我的Laravel网站上看到了一些产品。当用户单击某个产品时,他们会被带到该特定的产品页面。在每个特定的产品页面上,都有一个订单按钮。当用户单击“订单”按钮时,他们将被带到仅针对特定产品的签出页面,在该页面中他们单击了“订单”按钮。下面的控制器显示所有产品和单个产品 产品控制器: public function index() { $products = Product::get(); return view('products.products')

我在我的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);
    }
public function show($slug)
    {
        $product= Product::where('slug', $slug)->firstOrFail();
        Session::put('product', $product);

        return view('products.product')->with('product', $product);
    }
public function create()
    {
        $product = Session::get('product');
        
        return view('user.order')->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');

我有一个单独的控制器来处理订单页面。如何将特定产品的数据传递到订单控制器/视图?

这非常简单,只需通过路由将产品id传递给其他控制器即可。 然后,您可以根据订单控制器执行任何操作。

ProductController:

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);
    }
public function show($slug)
    {
        $product= Product::where('slug', $slug)->firstOrFail();
        Session::put('product', $product);

        return view('products.product')->with('product', $product);
    }
public function create()
    {
        $product = Session::get('product');
        
        return view('user.order')->with('product', $product);
    }
订单管理员:

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);
    }
public function show($slug)
    {
        $product= Product::where('slug', $slug)->firstOrFail();
        Session::put('product', $product);

        return view('products.product')->with('product', $product);
    }
public function create()
    {
        $product = Session::get('product');
        
        return view('user.order')->with('product', $product);
    }

对于Stackoverflow来说,这可能是一个过于宽泛的问题。您需要了解会话如何在页面、购物车系统等之间持久化数据;我不想使用购物车系统,因为我的网站和普通的电子商务网站不一样。用户一次只能为一种产品下一个订单。我只是想知道如何在两个控制器之间传递一个变量。哦,好吧,这没那么糟糕。我认为你可能仍然会使用会话;在products/{product}上着陆时,在会话中设置该产品,如会话->放置'orderProduct',$product;,然后,当您按订单着陆时,引用它:session->get'orderProduct';。这是该方法的概述,更多信息可以在这里找到:是的,我对此进行了研究,尽管我不确定这是正确的方法。但是,既然您已经推荐了session,我将尝试使用它。你确定没有更简单的方法可以做到这一点吗?是的,可以提出一个论点,即对单个产品使用会话有点多余。您可以在URL中直接引用产品,如/order/product/{product},但我认为任何一种方式都可以。