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