2014-12-23 3 views
3

네임 스페이스에 문제가있어 사용하고 있습니다.PHP Laravel : 특성을 찾을 수 없습니다.

namespace Billing\BillingInterface; 

interface BillingInterface 
{ 
    public function charge($data); 
    public function subscribe($data); 
    public function cancel($data); 
    public function resume($data); 
} 

PaymentController.php

Billing.php :

다음은 내 Laravel 응용 프로그램에서 파일을 수 있습니다 "을 (를) 찾을 수 없습니다 형질 '결제 \의 BillingInterface'"

나는이 오류

use Billing\BillingInterface; 

class PaymentsController extends BaseController 
{ 
    use BillingInterface; 

    public function __construct(BillingPlatform $BillingProvider) 
    { 
     $this->BillingProvider = $BillingProvider; 
    } 
} 

사용 및 네임 스페이스를 올바르게 사용하는 방법은 무엇입니까?

답변

5

interface이 아니며, trait이 아닙니다. 따라서 비 존재의 특성 또한

을 찾을 수 없습니다 당신은 Billing\BillingInterface라는 네임 스페이스에 BillingInterface라는 인터페이스, 인터페이스의 완전한 이름은 한 :

은 아마 당신이 무슨 뜻 \Billing\BillingInterface\BillingInterface

use Billing\BillingInterface\BillingInterface; 
// I am not sure what namespace BillingPlatform is in, 
// just assuming it's in Billing. 
use Billing\BillingPlatform; 

class PaymentsController extends BaseController implements BillingInterface 
{ 
    public function __construct(BillingPlatform $BillingProvider) 
    { 
     $this->BillingProvider = $BillingProvider; 
    } 

    // Implement BillingInterface methods 
} 

또는 특성으로 사용하십시오.

namespace Billing; 

trait BillingTrait 
{ 
    public function charge($data) { /* ... */ } 
    public function subscribe($data) { /* ... */ } 
    public function cancel($data) { /* ... */ } 
    public function resume($data) { /* ... */ } 
} 

는 다시 PaymentsController을 수정하지만, 함께 완전히 이름을 자격.

class PaymentsController extends BaseController 
{ 
    // use the fully qualified name 
    use \Billing\BillingTrait; 

    // I am not sure what namespace BillingPlatform is in, 
    // just assuming it's in billing. 
    public function __construct(
     \Billing\BillingPlatform $BillingProvider 
    ) { 
     $this->BillingProvider = $BillingProvider; 
    } 
} 
+0

컨트롤러에 구현하고 싶지 않습니다. – andershagbard

+0

@andershagbard 그러면 BillingInterface의 메소드를 구현하는 특성을 만들어야합니다. 그러나 특성은 PHP에서 타입이 아니며 iterface를 구현할 수 없기 때문에'PaymentsController'에서 타입 계층을 잃을 것이므로'BillingInterface'가 아닙니다. 대신 가장 좋은 방법은 과금을 처리 할 수있는 객체를 컨트롤러에 주입하는 것입니다. 아마 그것이 'BillingPlatform'의 핵심이지만 확실하지 않습니다. – robbmj

+0

내 구성 기능에서 내가하는 일이 아닌가요? – andershagbard

관련 문제