如何为 Kohana v3 应用程序设置自定义 404 页面

2023-11-21

如何才能做到这一点?我尝试这样做大约半个小时,但它变得非常烦人。您可能会认为,对于这样的框架来说,这应该是一个基本且容易设置的事情。我希望也许有一个我错过的简单方法,因为我开始认为,如果这样的基本设置很难设置,我根本不应该选择这个框架。

这是在我的 bootstrap.php 文件中,应该可以解决问题。

if ( ! defined('SUPPRESS_REQUEST'))
{
    /**
     * Execute the main request. A source of the URI can be passed, eg: $_SERVER['PATH_INFO'].
     * If no source is specified, the URI will be automatically detected.
     */ 
    $request = Request::instance();
    try
    {
        // Attempt to execute the response
        $request->execute();
    }
    catch (Exception $e)
    {
        if (Kohana::$environment === Kohana::DEVELOPMENT)
        {
            // Just re-throw the exception
            throw $e;
        }
        echo "ok";
        // Create a 404 response
        $request->status = 404;
        $view = View::factory('error404');
        $request->response = $view->render();
    }

    echo $request->send_headers()->response;
}

但我仍然得到

Fatal error: Uncaught Kohana_Request_Exception [ 0 ]: Unable to find a route to match the URI: test ~ SYSPATH\classes\kohana\request.php [ 674 ] thrown in C:\Xampp\htdocs\system\classes\kohana\request.php on line 674

而不是我的自定义 404 页面。 是的,Kohana::$environment被设定为Kohana::PRODUCTION;

它甚至没有到达echo "ok";部分。为什么异常没有被捕获?


替换最后一行引导程序.php with:

/**
* Set the production status
*/
define('IN_PRODUCTION', FALSE);

/**
* Execute the main request. A source of the URI can be passed, eg: $_SERVER['PATH_INFO'].
* If no source is specified, the URI will be automatically detected.
*/
$request = Request::instance();

try
{
    $request->execute();
}
catch (Kohana_Exception404 $e)
{
    $request = Request::factory('error/404')->execute();
}
catch (Kohana_Exception403 $e)
{
    $request = Request::factory('error/403')->execute();
}
catch (ReflectionException $e)
{
    $request = Request::factory('error/404')->execute();
}
catch (Kohana_Request_Exception $e)
{
    $request = Request::factory('error/404')->execute();
}
catch (Exception $e)
{
    if ( ! IN_PRODUCTION )
    {
        throw $e;
    }

    $request = Request::factory('error/500')->execute();
}

echo $request->send_headers()->response;

创建新控制器“错误.php":

<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Error extends Controller {

    public function action_404()
    {
        $this->request->status = 404;
        $this->request->headers['HTTP/1.1'] = '404';
        $this->request->response = 'error 404';
    }

    public function action_403()
    {
        $this->request->status = 403;
        $this->request->headers['HTTP/1.1'] = '403';
        $this->request->response = 'error 403';
    }

    public function action_500()
    {
        $this->request->status = 500;
        $this->request->headers['HTTP/1.1'] = '500';
        $this->request->response = 'error 500';
    }
} // End Error

创建两个文件(异常404.php и 异常403.php) in "kohana“ 文件夹:

<?php defined('SYSPATH') or die('No direct access');

class Kohana_Exception403 extends Kohana_Exception {

    public function __construct($message = 'error 403', array $variables = NULL, $code = 0)
    {
        parent::__construct($message, $variables, $code);
    }

} // End Kohana_Exception 403


<?php defined('SYSPATH') or die('No direct access');

class Kohana_Exception404 extends Kohana_Exception {

    public function __construct($message = 'error 404', array $variables = NULL, $code = 0)
    {
        parent::__construct($message, $variables, $code);
    }

} // End Kohana_Exception 404

现在你可以手动抛出 404 和 403 错误(你不能抛出错误 500 ;)

