这个问题在这里已有答案:
我正在使用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 回答
可能你想做那样的事情:
所以在你的情况下,你需要使用
$this->app->make
语法,你需要传递我显示的参数(和$ app是\Illuminate\Foundation\Application
的实例\App
)