У меня есть следующий класс:Laravel Поставщик услуг обходили
<?php
namespace App\CustomClasses;
class Disqus {
protected $secretKey;
protected $publicKey;
public function __construct()
{
$this->secretKey = 'abc';
$this->publicKey = '123';
}
public function payload()
{
...
}
}
Я также создал поставщика услуг (упрощенный сильфона), чтобы связать этот класс с контейнером МОК:
<?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 класса непосредственно, когда я использую его в мой контроллер?
Я что-то упустил?
Заранее благодарим за любую помощь.
Это было правильно и решило проблему. Однако, даже если это нормальное поведение, было бы полезно упомянуть в документации: полное имя класса должно использоваться в провайдере, а не только в имени класса (даже с ключевым словом 'use'). –