如何在Slim Framework中为404错误呈现自定义模板

时间:2017-04-07 22:24:24

标签: php error-handling slim

我正在使用Slim 3并渲染我正在使用PHP-View。我正在这样修改渲染器:

...

$container['view'] = new \Slim\Views\PhpRenderer("../mytemplatesfolder/");

$app = new \Slim\App();

$container = $app->getContainer();
$container['renderer'] = new PhpRenderer("templates");

我可以在我的路线中渲染模板而没有任何问题,例如:

$app->get('/someroute', function (Request $request, Response $response){
    return $this->renderer->render($response, "/onetemplate.phtml");
});

当404错误发生时,如何呈现自定义模板(使用PHP-View,而不是Twig)

我发现this answer使用了Twig,但我无法弄清楚如何使用PHP-View来做到这一点。

1 个答案:

答案 0 :(得分:1)

鉴于你有这样的composer.json:

{
    "require": {
        "slim/slim": "^3.0",
        "slim/php-view": "^2.2"
    }
}

这是一个示例应用程序:

<?php
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;
use \Slim\Views\PhpRenderer;

require '../vendor/autoload.php';

$app = new \Slim\App;
$container = $app->getContainer();
$container['renderer'] = new PhpRenderer("./templates");
$container['notFoundHandler'] = function ($container) {
    return function ($request, $response) use ($container) {
        return $container['renderer']->render($response, "/404.php");
    };
};

$app->get('/hello/{name}', function (Request $request, Response $response) {
    $name = $request->getAttribute('name');
    $response->getBody()->write("Hello, $name");

    return $response;
});

$app->run();

这是404.php模板(请注意它位于/templates中指定的app.php子文件夹下):

<?php
echo 'CONTENT NOT FOUND';

:)