我在Laravel安装中添加了一个购物车包,但我需要在课程中添加一个方法。如果我直接修改类,当我更新到更新的版本时,我的更改是否会被覆盖?如果是这样,在不破坏未来更新的情况下,修改包的最佳方法是什么?
感谢您的帮助! -JB
答案 0 :(得分:10)
我不知道是否有任何一般流程可以从供应商目录扩展Laravel 5.0软件包,我相信不同的软件包可能会有所不同。但是说,当我想扩展这个cart时,我遇到了同样的问题。但我以某种方式管理它,我遵循的步骤如下。我希望它可以给出一些暗示。
安装包
composer require "gloudemans/shoppingcart":"~1.3"
在其下创建目录app/Services/Cart
和新类MyCart
<?php
namespace App\Services\Cart;
use Gloudemans\Shoppingcart\Cart;
class MyCart extends Cart
{
}
在CartServiceProvider
目录下创建app/Providers
,
<?php namespace App\Providers;
use App\Services\Cart\MyCart;
use Illuminate\Support\ServiceProvider;
class CartServiceProvider extends ServiceProvider {
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
//
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
$this->app['mycart'] = $this->app->share(function($app)
{
$session = $app['session'];
$events = $app['events'];
return new MyCart($session, $events);
});
}
}
在MyCartFacade
目录下创建app/Services/Cart
<?php
namespace App\Services\Cart;
use Illuminate\Support\Facades\Facade;
class MyCartFacade extends Facade {
protected static function getFacadeAccessor() { return 'mycart'; }
}
config/app.php
中添加以下providers
数组中的
'App\Providers\CartServiceProvider'
并在aliases
数组
'MyCart' => 'App\Services\Cart\MyCartFacade'
那就是它。现在在我的控制器中我放置了以下代码。 add
和content
是基础Cart
类中的方法。
\MyCart::add('293ad', 'Product 1', 1, 9.99, array('size' => 'large'));
echo '<pre>';
print_r(\MyCart::content());
exit();
以下是输出,
Gloudemans\Shoppingcart\CartCollection Object
(
[items:protected] => Array
(
[0f6524cc3c576d484150599b3682251c] => Gloudemans\Shoppingcart\CartRowCollection Object
(
[associatedModel:protected] =>
[associatedModelNamespace:protected] =>
[items:protected] => Array
(
[rowid] => 0f6524cc3c576d484150599b3682251c
[id] => 293ad
[name] => Product 1
[qty] => 1
[price] => 9.99
[options] => Gloudemans\Shoppingcart\CartRowOptionsCollection Object
(
[items:protected] => Array
(
[size] => large
)
)
[subtotal] => 9.99
)
)
)
)
现在,如果您想添加或覆盖功能,只需将该功能放入MyCart
类。
好消息是,您可以更新基础包。
我希望它有所帮助。