У меня есть следующий класс:
<?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 Класс непосредственно, когда я использую его в моем контроллере?
Я что-то пропустил?
Заранее благодарю за любую помощь.
Когда действие контроллера требует объекта класса App \ CustomClasses \ Disqus Чтобы пройти, сервисный контейнер ищет в своих сопоставлениях имя класса зависимости, чтобы узнать, есть ли у него соответствующая служба. Тем не менее, он использует полное имя класса, и это причина того, что он не работает правильно в вашем случае.
В вашем поставщике услуг вы связали услугу с Disqus, в то время как полное имя класса App \ CustomClasses \ Disqus. Используйте полное имя класса в провайдере, и оно должно работать.
Других решений пока нет …