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