douquanzhan0315 2017-05-23 12:21
浏览 25

一个门面后面的多个班级

Facade

namespace App\Webshop\Facades;

use Illuminate\Support\Facades\Facade;

class Webshop extends Facade
{
    /**
     * @return string
     */
    protected static function getFacadeAccessor()
    {
        return \App\Webshop\Webshop::class;
    }
}

ServiceProvider

namespace App\Webshop;

use Illuminate\Support\ServiceProvider;

class WebshopServiceProvider extends ServiceProvider
{
    /**
     * @return void
     */
    public function register()
    {
        $this->app->bind(\App\Webshop\Webshop::class, function() {
            return new Webshop(new Cart(), new Checkout());
        });

        // or

        $this->app->singleton(\App\Webshop\Webshop::class, function() {
            return new Webshop(new Cart(), new Checkout());
        });
    }
}

Webshop

namespace App\Webshop;

class Webshop
{
    /**
     * @var Cart $cart
     */
    private $cart;

    /**
     * @var Checkout $checkout
     */
    private $checkout;

    public function __construct(Cart $cart, Checkout $checkout)
    {
        $this->cart = $cart;
        $this->checkout = $checkout;
    }

    /**
     * @return Cart
     */
    public function cart()
    {
        return $this->cart;
    }

    /**
     * @return Checkout
     */
    public function checkout()
    {
        return $this->checkout;
    }
}

When i run:

Route::get('test1', function () {
    Webshop::cart()->add(1); // Product id
    Webshop::cart()->add(2); // Product id

    dd(Webshop::cart()->totalPrice());
});

It dumps "24.98" (a price calculation)

But when i run:

Route::get('test2', function () {
    dd(Webshop::cart()->totalPrice());
}); 

It shows me "0"

I think the problem is in the ServiceProvider, because when it registers it creates new objects of Cart and Checkout

How can i fix this issue?

  • 写回答

1条回答 默认 最新

  • dongxuan8227 2017-05-23 12:46
    关注

    Edit : Apart from using a singleton, you're code never persists the cart information to a session or database. PHP does not persist objects after script execution. You need to design your cart to persist the information.

    You need a singleton for this. Change $this->app->bind to $this->app->singleton in your service provider. http://www.phptherightway.com/pages/Design-Patterns.html

    Laravel does this for your and all you need to do is to bind it as a singleton in the service provider.

    评论

报告相同问题?

悬赏问题

  • ¥15 请分析一下这个电路设计的优点🙏
  • ¥15 求视频摘要youtube和ovp数据集
  • ¥15 怎么改成输入一个要删除的数后现实剩余的数再输入一个删除的数再现实剩余的数用yes表示继续no结束程序
  • ¥15 在启动roslaunch时出现如下问题
  • ¥15 汇编语言实现加减法计算器的功能
  • ¥20 关于多单片机模块化的一些问题
  • ¥30 seata使用出现报错,其他服务找不到seata
  • ¥35 引用csv数据文件(4列1800行),通过高斯-赛德尔法拟合曲线,在选取(每五十点取1点)数据,求该数据点的曲率中心。
  • ¥20 程序只发送0X01,串口助手显示不正确,配置看了没有问题115200-8-1-no,如何解决?
  • ¥15 Google speech command 数据集获取