我知道为什么会引发此异常,这不是问题所在,但我无法捕获此异常。
- 此异常在
CORE/src/Http/Middleware/CsrfProtectionMiddleware.php
第286行中抛出:*
if (!$cookie || !is_string($cookie)) {
throw new InvalidCsrfTokenException(__d('cake', 'Missing or incorrect CSRF cookie type.'));
}
当我在CakePHP错误窗口中查看堆栈的长列表时,我很清楚我无法开始修改CORE文件,因为在下一次CakePHP更新/升级时,我的修改都丢失了。
我唯一可以修改并且应该很容易处理的脚本是webroot/index.php
,它也在调用堆栈的第一个位置提到:
运行根目录/web根目录/index.php:50
我被困在这里。我试过的:
try/catch ( \Exception )
try/catch ( \Cake\Http\Exception\InvalidCsrfTokenException )
- 使用
set_exception_handler()
没有任何帮助,这意味着,我总是得到下面的错误窗口。在这个窗口中,你可以在左边看到很长的脚本调用栈,这些脚本被调用直到抛出异常。而且这甚至不是所有的脚本。所以它实际上是嵌套的。
我的问题:
我如何在最顶级的PHP脚本webroot/index.php
中捕获此异常-在此脚本下面是另外16个脚本,直到抛出异常。我不想修改CakePHP核心文件。
我运行的是CakePHP 4.1.4
1条答案
按热度按时间kqhtkvqz1#
您无法在
index.php
中捕获该异常,因为它已经被错误处理程序中间件捕获了,该中间件会显示一个漂亮的错误屏幕,但您只会在调试模式中看到该屏幕,以防您担心。捕获该异常的第一个机会是一个自定义中间件,您必须将其放置在错误处理程序中间件和CSRF保护中间件之间,大致如下: