Я пытаюсь реализовать часть Allow Slim to instantiate the controller
, описанную https://www.slimframework.com/docs/v3/objects/router.html.. При этом я получаю следующую ошибку:
Аргумент 1 передан Michael \ Test \ HomeController:: __ construct () должен быть экземпляром Slim \ ContainerInterface, экземпляром Slim \ Container, указанным в /var/www/slimtest/vendor/slim/slim/Slim/CallableResolver.php в строке 93
Думая, что это могло быть связано с пространством имен, я также попытался в пространстве имен \
, но получил ту же ошибку.
Является ли документация по https://www.slimframework.com/docs/v3/objects/router.html неверной и должен ли тип объявления аргумента конструктора HomeController бытьSlim\Container
, или я что-то не так делаю, а Slim\ContainerInterface
правильно?
<?php
namespace Michael\Test;
error_reporting(E_ALL);
ini_set('display_startup_errors', 1);
ini_set('display_errors', 1);
require '../vendor/autoload.php';
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;
$app = new \Slim\App();
$container = $app->getContainer();
//$container['view'] = function ($c) {};
//Question. Do I need to use the fully qualified class name???
$app->get('/', \Michael\Test\HomeController::class . ':home');
//$app->get('/', '\Michael\Test\HomeController:home');
$app->run();
Домашний контроллер
namespace Michael\Test;
class HomeController
{
protected $container;
// constructor receives container instance
public function __construct(\Slim\ContainerInterface $container) {
$this->container = $container;
}
public function home($request, $response, $args) {
// your code
// to access items in the container... $this->container->get('');
return $response;
}
public function contact($request, $response, $args) {
// your code
// to access items in the container... $this->container->get('');
return $response;
}
}