Slim 3 Eloquent 初始化错误 Argument 1 must be Illuminate\Database\Capsule\Manager
Slim 3 Eloquent initialization error Argument 1 must be Illuminate\Database\Capsule\Manager
披露:这是我的第一个 Slim 应用程序
我试过将 Eloquent 与 Slim 3 一起使用,但似乎无法正常工作。我已经用 composer 安装了所有东西,遵循网站上的安装指南。
当我尝试使用我的用户模型(它扩展了 Eloquent 模型)时,我收到一个致命错误:
Fatal error: Call to a member function connection() on null in ****\vendor\illuminate\database\Eloquent\Model.php on line 3280
我的 appConfig 如下所示:
$config['db'] = [
'driver' => 'mysql',
'host' => '****',
'database' => '****',
'username' => '****',
'password' => '****',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
];
我根据文档将其传递给应用程序:
$app = new \Slim\App(["settings" => $config]);
$container = $app->getContainer();
$container['db'] = function (ContainerInterface $container) {
$settings = $container->get('database');
$capsule = new \Illuminate\Database\Capsule\Manager;
$capsule->addConnection($settings);
$capsule->setAsGlobal();
$capsule->bootEloquent();
return $capsule;
};
我的用户 class 看起来像这样:
class User extends Illuminate\Database\Eloquent\Model {}
我在 Whosebug 上找到了解决方法,如下所示:
use Illuminate\Database\Eloquent\Model as Eloquent;
use Illuminate\Database\Capsule\Manager;
class User extends Eloquent {
public function __construct(Manager $capsule, array $attributes = [])
{
parent::__construct($attributes);
}
}
但是如果我根据端口重写构造函数,我会得到一个不同的错误:
_Catchable fatal error: Argument 1 passed to Up\models\User::_construct() must be an instance of Illuminate\Database\Capsule\Manager, none given, called in ****\vendor\illuminate\database\Eloquent\Model.php on line 644 and defined in ****\models\User.php on line 14
我现在卡住了。请帮助
我找到了一个解决方案here,但似乎有点不合适。我只需要像这样单独初始化 Eloquent:
$capsule = new Capsule;
$capsule->addConnection($config['db']);
$capsule->setEventDispatcher(new Dispatcher(new Container));
$capsule->bootEloquent();
这样 $container['db'] = function () {}
部分就被排除了,但是现在一切正常了
编辑(供评论):整个部分现在看起来像这样:
$app = new \Slim\App(["settings" => $config]);
$container = $app->getContainer();
/*$container['db'] = function (ContainerInterface $container) {
$settings = $container->get('database');
$capsule = new \Illuminate\Database\Capsule\Manager;
$capsule->addConnection($settings);
$capsule->setAsGlobal();
$capsule->bootEloquent();
return $capsule;
};*/
$capsule = new Capsule;
$capsule->addConnection($config['db']);
$capsule->setEventDispatcher(new Dispatcher(new Container));
$capsule->bootEloquent();
披露:这是我的第一个 Slim 应用程序
我试过将 Eloquent 与 Slim 3 一起使用,但似乎无法正常工作。我已经用 composer 安装了所有东西,遵循网站上的安装指南。
当我尝试使用我的用户模型(它扩展了 Eloquent 模型)时,我收到一个致命错误:
Fatal error: Call to a member function connection() on null in ****\vendor\illuminate\database\Eloquent\Model.php on line 3280
我的 appConfig 如下所示:
$config['db'] = [
'driver' => 'mysql',
'host' => '****',
'database' => '****',
'username' => '****',
'password' => '****',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
];
我根据文档将其传递给应用程序:
$app = new \Slim\App(["settings" => $config]);
$container = $app->getContainer();
$container['db'] = function (ContainerInterface $container) {
$settings = $container->get('database');
$capsule = new \Illuminate\Database\Capsule\Manager;
$capsule->addConnection($settings);
$capsule->setAsGlobal();
$capsule->bootEloquent();
return $capsule;
};
我的用户 class 看起来像这样:
class User extends Illuminate\Database\Eloquent\Model {}
我在 Whosebug 上找到了解决方法,如下所示:
use Illuminate\Database\Eloquent\Model as Eloquent;
use Illuminate\Database\Capsule\Manager;
class User extends Eloquent {
public function __construct(Manager $capsule, array $attributes = [])
{
parent::__construct($attributes);
}
}
但是如果我根据端口重写构造函数,我会得到一个不同的错误:
_Catchable fatal error: Argument 1 passed to Up\models\User::_construct() must be an instance of Illuminate\Database\Capsule\Manager, none given, called in ****\vendor\illuminate\database\Eloquent\Model.php on line 644 and defined in ****\models\User.php on line 14
我现在卡住了。请帮助
我找到了一个解决方案here,但似乎有点不合适。我只需要像这样单独初始化 Eloquent:
$capsule = new Capsule;
$capsule->addConnection($config['db']);
$capsule->setEventDispatcher(new Dispatcher(new Container));
$capsule->bootEloquent();
这样 $container['db'] = function () {}
部分就被排除了,但是现在一切正常了
编辑(供评论):整个部分现在看起来像这样:
$app = new \Slim\App(["settings" => $config]);
$container = $app->getContainer();
/*$container['db'] = function (ContainerInterface $container) {
$settings = $container->get('database');
$capsule = new \Illuminate\Database\Capsule\Manager;
$capsule->addConnection($settings);
$capsule->setAsGlobal();
$capsule->bootEloquent();
return $capsule;
};*/
$capsule = new Capsule;
$capsule->addConnection($config['db']);
$capsule->setEventDispatcher(new Dispatcher(new Container));
$capsule->bootEloquent();