Laravel расширить класс пакета

Я добавил пакет корзины к моей установке Laravel, но мне нужно добавить метод в класс. Если я модифицирую класс напрямую, мои изменения будут перезаписаны при обновлении до более новой версии? Если да, то какой лучший способ для изменения пакета, не нарушая будущих обновлений?

Спасибо за помощь! -JB

Я не знаю, есть ли какой-либо общий процесс для расширения пакета Laravel 5.0 из каталога поставщика, и я уверен, что это может быть различным для разных пакетов. Но, сказав это, я столкнулся с той же проблемой, когда хотел продлить эту тележку . Но мне это удалось, и шаги, которые я последовал, ниже. Надеюсь, это может дать какой-то намек.

  1. Установка пакета

    composer require "gloudemans/shoppingcart":"~1.3" 
  2. Создайте app/Services/Cart каталога app/Services/Cart и новый класс MyCart под ним

     <?php namespace App\Services\Cart; use Gloudemans\Shoppingcart\Cart; class MyCart extends Cart { } 
  3. создайте 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); }); } 

    }

  4. Создайте MyCartFacade app/Services/Cart MyCartFacade ,

     <?php namespace App\Services\Cart; use Illuminate\Support\Facades\Facade; class MyCartFacade extends Facade { protected static function getFacadeAccessor() { return 'mycart'; } } 
  5. в 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 .

Хорошо, вы можете обновить базовый пакет.

Я надеюсь, что это помогает.