Slim3 - 传递给构造函数的参数 1 必须是 SlimViewsTwig 的实例



我正在使用Slim3,但是在注册依赖项时遇到问题。根据错误,我创建的构造函数期望参数 1 的类型SlimViewsTwig

问题是我正在传递一个SlimViewsTwig实例——至少我认为我是。我已经几个月没有使用Slim了,所以我可能会错过一些明显的东西。我找不到问题。

我得到的错误是:

Catchable fatal error:  Argument 1 passed to AppControllersRegistrationController::__construct() must be an instance of SlimViewsTwig, instance of SlimContainer given

控制器/注册控制器.php

<?php
namespace AppControllers;
class RegistrationController {
  protected $view;
  public function __construct(SlimViewsTwig $view) {
    $this->view = $view;
  }
  public function register($request, $response, $args) {
    // Does some stuff ...
  }
}

依赖关系.php

<?php
use AppControllersRegistrationController;
$container = $app->getContainer();
// Twig View
$container['view'] = function ($c) {
    $settings = $c->get('settings')['renderer'];
    $view = new SlimViewsTwig($settings['template_path']);
    $basePath = rtrim(str_ireplace('index.php', '', $c['request']->getUri()->getBasePath()), '/');
    $view->addExtension(new SlimViewsTwigExtension($c['router'], $basePath));
    return $view;
};
// monolog
$container['logger'] = function ($c) {
    $settings = $c->get('settings')['logger'];
    $logger = new MonologLogger($settings['name']);
    $logger->pushProcessor(new MonologProcessorUidProcessor());
    $logger->pushHandler(new MonologHandlerStreamHandler($settings['path'], $settings['level']));
    return $logger;
};
// sqlite3
$container['db'] = function ($c) {
    return new SQLite3(__DIR__ . '/../db/prod.db');
};
// Registration Controller
$container['RegistrationController'] = function($c) {
  return new RegistrationController($c->get('view'));
};

路线

$app->post('/signup', 'AppControllersRegistrationController:register');

还尝试了以下方法:

$app->post('/signup', AppControllersRegistrationController::class . ':register');

有什么想法吗?

问题是我错误地定义了路由,我完全错过了有关容器解析的部分

它应该如下所示:

$app->post('/signup', 'RegistrationController:register');

最新更新