首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Phalcon中设置404页面

如何在Phalcon中设置404页面
EN

Stack Overflow用户
提问于 2012-12-28 22:47:33
回答 3查看 18K关注 0票数 21

当控制器/操作不存在时,如何在Phalcon中设置要显示的404页面?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-28 22:47:33

您可以设置dispatcher为您执行此操作。

当你引导你的应用程序时,你可以这样做($di是你的DI工厂):

代码语言:javascript
复制
use \Phalcon\Mvc\Dispatcher as PhDispatcher;

$di->set(
    'dispatcher',
    function() use ($di) {

        $evManager = $di->getShared('eventsManager');

        $evManager->attach(
            "dispatch:beforeException",
            function($event, $dispatcher, $exception)
            {
                switch ($exception->getCode()) {
                    case PhDispatcher::EXCEPTION_HANDLER_NOT_FOUND:
                    case PhDispatcher::EXCEPTION_ACTION_NOT_FOUND:
                        $dispatcher->forward(
                            array(
                                'controller' => 'error',
                                'action'     => 'show404',
                            )
                        );
                        return false;
                }
            }
        );
        $dispatcher = new PhDispatcher();
        $dispatcher->setEventsManager($evManager);
        return $dispatcher;
    },
    true
);

创建ErrorController

代码语言:javascript
复制
<?php

/**
 * ErrorController 
 */
class ErrorController extends \Phalcon\Mvc\Controller
{
    public function show404Action()
    {
        $this->response->setStatusCode(404, 'Not Found');
        $this->view->pick('404/404');
    }
}

和404视图(/views/404/404.volt)

代码语言:javascript
复制
<div align="center" id="fourohfour">
    <div class="sub-content">
        <strong>ERROR 404</strong>
        <br />
        <br />
        You have tried to access a page which does not exist or has been moved.
        <br />
        <br />
        Please click the links at the top navigation bar to 
        navigate to other parts of the site, or
        if you wish to contact us, there is information in the About page.
        <br />
        <br />
        [ERROR]
    </div>
</div>
票数 47
EN

Stack Overflow用户

发布于 2014-07-09 16:09:51

您可以使用路由来处理404找不到页面:

代码语言:javascript
复制
$router->notFound(array(
    "controller" => "index",
    "action" => "route404"
));

参考:http://docs.phalconphp.com/en/latest/reference/routing.html#not-found-paths

票数 13
EN

Stack Overflow用户

发布于 2013-09-13 04:02:12

还可以使用以下命令在errorController中设置标头

代码语言:javascript
复制
class ErrorController extends ControllerBase
{
     public function error404Action()
    {
        $this->response->setHeader('HTTP/1.0 404','Not Found');
        // $this->response->setHeader(404, 'Not Found'); <- did not work
    }
}

在此之前,在控制器中,当发生错误时,您可以转发到这个错误控制器。

代码语言:javascript
复制
class IndexController extends ControllerBase
{
    public function indexAction()
    {
        $id = (int)$this->getId($param);
        if ($id > 0) {

           // do you stuff
        } else {
           $this->dispatcher->forward(array(
               'controller' => 'error', 'action' =>   'error404')
           );
        }
    }
}

这是一个又快又脏的(?)如果你想从数据库中获取内容,并且想抛出一个错误,如果什么都没有找到,那么这个方法是很好的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14071261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档