1

我有这些路线:

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

我正在使用Middleware\FastRoute,Middle\RequestHandlerRelay包来制作请求处理程序。我也在使用php-diDI 容器。

我的问题是,如果我想使用上面提到的路线,我给了我这个错误:

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

当我不使用方法(如['GET', '/', 'SuperBlog\Controller\HomeController'],)时,它运行良好。

我的问题是我怎样才能让它工作?没有找到任何解决方案。我知道如果我将show方法设为静态它会起作用,但我认为这不是一个好主意。

引导程序.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);

文章控制器.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;
    }

}

路由.php

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

1 回答 1

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]);
    }
});

因为它是一个多维数组,所以您将包含在“routes.php”中。

于 2018-12-23T09:27:03.113 回答