throw new Kohana_Exception404;
throw new Kohana_Exception403;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为 Kohana v3 应用程序设置自定义 404 页面 的相关文章

  • ORDER BY 字段内的 MySQL 子查询。 (没有内连接)

    有很多与此相关的问题 但都具有使用内部联接的相同答案 这 我认为 在这里是不可能的 如果我错了请告诉我 我现在正在做的是调用两个不同的 mysql 查询来获取结果 它工作完美 db gt query SELECT FROM meta WHE
  • 检查php中位字段是否打开的正确方法是什么

    检查位字段是否打开的正确方法是什么 在 php 中 我想检查来自 db mysql 的位字段是否打开 这是正确的方法吗 if bit 1 还有其他方法吗 我看到有人使用代码ord http jameslow com 2008 08 12 m
  • 搜索引擎如何找到相关内容? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Google 在解析网络时如何找到相关内容 例如 Google 使用 PHP 原生 DOM 库来解析内
  • Yii 使用 ajax 进行分页

    我需要使用ajax启用分页 我的代码 控制器 更新内容ajax function actionIndex dataProvider new CActiveDataProvider News array pagination gt array
  • posts_search 中的自定义查询

    如何使用此查询作为我的自定义搜索查询 add filter posts search my search is perfect 20 2 function my search is perfect search wp query sWord
  • 扩展蓝图类?

    我想覆盖timestamps 函数中发现Blueprint班级 我怎样才能做到这一点 e g public function up Schema create users function Blueprint table table gt
  • 将“php”作为 shell 脚本执行时的自定义 php.ini 文件

    我在跑php作为 shell 脚本 我不确定 shell脚本 是否正确 该文件以 usr bin php 这很好用 但 MongoDB 类没有正确加载php ini文件 具有extension mongo so 未使用 我该如何使用它tha
  • 如何在原则 2 迁移中删除外键

    我想在原则 2 迁移中删除外键 但没有 dropForeignKeyConstraint 有谁知道怎么丢掉吗 public function down Schema schema table schema gt getTable table
  • 学说迁移后备

    我们正在使用原则迁移 当迁移包含多个操作并且其中一个操作失败时 通常会出现问题 例如 如果迁移添加了 5 个外键 其中第 5 个失败 而字段长度不同 则修复字段错误并重新生成迁移不会not修复整个问题 而现在出现一个与 4 个密钥已存在有关
  • 从 .phar 存档中提取文件

    对于 Phar 文件 我完全错过了一些东西 我正在安装一个需要 phpunit pdepend 和其他依赖项的项目 我将它们作为 phar 文件获取 但是 我无法使用命令行工具 php 命令 从中提取文件 我用谷歌搜索了这个问题 但没有发现
  • MySQL 追加字符串

    How can I append a string to the end of an existing table value Let s say I have the table below And let s say that Mari
  • PHP 与 MySQL 查询性能( if 、 函数 )

    我只看到这个artice http www onextrapixel com 2010 06 23 mysql has functions part 5 php vs mysql performance 我需要知道在这种情况下什么是最好的表
  • PHP preg_filter 返回意外的长值

    尝试在 Woocommerce 中删除标签并过滤值 但无法以正确的格式获取它 有东西有腥味 我正在使用WC gt cart gt get cart subtotal 来检索该值 在此示例中 我的值是 2 429kr 原始返回值是 span
  • 如果循环中内存超出,我可以在 for 循环中抛出异常吗?

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如何处理 foreach 循环中发生
  • 表单提交后如何保留选择字段中的选定值?

    我有一个用于将票证上传到数据库的主页 我有一个选择字段 我想保留用户在提交表单之前选择的值 但它没有发生 这是我选择字段的代码
  • php 错误 fopen(): 文件名不能为空

    发送带有附件代码的电子邮件工作正常 最近我们已将文件传输到另一个托管服务器 idk 发生了什么 它显示以下错误 警告 fopen 第 106 行 home hugerecruitmetnt public html validatecva p
  • 一次播种多行 laravel 5

    我目前正在尝试为我的用户表播种 如果我像这样尝试 2 行 就会失败 如果我只使用单个数组而不是 users 数组内的 2 个数组来创建一些假数据 那么效果很好 我做错了什么 正确的方法是什么 class UserTableSeeder ex
  • ini_set 'session.gc_maxlifetime' 为 1 天

    If I do ini set session gc maxlifetime 86400 这是否意味着用户可以将浏览器留在同一页面 非活动状态 最多 1 天 而不必担心会话被垃圾收集并被注销 如果服务器配置不支持此功能会发生什么 它会给我一
  • post php mysql 的拆分关键字

    我有一个表存储帖子 ID 它的标签如下 Post id Tags 1 keyword1 keyword2 keyword3 我想循环遍历该表中的每一行并执行以下操作 将关键字1 关键字2 关键字3放入新表中 word id word val
  • 对具有混合类型值的数组进行数字排序

    我有一个像这样的混合数组 fruits array lemon Lemon 20 banana apple 121 40 50 然后申请sort 其功能如下 sort fruits SORT NUMERIC foreach fruits a

