将App对象传递到Laravel中的函数/类


Passing App object to function / class in Laravel

我正在使用Laravel 4.2,在表单提交和控制器响应之间调用支付流。如果付款被接受,则由类PaymentProcessor 在幕后完成一系列工作

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::make调用所需的库

<?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();

但它导致:

致命错误异常(E_PARSE)语法错误,意外的"::"(T_PAAMAYIM_NEKUDOTAYIM)

我走的路对吗?

更新:

我也试着把它称为:$this->app->make

这导致:

调用未定义的方法Illuminate''Support''Facades''App::make()

也许你想做这样的事情:

something($app);
function something ('Illuminate'Foundation'Application  $app) {
    echo  $app->getLocale();
}

因此,在您的情况下,您需要使用$this->app->make语法,并且需要如我所示传递参数($app是'Illuminate'Foundation'Application的实例,而不是'App