nikic / FastRoute маршруты для Middlewares \ FastRoute пакет

Я получил эти маршруты:

['GET', '/article/{id}', ['SuperBlog\Controller\ArticleController', 'show']],

и я использую Middleware\FastRoute, Middle\RequestHandler а также Relay пакеты, чтобы сделать обработчик запросов. Также я использую php-di DI контейнер.

Моя проблема в том, что если я хочу использовать маршрут, как упомянуто выше, я выдаю мне эту ошибку:

Deprecated: Non-static method SuperBlog\Controller\ArticleController::show() should not be called statically in

Это хорошо работает, когда я не использую методы (например, ['GET', '/', 'SuperBlog\Controller\HomeController'],).

Мой вопрос: как я могу заставить это работать? Не нашел никакого решения. Я знаю, что если я сделаю show Метод static это будет работать, но я не думаю, что это хорошая идея.

bootstrap.php

 /**
* Routing
*/
$routes = simpleDispatcher(function (RouteCollector $r){
$routes = include('routes.php');
foreach ($routes as $route) {
$r->addRoute($route[0], $route[1], $route[2]);
}
});

$middlewareQueue[] = new FastRoute($routes);
$middlewareQueue[] = new RequestHandler($container);

$requestHandler = new Relay($middlewareQueue);
$response = $requestHandler->handle(ServerRequestFactory::fromGlobals());
$emitter = new SapiEmitter();
return $emitter->emit($response);

ArticleController.php

class ArticleController
{

/**
* @var ArticleRepository
*/
private $articleRepository;

/**
* @var Twig_Environment
*/
private $twig;


/**
* @var ResponseInterface
*/
private $response;

public function __construct(ArticleRepository $articleRepository, Twig_Environment $twig, ResponseInterface $response) {
$this->articleRepository = $articleRepository;
$this->twig = $twig;
$this->response = $response;
}


public function show($request) {
$article = $this->articleRepository->get($request->getAttribute('id'));

$this->response->getBody()->write($this->twig->render('article.twig',[
'article' => $article,
]));

return $this->response;
}

}

routes.php

return [
['GET', '/', 'SuperBlog\Controller\HomeController'],
['GET', '/article/{id}', ['SuperBlog\Controller\ArticleController', 'show']],
];

0

Решение

Try this:
/**
* Routing
*/
$routes = simpleDispatcher(function (RouteCollector $r){
$routes = include('routes.php');
foreach ($routes as $key => $route) {
$r->addRoute($route[$key][0], $route[$key][1], $route[$key][2]);
}
});

Так как это многомерный массив, который вы включаете из ‘rout.php’.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]