我正在使用购物车系统(\ Gloudemans \ Shoppingcart),但我想覆盖默认的total()方法:
namespace Gloudemans\Shoppingcart;
/**
* Get the total price of the items in the cart.
*
* @param int $decimals
* @param string $decimalPoint
* @param string $thousandSeperator
* @return string
*/
public function total($decimals = null, $decimalPoint = null, $thousandSeperator = null)
{
$content = $this->getContent();
$total = $content->reduce(function ($total, CartItem $cartItem) {
return $total + ($cartItem->qty * $cartItem->priceTax);
}, 0);
return $this->numberFormat($total, $decimals, $decimalPoint, $thousandSeperator);
}
我的扩展名:
namespace App\Http\Controllers;
use Gloudemans\Shoppingcart\Facades\Cart;
use \Illuminate\Http\Request;
class CartController extends Cart
{
function __construct() {
}
public function total($decimals = null, $decimalPoint = null, $thousandSeperator = null) {
$content = $this->getContent();
$total = $content->reduce(function ($total, CartItem $cartItem) {
return $total + ($cartItem->qty * $cartItem->priceTax);
}, 0);
$currency = new Currency();
$currency_id = $currency->where('code', session()->get('currency'))->first()->id;
$rate = CurrencyRate::where('currency_id', $currency_id)->latest()->first()->rate;
return $this->numberFormat($total*$rate, $decimals, $decimalPoint, $thousandSeperator);
}
}
但是我不知道如何访问它,这就是我访问默认方法的方法:
...
<span id="cart_total" class="btn btn-default"><i class="fa fa-shopping-cart" aria-hidden="true"></i>
{{$symbol}} {{\Gloudemans\Shoppingcart\Facades\Cart::total()}}</span>
...
上面的正面是:
namespace Gloudemans\Shoppingcart\Facades;
use Illuminate\Support\Facades\Facade;
class Cart extends Facade {
/**
* Get the registered name of the component.
*
* @return string
*/
protected static function getFacadeAccessor()
{
return 'cart';
}
}
显然以下不起作用:
{{\App\Http\Controllers\CartController::total()}}
以下是我正在使用的购物车系统的链接:
答案 0 :(得分:0)
您必须拥有一个覆盖默认功能的专用类。
class myCart extends Cart {
public function total($decimals = null ....
}
现在,如果您可以创建myCart的新实例并使用它来计算总数
var obj = new myCart();
obj->total();
如果需要,您可以为myCart类创建fascade并使用它。
答案 1 :(得分:0)
在立面中执行以下操作:
Facade::something();
是
的快捷方式app()->make(Facade::getFacadeAccessor())->something();
因此,您需要通过制作&#34; cart&#34;来扩展返回的课程。并覆盖那里的total
方法。
E.g。假设:
class Cart {
//...
public function total() {}
}
class MyCart extends Cart {
//...
//Your total:
public function total() {}
}
注意:此处的第一个购物车不是外观,而是外观返回的实际类。
然后你需要重新绑定它。要做到这一点,你需要确保你有一个服务提供商,它在第一次绑定后运行,然后:
public function handle() {
$this->app->bind("cart", function ($app) { return new MyCart(); });
}
不应该超越立面。