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

7 浏览
0 Comments

将App对象传递给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() {
        // 做一些事情
        $paymentResult = $this->paymentProcessor->makePayment($paymentDetails);
    }
}

PaymentProcessor位于不同的命名空间,我可以使用App::make调用所需的库。

doImportantThings();
    }
}

但是,为了测试目的,我想从PaymentProcessor中删除所有的实例化和对其他类的直接调用,所以我尝试了以下注入方式:

app = $app;
    }
}

并尝试了:

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

但是它导致了一个致命错误:

FatalErrorException (E_PARSE) syntax error, unexpected '::' (T_PAAMAYIM_NEKUDOTAYIM)

我是否走错了方向?

更新:

我还尝试过这样调用:`$this->app->make`,但是出现了:

Call to undefined method Illuminate\Support\Facades\App::make()

0
0 Comments

问题的出现原因:在Laravel中,可能会遇到需要将App对象传递给函数或类的情况。在上面的代码中,使用了一个函数something(),该函数接受一个类型为\Illuminate\Foundation\Application的参数$app,并使用$app对象的getLocale()方法来输出语言环境。然而,在这段代码中,使用了错误的语法$this->app->make,并且传递的参数$app是\Illuminate\Foundation\Application的实例,而不是\App的实例。

解决方法:正确的方法是使用$this->app->make语法,并传递正确的参数类型\Illuminate\Foundation\Application。通过这种方式,可以确保将正确的App对象传递给函数或类,并且可以正确地使用App对象的方法和属性。

整理成一篇文章如下:

在Laravel中,有时候我们需要将App对象传递给函数或类。下面的代码就展示了一个例子:

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

在这段代码中,我们定义了一个函数something(),它接受一个类型为\Illuminate\Foundation\Application的参数$app。在函数体内,我们使用了$app对象的getLocale()方法来输出语言环境。

然而,这段代码中存在一个问题。我们使用了错误的语法$this->app->make,并且传递的参数$app是\Illuminate\Foundation\Application的实例,而不是\App的实例。这导致代码无法正常工作。

要解决这个问题,我们需要使用正确的语法$this->app->make,并传递正确的参数类型\Illuminate\Foundation\Application。通过这种方式,我们可以确保将正确的App对象传递给函数或类,并且可以正确地使用App对象的方法和属性。

现在,我们已经找到了解决问题的方法。尽管我们不确定这是否是最佳的解决方案,但至少可以使代码正常工作,并且可以评估两种解决方案的优劣。

总结起来,当在Laravel中遇到需要将App对象传递给函数或类的情况时,我们应该使用$this->app->make语法,并传递正确的参数类型\Illuminate\Foundation\Application。这样可以确保将正确的App对象传递给函数或类,并且可以正确地使用App对象的方法和属性。

0