Я работаю с 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 :: сделать()
Закомментируй частное приложение собственности. Я хочу увидеть следующий результат: –
Результат тот же –
'$ this-> app :: make()' неверный код. При использовании '::' вы должны квалифицировать его с именем класса, к которому принадлежит этот метод (например, 'SomeClass :: make()'. –