Как запустить Eloquent Manager в Slim 3.1 Инъекции зависимостей

Я написал свой код, чтобы создать экземпляр Eloquent Capsule / Manager, используя slim DI.

$container['db'] = function ($c) { $settings = $c->get('database'); $db = new \Illuminate\Database\Capsule\Manager; $db->addConnection($settings); $db->setAsGlobal(); $db->bootEloquent(); return $db; } 

И у меня есть мой маршрут, как это

 $app->get('/adduser', function() { $user = new Users; $user->name = "Users 1"; $user->email = "user1@test.com"; $user->password = "My Passwd"; $user->save(); echo "Hello, $user->name !"; }); 

Когда я запускаю маршрут в браузере, это приведет к ошибке в журнале ошибок веб-сервера

PHP Неустранимая ошибка: вызов функции-функции-члена () для не-объекта в /home/***/vendor/illuminate/database/Eloquent/Model.php в строке 3335

По-моему, это происходит потому, что Eloquent Capsule / Manager не запускается, чтобы создать экземпляр DI.

Я нашел решение для решения этой проблемы, объявив модель с настраиваемым конструктором, как это

 use Illuminate\Database\Eloquent\Model as Eloquent; use Illuminate\Database\Capsule\Manager as Capsule; class Users extends Eloquent { protected $table = 'users'; protected $hidden = array('password'); public function __construct(Capsule $capsule, array $attributes = array()) { parent::__construct($attributes); } } 

Но я не думаю, что это чистые решения, потому что я должен переписать все мои модели с помощью пользовательского конструктора.

Мне нужна помощь в поиске решений для моей проблемы. Я пытаюсь использовать код ниже:

 $app->get('/adduser', function() use ($some_variable) { // create user script }); 

но до сих пор я не знаю, как с помощью этого метода запускать $container['db'] . Я очень ценю помощь здесь.

    Вероятно, не рекомендуется вводить менеджера капсул в каждую модель. Как вы сами говорите, это будет болью для управления. Вы пробовали этот код за пределами закрытия? то есть. в начальной части вашего приложения.

      $db = new \Illuminate\Database\Capsule\Manager; $db->addConnection($settings); $db->setAsGlobal(); $db->bootEloquent(); 

    Функция setAsGlobal делает экземпляр Capsule Manager статическим, поэтому модели могут получить доступ к нему по всему миру. Просто отметим, что соглашение – это назвать ваши классы моделей в единственной форме. то есть. Пользователь, а не Пользователи.