2015-01-21 3 views
2

Laravel 설치에 장바구니 패키지를 추가했지만 클래스에 메소드를 추가해야합니다. 클래스를 직접 수정하면 최신 버전으로 업데이트 할 때 변경 사항을 덮어 씁니까? 그렇다면 향후 업데이트를 중단하지 않고 패키지를 수정하는 가장 좋은 방법은 무엇입니까?Laravel extends package class

도움 주셔서 감사합니다. -JB

답변

8

Laravel 5.0 패키지를 공급 업체 디렉토리에서 확장 할 수있는 일반적인 프로세스가 있는지 나는 알지 못합니다. 패키지마다 다를 수 있습니다. 그러나 그것을 말하면서, 나는 이것을 연장하기를 원할 때 똑같은 문제에 직면했다. cart. 그러나 나는 어떻게 든 그것을 관리했고 내가 따라야 할 단계는 아래에있다. 나는 그것이 약간의 암시를 줄 수 있기를 바란다.

  1. 패키지

    composer require "gloudemans/shoppingcart":"~1.3" 
    
  2. 디렉터리 만들기 app/Services/CartCartServiceProvider 디렉토리 app/Providers에서 만들 그것을

    <?php 
    
    namespace App\Services\Cart; 
    
    use Gloudemans\Shoppingcart\Cart; 
    
    class MyCart extends Cart 
    { 
    
    } 
    
  3. 아래에 새 클래스 MyCart를 설치,

    <?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. providers 배열

    'App\Providers\CartServiceProvider' 
    

    에 다음과 aliases 배열

    을에서 다음, app/Services/Cart 디렉토리에

    <?php 
    
    namespace App\Services\Cart; 
    
    use Illuminate\Support\Facades\Facade; 
    
    class MyCartFacade extends Facade { 
        protected static function getFacadeAccessor() { return 'mycart'; } 
    } 
    
  5. 추가 config/app.php에를 MyCartFacade 만들기

    'MyCart'  => 'App\Services\Cart\MyCartFacade' 
    

    그게 전부입니다. 이제 내 컨트롤러에서 다음 코드를 배치했습니다. addcontentCart 클래스의 메소드입니다.

    \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 클래스에서 그 기능을 넣어 기능을 재정의합니다.

좋은 점은 기본 패키지를 업데이트 할 수 있다는 것입니다.

도움이되기를 바랍니다.

관련 문제