Php 将应用程序对象传递给Laravel中的函数/类
我正在使用Laravel4.2,调用表单提交和控制器响应之间的支付流。如果支付被接受,一系列的工作将由类PaymentProcessor在幕后完成Php 将应用程序对象传递给Laravel中的函数/类,php,laravel,laravel-4,facade,Php,Laravel,Laravel 4,Facade,我正在使用Laravel4.2,调用表单提交和控制器响应之间的支付流。如果支付被接受,一系列的工作将由类PaymentProcessor在幕后完成 use MyProject\libraries\payment\PaymentProcessor; class MyFirstController extends \Controller { protected $paymentProcessor; public function __construct( Pay
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();
但它会导致:
FatalErrorException(E_PARSE)语法错误,意外的“::”(T_PAAMAYIM_NEKUDOTAYIM)
我这样做对吗
更新:
我也试着把它叫做:$this->app->make
这导致:
调用undefined method Illumb\Support\Facades\App::make()您可能想这样做:
something($app);
function something (\Illuminate\Foundation\Application $app) {
echo $app->getLocale();
}
因此,在您的例子中,您需要使用
$this->app->make
语法,并且需要传递参数,如我所示(并且$app是\illumb\Foundation\Application
的实例,而不是\app
)注释掉私有app属性。我想查看下一个结果结果相同$this->app::make()
是无效代码。使用::
时,必须使用该方法所属的类的名称对其进行限定(例如SomeClass::make()
。这是一个坏主意-您试图将整个应用程序注入到您的小模块中-考虑、阅读SOLID
、spe依赖项注入
并重新设计。对于::
-正确的方法是$This->app->make
,因为您已经实例化了这个对象,:
是名称空间(范围)解析运算符,因此您可以使用它来指示您希望使用的(静态)方法/属性。@AndréTeixeira这可能是因为您的问题标题。我已经更改了它,并将此问题指定为重新讨论。仅此而已!仍然不确定它是否是最佳方法,但现在可以评估这两种解决方案。
public function makePayment(PaymentDetails $paymentData) {
$doFirstStep = $this->app::make('amazingLibrary')->doImportantThings();
something($app);
function something (\Illuminate\Foundation\Application $app) {
echo $app->getLocale();
}