Php 致命错误:未捕获ArgumentCounter错误:函数App\Models\Model的参数太少

Php 致命错误:未捕获ArgumentCounter错误:函数App\Models\Model的参数太少,php,slim,Php,Slim,我正在制作一个简单的应用程序并学习Slim 3框架。 因为我想要一个MVC设计和一个DIC,我尝试了一个简单的教程,并把我的工作放在上面 目标是使用PDO在视图上显示数据库中的数据 这在理论上非常简单 问题是,为了调用PDO,我不知道如何获取我对模型的依赖关系,我遇到了这个错误 在我的模型上没有我的DIC,设计和应用程序工作得很好。 我可以从我的控制器调用我的模型,并在我的视图上传递任何信息,而不会出现任何错误 下面是我的代码,提前感谢你的启示 从路线开始我得到: $app->get(

我正在制作一个简单的应用程序并学习Slim 3框架。 因为我想要一个MVC设计和一个DIC,我尝试了一个简单的教程,并把我的工作放在上面

  • 目标是使用PDO在视图上显示数据库中的数据
这在理论上非常简单

问题是,为了调用PDO,我不知道如何获取我对模型的依赖关系,我遇到了这个错误

在我的模型上没有我的DIC,设计和应用程序工作得很好。 我可以从我的控制器调用我的模型,并在我的视图上传递任何信息,而不会出现任何错误

下面是我的代码,提前感谢你的启示

路线开始我得到:

$app->get('/content', \App\Controllers\ContentController::class);
控制器

<?php

namespace App\Controllers;

class ContentController
{
    protected $container;
    
    // Passes the DIC to get the model.
    function __construct($container)
    {
        $this->container = $container;
    }
    
    function __invoke($request, $response, $args)
    {
        
        $datas = $this->container->get('contentModel');
        
        $args['content'] = $datas->testContent();
        
        // get the template renderer and pass response and datas to the template file.
        return $this->container->get('renderer')->render($response, 'content.php', $args);
    }

ContentModel使用与模型类相同的构造函数,因为您在扩展它时没有覆盖它,并且在实例化类“$container”时,模型的构造函数需要1个参数。因此,在创建实例ContentModel时,还需要向其传递一个参数:

$container['contentModel'] = new \App\Models\ContentModel($container);

我假设$container变量是模型类所期望的。

谢谢,它工作得非常好。有一件事我仍然不明白,为什么当我从我的控制器实例化类时,同一个构造函数工作得很好?我错过了什么真正重要的东西吗?
<?php

namespace App\Models;

Class ContentModel extends Model
{
    
    public function testContent()
    {
        $testDatas = "Hello world";
        return $testDatas;
    }
    
    public function getContent()
    {
        $sql = 'SELECT * FROM posts';
        $posts = $this->executeQuery($sql);
        return $posts;
    }
    

}
<?php

use Slim\App;

return function (App $app) {
$container = $app->getContainer();

// View renderer
$container['renderer'] = function ($c) {
    $settings = $c->get('settings')['renderer'];
    return new \Slim\Views\PhpRenderer($settings['template_path']);
};

// Database
$container['db'] = function ($c) {
    $db = $c['settings']['db'];
    $pdo = new PDO('mysql:host=' . $db['host'] . ';dbname=' . $db['dbname'],
        $db['user'], $db['pass']);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
    return $pdo;
};


// Model data stored
$container['contentModel'] = new \App\Models\ContentModel();

};
$container['contentModel'] = new \App\Models\ContentModel($container);