2014-09-23 4 views
0

Я работаю с Laravel 4.2, вызывая поток платежей между отправкой формы и ответом контроллера. Если платеж будет принят, куча работы делается за сценой классом PaymentProcessorПередача объекта приложения функции/класса в Laravel

use MyProject\libraries\payment\PaymentProcessor; 

class MyFirstController extends \Controller { 

    protected $paymentProcessor; 

    public function __construct(
     PaymentProcessor $paymentProcessor 
    ) { 
     $this->paymentProcessor = $paymentProcessor; 
    } 

    public function postFormSubmit() { 
     //DO SOME STUFF 
     $paymentResult = $this->paymentProcessor->makePayment($paymentDetails); 
    } 
} 

PaymentProcessor находится на другом пространстве имен, и я в состоянии вызвать необходимую библиотеку с помощью App :: сделать

<?php namespace MyProject\libraries\payment; 

use MyProject\DataObjects\PaymentDetails; 

class PaymentProcessor { 

    public function makePayment(PaymentDetails $paymentData) { 
     $doFirstStep = \App::make('amazingLibrary')->doImportantThings(); 

, но для целей тестирования я хочу, чтобы удалить все инстанциацию и призывает к другим классам непосредственно из PaymentProcessor, поэтому я попытался сделать после инъекции:

<?php namespace MyProject\libraries\payment; 

use MyProject\DataObjects\PaymentDetails; 

class PaymentProcessor { 
    private $app; 

    public function __construct(\App $app) { 
     $this->app = $app; 
    } 

Пробовал:

public function makePayment(PaymentDetails $paymentData) { 
     $doFirstStep = $this->app::make('amazingLibrary')->doImportantThings(); 

Но это приводит к:

FatalErrorException (E_PARSE) ошибка синтаксиса, неожиданный '::' (T_PAAMAYIM_NEKUDOTAYIM)

Могу ли я на правильном пути?

Update:

Я также попытался назвать это как: $this->app->make

Это приводит к:

Вызов неопределенной метод Illuminate \ Support \ \ Фасады App :: сделать()

+0

Закомментируй частное приложение собственности. Я хочу увидеть следующий результат: –

+0

Результат тот же –

+0

'$ this-> app :: make()' неверный код. При использовании '::' вы должны квалифицировать его с именем класса, к которому принадлежит этот метод (например, 'SomeClass :: make()'. –

ответ

1

Возможно, вы хотите сделать что-то вроде этого:

something($app); 

function something (\Illuminate\Foundation\Application $app) { 

    echo $app->getLocale(); 
} 

Так что в вашем случае вы должны использовать $this->app->make синтаксис и вам нужно передать параметр, как я показал (и $ приложения является экземпляром \Illuminate\Foundation\Application не \App)

+0

Вот и все! Все еще не уверен, что это лучший подход, но теперь можно оценить оба решения. –

Смежные вопросы