簡體   English   中英

Laravel服務提供商已繞過

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM