在 PhalconPHP 中重定向到 404 路由导致空白页
Redirecting to 404 route in PhalconPHP results in Blank Page
我已经设置了一个路由器,并在其中为 404 定义了一条路由:
<?php
use Phalcon\Mvc\Router;
$router = new Router(FALSE);
$router->removeExtraSlashes(true);
$route = $router->add('/', ['controller' => 'index', 'action' => 'index']);
$route->setName("index");
// other routes defined here...
$router->notFound([
"controller" => "index",
"action" => "route404"
]);
?>
我的索引控制器:
<?php
class IndexController extends ControllerBase
{
public function indexAction()
{
// code removd for berevity
}
public function route404Action() {
// no code here, I just need to show the view.
}
}
?>
我有一个视图@/app/views/index/route404.phtml
,其中只有一点点 HTML,我什至尝试将其设为 .volt
文件,但没有成功。
当我转到一个不匹配任何路由的页面时,它工作正常。但是,如果我尝试重定向到它,我只会得到一个空白页面。例如,在我的一个控制器中我有这个:
if (!$category) {
// show 404
//Tried this next line to test, and it indeed does what you'd expect, I see "Not Found".
// echo "Not Found"; exit;
$response = new \Phalcon\Http\Response();
$response->redirect([
"for" => "index",
"controller" => "index",
"action" => "route404"]
);
return; // i return here so it won't run the code after this if statement.
}
有什么想法吗?该页面完全空白(源代码中没有任何内容)并且我的 apache 日志中没有错误。
尝试 return 响应对象,而不仅仅是空白 return。示例:
return $this->response->redirect(...);
但是我建议使用从调度程序转发来显示404页。这样用户将保持不变 url 并且浏览器将收到正确的状态代码 (404)。这种方式对 SEO 也很友好 :)
示例:
if ($somethingFailed) {
return $this->dispatcher->forward(['controller' => 'index', 'action' => 'error404']);
}
// Controller method
function error404Action()
{
$this->response->setStatusCode(404, "Not Found");
$this->view->pick(['_layouts/error-404']);
$this->response->send();
}
我已经设置了一个路由器,并在其中为 404 定义了一条路由:
<?php
use Phalcon\Mvc\Router;
$router = new Router(FALSE);
$router->removeExtraSlashes(true);
$route = $router->add('/', ['controller' => 'index', 'action' => 'index']);
$route->setName("index");
// other routes defined here...
$router->notFound([
"controller" => "index",
"action" => "route404"
]);
?>
我的索引控制器:
<?php
class IndexController extends ControllerBase
{
public function indexAction()
{
// code removd for berevity
}
public function route404Action() {
// no code here, I just need to show the view.
}
}
?>
我有一个视图@/app/views/index/route404.phtml
,其中只有一点点 HTML,我什至尝试将其设为 .volt
文件,但没有成功。
当我转到一个不匹配任何路由的页面时,它工作正常。但是,如果我尝试重定向到它,我只会得到一个空白页面。例如,在我的一个控制器中我有这个:
if (!$category) {
// show 404
//Tried this next line to test, and it indeed does what you'd expect, I see "Not Found".
// echo "Not Found"; exit;
$response = new \Phalcon\Http\Response();
$response->redirect([
"for" => "index",
"controller" => "index",
"action" => "route404"]
);
return; // i return here so it won't run the code after this if statement.
}
有什么想法吗?该页面完全空白(源代码中没有任何内容)并且我的 apache 日志中没有错误。
尝试 return 响应对象,而不仅仅是空白 return。示例:
return $this->response->redirect(...);
但是我建议使用从调度程序转发来显示404页。这样用户将保持不变 url 并且浏览器将收到正确的状态代码 (404)。这种方式对 SEO 也很友好 :)
示例:
if ($somethingFailed) {
return $this->dispatcher->forward(['controller' => 'index', 'action' => 'error404']);
}
// Controller method
function error404Action()
{
$this->response->setStatusCode(404, "Not Found");
$this->view->pick(['_layouts/error-404']);
$this->response->send();
}