muhammad_97
@muhammad_97
PHP-разработчик

Странная ошибка?

Есть класс Installer с методом setupRoles:

public function setupRoles()
{
	$administrator = new Role();
	$administrator->name = 'Administrator';
	$administrator->save();

	$manager = new Role();
	$manager->name = 'Manager';
	$manager->save();

	$customer = new Role();
	$customer->name = 'Customer';
	$customer->save();
}


Для управления ролями использую Zizaco/entrust:

Вызываю так:
$this->loadSystemInstaller()->setupRoles();

public function loadSystemInstaller()
{
	$this->bootFramework(); //запускаю Laravel

	$installer = new ...\Installation\Installer();

	return $installer;
}


Выбрасывает исключение:
Call to a member function connection() on null

Проверил - действительно $resolver == null. Сделал то же самое через роут:

Route::get('installation/roles', function() {

	$installer = new ...\Installation\Installer();
	$installer->setupRoles();

});


Работает! $resolver !== null. Пожалуйста, подскажите, в чем может быть проблема?

UPD: немного поковырял Laravel, $resolver это инстанс DatabaseManager'а, который задается в единственном месте - сервис-провайдере DatabaseServiceProvider в методе boot. В метод boot он попадает из IoC (если я правильно понимаю что это такое):
// Illuminate\Database\DatabaseServiceProvider
...
Model::setConnectionResolver($this->app['db']);
...
  • Вопрос задан
  • 513 просмотров
Решения вопроса 1
muhammad_97
@muhammad_97 Автор вопроса
PHP-разработчик
Как оказалось, я был прав. Не загружались сервис-провайдеры. Исправил метод bootFramework. Было:

public function bootFramework()
{
	...
	require_once $autoloadFile;

	$app = require_once $startFile;
	...
}


Стало:
public function bootFramework()
{
	...
	require_once $autoloadFile;

	$app = require_once $startFile;

	$app->boot(); // загружаем сервис-провайдеры
	...
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Где задается переменная $resolver?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы