Laravel 4 — Как внедрить экземпляр чего-то, что связано с контейнером, в контроллер?

Я пытаюсь внедрить экземпляр класса, который управляется через контейнер IoC и связан с помощью поставщика услуг. Метод register () выглядит следующим образом и содержит много ошибок при настройке этого объекта:

  public function register()
{
$this->app->bind('GoogleAnalytics', function($app)
{
if(!\File::exists(\Config::get('analytics.certificate_path')))
{
throw new \Exception("Can't find the .p12 certificate in: " . \Config::get('analytics.certificate_path'));
}

$config = array(
'oauth2_client_id' => \Config::get('analytics.client_id'),
'use_objects' => \Config::get('analytics.use_objects'),
);

$client = new \Google_Client($config);

// $client->setAccessType('offline');

$client->setAssertionCredentials(
new \Google_Auth_AssertionCredentials(
\Config::get('analytics.service_email'),
\Google_Service_Analytics::ANALYTICS_READONLY,
file_get_contents(\Config::get('analytics.certificate_path'))
)
);

return new Analytics($client);
});
}

Затем в моем контроллере я хочу, чтобы это автоматически передавалось через конструктор через IoC, хотя это не работает, и я получаю ошибку ReflectionException: Class not found.

class DashboardController extends BaseController {
protected $analytics;

public function __construct(GoogleAnalytics $analytics) {
$this->analytics = $analytics;
}

У меня сложилось впечатление, что это должно быть возможно? Комментарий thepsion5 здесь также, кажется, предполагает, что это должно работать. Не обращая внимания на другие вопросы (например, на использование репозитория и т. Д.), Есть какие-то идеи о том, что для меня не так?

Как всегда, любая помощь / идеи высоко ценится, и большое спасибо заранее 🙂

1

Решение

При автоматическом введении с помощью подсказки типа ДОЛЖНА существовать подсказка типа. Ли GoogleAnalytics класс / интерфейс существуют в вашем случае? Я думаю, нет.

Кроме того, если вы используете пространство имен, имейте в виду, что вы должны app->bind('Full\Namespace\ClassName', ...) потому что все имена классов внутри строки обрабатываются так, как если бы они были в глобальном пространстве имен.

4

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

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

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