随机推荐

  • numpy 向量化方法来计算整数数组中的非零位

    我有一个整数数组 int1 int2 intn 我想计算这些整数的二进制表示中有多少个非零位 例如 bin 123 gt 0b1111011 there are 6 non zero bits 当然 我可以循环整数列表 使用bin and
  • 在 vs code 中调试 webpack 开发服务器?

    是否可以配置 launch json 来调试 webpack 开发服务器 就我而言 我正在开发一个通用 通过 Express 服务器渲染 React 应用程序 如果能够直接在 VS Code 中调试服务器端 那就太好了 我一直在使用 Web
  • PHP/MySQL - 将数组数据存储为 JSON,不好的做法?

    我想知道将数组作为 JSON 字符串存储在 mysql 文本字段中是否是一个好的做法 我正在创建一张发票 允许用户向发票添加无限数量的产品 提交表单后 它会删除所有空白项目等 但我通常会留下 2 5 个项目 具体取决于情况 每个商品都有一个
  • 如何以编程方式了解天蓝色角色的当前区域?

    我需要以编程方式找到我当前角色运行的当前区域 例如 美国西部 或 美国东部 有没有API可以找到这个 考虑使用获取云服务在服务管理 API 中 当您提供您的角色所属的服务时 您可以检索类似于以下内容的响应 请注意我已加星标的位置字段
  • INSERT ... SELECT 是原子事务吗?

    我使用这样的查询 INSERT INTO table SELECT FROM table2 t2 JOIN WHERE table2 date lt now 1 day INTERVAL FOR UPDATE OF t2 SKIP LOCK
  • 在 T-SQL 中联接来自 XML 的数据

    我有以下 XML 消息 DECLARE XML AS XML SET XML
  • Visual Basic 中的 Action(Of T),位于 List(Of T).ForEach 中

    我到处搜索有关如何使用此功能的文档 当循环我could写起来很简单 不需要时间 我真的很想学习如何使用它 基本上我有一堂课 比如说 Widget 有一个Save sub 不返回任何内容 所以 Dim w as New Widget w Sa
  • Google Datastore 查询和最终一致性

    我想确认我对 Google 数据存储中最终一致性的理解 假设我有一个定义如下的实体 使用 ndb class Record ndb Model name ndb StringProperty content ndb BlobProperty
  • 有没有按类前缀的 CSS 选择器?

    我想将 CSS 规则应用于其中一个类与指定前缀匹配的任何元素 例如 我想要一个适用于具有以以下开头的类的 div 的规则status 以下片段中的 A 和 C 但不是 B div class foo class status importa
  • 使用不同的查询字符串缓存图像(S3 签名的 URL)

    我想知道是否可以让浏览器缓存带有签名网址的图像 我想要的是为每个请求生成一个新的签名网址 相同的图像 但具有更新的签名 但不要让浏览器每次都重新下载它 那么 假设与缓存相关的标头设置正确 并且除了查询字符串之外所有 URL 都是相同的 有什
  • 这两种添加字符串的情况有什么区别?

    我注意到当我初始化一个字符串时 编译器报告了一个我没有预料到的错误 例如 include
  • Java JLabel,将文本中断到下一行?

    好久没提问了 我正在用 Java 开发一个应用程序 其中JLabels被使用 不管怎样 正如你可能从下面的图片中看到的 也可能看不到的 上面写着的文字Category Test被打断并最终说Categor 反而 一旦文本填满标签的宽度 有什
  • 找到两个总和相等且总和最大的子序列?

    我已经删除了这个问题的所有故事情节 Q 给你 N 个数字 你必须找到 2 个等和子序列 且总和最大 您不一定需要使用所有数字 Eg 1 5 1 2 3 4 1 Sub sequence 1 2 3 sum 5 Sub sequence 2
  • 使用 SCRAM-SHA-1 在猫鼬中进行身份验证

    我最近从 MongoDB 2 6 升级到 3 0 4 还将 Mongoose 版本升级到 4 0 0 现在每当我尝试使用 mongoose 连接到 mongodb 时 mongoose connect mongodb user passwo
  • 无法从 IP 访问 Visual Studio 项目,只能访问 http://localhost

    我正在视觉工作室中运行一个项目 我点击运行 它会启动 IE 并指向http localhost 1267 如果我尝试访问http 10 211 55 3 1267 机器的IP 即使从同一台机器访问 我也什么也得不到 IIS7运行良好 该机器
  • 在 Python 中使用正则表达式确定字符串的不匹配部分

    假设我有一个字符串 a foobar 我使用 a s 来匹配 a 有没有办法轻松返回 foobar 什么不匹配 我想使用正则表达式来查找命令词 并使用正则表达式从字符串中删除命令词 我知道如何使用以下方法来做到这一点 mystring re
  • 在Python中查找列表中的子字符串[重复]

    这个问题在这里已经有答案了 背景 示例列表 mylist abc123 def456 ghi789 如果子字符串匹配 我想检索一个元素 例如abc Code sub abc print any sub in mystring for mys
  • XUnit - InvalidOperationException:无法使用应用程序根找到解决方案根

    我有一个 Web API NET Core 2 2 项目 我正在尝试对其进行集成测试 我已按照指南进行操作微软 从测试运行器和命令行启动它们时 测试通过 它们应该正确配置 我可以通过 WebApplicationFactory HTTP 客
  • 类型 无法创建 List 的通用数组

    假设我有 FooClass 类 public class FooClass 以下行给出了以下编译错误 Note I want to create an array of length 4 of Lists of FooClass List
  • 如何为 Kohana v3 应用程序设置自定义 404 页面

    如何才能做到这一点 我尝试这样做大约半个小时 但它变得非常烦人 您可能会认为 对于这样的框架来说 这应该是一个基本且容易设置的事情 我希望也许有一个我错过的简单方法 因为我开始认为 如果这样的基本设置很难设置 我根本不应该选择这个框架 这是