首页 文章

在Laravel中将App对象传递给函数/类[重复]

提问于
浏览
0

这个问题在这里已有答案:

我正在使用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();

但它导致:

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

我是以正确的方式吗?

更新:

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

这导致:

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

1 回答

  • 1

    可能你想做那样的事情:

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

    所以在你的情况下,你需要使用 $this->app->make 语法,你需要传递我显示的参数(和$ app是 \Illuminate\Foundation\Application 的实例 \App

相关问题