2017-01-11 1 views
1

으로 모델을 동적으로 확장하면 정적 메서드로 다른 플러그인의 모델을 동적으로 확장해야합니다. 나는 그것을 어떻게하는지 모른다. 내 플러그인에서 내가 개발 한 플러그인에서 동적 메서드

, 내가 jiri_jkshop_products 테이블에서 지리산/JKShop/모델/제품

에서 상속 과정 세션 개체가, 나는 is_course 필드를 추가했습니다.

if (\Jiri\JKShop\Models\Product::isCourse($productJson["product_id"])) { 
    $product = \PluginAuthor\PluginName\Models\Session::find($productJson["product_id"]); 
} else { 
    $product = \Jiri\JKShop\Models\Product::find($productJson["product_id"]); 
} 

, 어떻게 동적으로 플러그인에서 제품 모델에 정적 메서드를 추가하십시오 : 그것은 다음과 같은 방법으로 코스 제품인지 아닌지

제품 객체를 생성하기 전에, 내가 알고 싶습니다 내 플러그인의 .php 파일?

나는 당신이 더있는 경우에, 나는

나는 당신이의 확장 특성과이를 달성 할 수 있다고 생각, 사전 & 관해서 패트릭

+0

당신은'__callStatic()'마법 방법을 보셨습니까? 이 메서드는 실제로 프로 그램 방식으로 설정되어 있지 않은 개체에서 정적 메서드를 호출하면 호출됩니다. 더 많은 정보는 여기 : http://php.net/manual/en/language.oop5.overloading.php#object.callstatic –

+0

Denis, 그 좋은 기능이지만 내 목적은 제품 모델을 직접 수정하지 않는 것입니다. (나는 그것을 원합니다. 그의 무결성을 유지)하지만 내 plugin.php 부팅 기능에서 dynamicaly –

답변

0

감사합니다 너무 받아,이 아이디어는 우아한 코드에 대응 희망 당신의 플러그인의 부팅 방법.

당신은 항상 그 같은 인스턴스를 얻을 수있는 싱글을 등록 laravel 컨테이너를 이용할 수 있으며, 나는 그것이 좋은 방법

<?php 
class YourPlugin extends PluginBase 
{ 
    public function register() 
    { 
    $this->app->singleton('my.product', function() { 
     return new \Jiri\JKShop\Models\Product; 
    }); 
    } 

    public function boot() 
    { 
    \Jiri\JKShop\Models\Product:::extend(function ($product) { 
     $product->addDynamicMethod('isCourse', function ($course) use ($product) { 
      return $product->find($course)->is_course; 
     }); 
    }); 
    } 
} 

생각 그리고 당신은 당신의 플러그인에 원하는 목적지 이제 새가 동적으로 추가 사용할 수 있습니다 메서드

+0

감사합니다 OSdev, 좋은 방법이지만, 당신은 is_course 필드를 테스트하는 제품 개체를 만들어야합니다. 그것은 작동하지만 나는 그것을 매우 우아하게 찾지 못한다. 나는 틀릴 수도있다. 즉, 먼저 필드를 테스트하기 위해 객체를 만든 다음 두 번째로 다시 만들거나 좋은 것을 만들 때 잊어 버리는 것을 의미합니다. 이것은 내가 먼저 한 것이지만 생각한 후에, is_course 메서드를 추가하는 것과 같은 방식으로 정적 메서드를 추가하는 아이디어를 발견했지만 정적입니다. 그러나 이것은 가능합니까? :-) –

+0

"나는 생각할 수 없다"하지만 싱글 톤 객체는 어떻습니까? 나는 내 대답을 편집 – OsDev

+0

솔직히 모르겠다 :-) –