Провайдер услуг Laravel обойден

У меня есть следующий класс:

<?php

namespace App\CustomClasses;

class Disqus {

protected $secretKey;
protected $publicKey;

public function __construct()
{
$this->secretKey = 'abc';
$this->publicKey = '123';
}

public function payload()
{
...
}

}

Я также создал Service Provider (упрощенно ниже), чтобы связать этот класс с контейнером 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 Класс непосредственно, когда я использую его в моем контроллере?

Я что-то пропустил?

Заранее благодарю за любую помощь.

1

Решение

Когда действие контроллера требует объекта класса App \ CustomClasses \ Disqus Чтобы пройти, сервисный контейнер ищет в своих сопоставлениях имя класса зависимости, чтобы узнать, есть ли у него соответствующая служба. Тем не менее, он использует полное имя класса, и это причина того, что он не работает правильно в вашем случае.

В вашем поставщике услуг вы связали услугу с Disqus, в то время как полное имя класса App \ CustomClasses \ Disqus. Используйте полное имя класса в провайдере, и оно должно работать.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]