如何为 Slim Framework 中的 404 错误呈现自定义模板
How to render a custom template for the 404 error in Slim Framework
我正在使用 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");
});
如何呈现自定义模板(使用 PHP-View,而不是 Twig)当 404 错误发生时?
我发现 使用 Twig,但我不知道如何使用 PHP-View。
假设你有这样的 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 模板(请注意,它位于 app.php
中指定的 /templates
子文件夹下):
<?php
echo 'CONTENT NOT FOUND';
:)
我正在使用 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");
});
如何呈现自定义模板(使用 PHP-View,而不是 Twig)当 404 错误发生时?
我发现
假设你有这样的 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 模板(请注意,它位于 app.php
中指定的 /templates
子文件夹下):
<?php
echo 'CONTENT NOT FOUND';
:)