【问题标题】:Pass Data Between Controllers in Laravel在 Laravel 中的控制器之间传递数据
【发布时间】: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


【解决方案1】:

这很简单,只需通过路由将产品 id 传递给其他控制器即可。 然后你可以在 order 控制器中做任何你想做的事情。

【讨论】:

    【解决方案2】:

    产品控制器:

    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);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-09
      • 2015-12-16
      • 2017-01-12
      • 2011-07-09
      相关资源
      最近更新 更多