簡體   English   中英

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 安裝了所有東西,按照網站上的安裝指南進行操作。

當我嘗試使用我的 User 模型(它擴展了 Eloquent 模型)時,我收到了一個致命錯誤:

致命錯誤:在 ****\\vendor\\illuminate\\database\\Eloquent\\Model.php on line 3280 中調用成員函數 connection() on null

我的 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;
};

我的 User 類如下所示:

class User extends Illuminate\Database\Eloquent\Model {}

我在Stackoverflow上找到了一種解決方法,如下所示:

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 致命錯誤:傳遞給 Up\\models\\User::_ construct() 的參數 1必須是 Illuminate\\Database\\Capsule\\Manager 的實例,沒有給出,在 ****\\vendor\\illuminate\\database\\Eloquent\\ 中調用第 644 行的 Model.php 並在第 14 行的 ****\\models\\User.php 中定義

我現在卡住了。 請幫忙

我在這里找到了解決方案,但似乎有點不合適。 我只需要像這樣單獨初始化 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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM