[英]Laravel Service Provider bypassed
我有以下課程:
<?php
namespace App\CustomClasses;
class Disqus {
protected $secretKey;
protected $publicKey;
public function __construct()
{
$this->secretKey = 'abc';
$this->publicKey = '123';
}
public function payload()
{
...
}
}
我還創建了一個服務提供者(以下簡稱),以將該類綁定到IOC容器:
<?php namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\CustomClasses\Disqus;
class DisqusServiceProvider extends ServiceProvider {
public function register()
{
$this->app->singleton('Disqus', function() {
return new Disqus();
});
}
public function boot()
{
//
}
}
在我的控制器中:
<?php
use App\CustomClasses\Disqus;
class ArticlesController extends Controller {
public function view(Disqus $disqus)
{
...
//$disqus = App::make('Disqus');
return View::make('articles.view', compact(array('disqus')));
}
}
問題是,每當我使用$disqus
變量時,它不是從服務提供商“生成”的,而是從Disqus類本身生成的。
但是,當我有$disqus = App::make('Disqus');
,變量將通過服務提供商。
所以我的問題是,由於綁定存在於服務提供者中,因此,在控制器中使用$disqus
變量時,它是否應該直接來自DisqusServiceProvider而不是來自Disqus類?
我想念什么嗎?
在此先感謝您的幫助。
當控制器的操作要求傳遞App \\ CustomClasses \\ Disqus類的對象時,服務容器將在其映射中搜索依賴項的類名稱,以查看其是否具有相應的服務。 但是,它使用完全限定的類名,這就是在您的情況下它不能正常工作的原因。
在您的服務提供商中,您已將服務綁定到Disqus ,而完全限定的類名稱是App \\ CustomClasses \\ Disqus 。 在提供程序中使用完全限定的類名,它應該起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.