gpt4 book ai didi

laravel - 使用 Laravel 的 Eloquent ORM 在 Slim 中出现 null 错误时调用成员函数 connection()

转载 作者:行者123 更新时间:2023-12-03 22:55:59 25 4
gpt4 key购买 nike

我正在尝试在 Slim 微框架上使用 Laravel 的 Eloquent ORM,但我一直看到错误:Call to a member function connection() on null

这是代码:

依赖.php

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

$capsule->setAsGlobal();
$capsule->bootEloquent();

return $capsule;
};

User.php(模型类)
use Illuminate\Database\Eloquent\Model as Model;

class User extends Model {

protected $table = "users";

protected $fillable = ['name', 'email', 'password'];
}

HomeController.php( Controller 类)
class Home extends Controller {

public function index($request, $response, $args) {
$user = User::find(1);
var_dump($user);
die();
$title = "Slim Auth";
$response = $this->view->render($response, 'home.php', ["title" => $title]);
return $response;
}
}

我的 bootstrap.php 文件中需要dependency.php,在该文件中实例化了 Slim 类:
$config = [
'settings' => [
'displayErrorDetails' => true,

'view' => [
'view_path' => APP_PATH . 'views/'
],

'database' => [
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'tutorial_slim_auth',
'username' => 'root',
'password' => 'passw0rd',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
],
]
];

$app = new Slim\App($config);

而 HomeController.php 和 User.php 是通过 composer json 文件自动加载的。运行 index.php(也包括我的 bootstrap.php)文件后,包含:
$app->run();

这给了我一个 fatal error :在 null 上调用成员函数 connection()。
但是这样做:
echo '<pre>';
print_r($container['db']);
echo '</pre>';

在我的引导文件中产生了预期的结果以及在 HomeController.php 文件中调用的 var_dump 函数的结果。我该怎么办?或者有什么我做错的地方?

最佳答案

您的全局 $capsule 封装在这里:

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

$capsule->setAsGlobal();
$capsule->bootEloquent();

return $capsule;
};

尝试这个:
$capsule = new \Illuminate\Database\Capsule\Manager;
$capsule->addConnection($container['settings']['db']);
$capsule->setAsGlobal();
$capsule->bootEloquent();

$container['db'] = function ($container) use ($capsule) {
return $capsule;
};

第一个版本不起作用的原因是该函数仅在您实际使用胶囊时才被调用,即 $this->db .如果您只使用 Eloquent 模型类,则不会进行调用。

关于laravel - 使用 Laravel 的 Eloquent ORM 在 Slim 中出现 null 错误时调用成员函数 connection(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38256812/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com