【发布时间】:2018-02-07 12:05:49
【问题描述】:
我使用的是 CakePHP 1.2。我正在研究别人写的 CakePHP 代码的逻辑。我正在检查以下控制器:
<?php
// For serving up images or other files.
class ImagesController extends AppController
{
function __setupDir($destination)
{
..........
}
function view()
{
..........
}
}
?>
我知道 CakePHP 有一些约定,这些约定定义了当请求与 URL 匹配时如何调用特定操作。例如,鉴于上面的 ImagesController,我需要这个文件:
app/views/images/view.ctp
然后我需要将浏览器指向如下内容:
http://localhost/myapplication/images/view
这应该执行为上述 ImagesController 控制器定义的“view()”函数。这就是 CakePHP 1.2 约定的工作方式。
根据https://book.cakephp.org/1.2/en/The-Manual/Developing-with-CakePHP/Controllers.html,“动作是用于显示视图的控制器方法。动作是控制器的单一方法。”在我的例子中,“view()”函数是一个动作,但在我看到的应用程序中,它并没有被用来显示视图。在我正在研究的代码中,我看到的是,有时在网站中加载图片或图像时,会执行 ImagesController 控制器的“view()”函数。我试图准确了解触发此“view()”功能的原因。我知道访问http://localhost/myapplication/images/view 时不会发生这种情况。在 CakePHP 中,或者特别是在 CakePHP 1.2 中,是否有另一种方法来执行控制器操作?我只需要知道并找到触发这个“view()”函数的代码。谢谢。
【问题讨论】:
-
记录回溯并节省大量时间
Debugger::log('foo')。 book.cakephp.org/1.2/en/The-Manual/Common-Tasks-With-CakePHP/… -
我可以从 core/cake/libs/controller/image_controller.php 等文件中使用它吗?
-
核心文件夹中应该没有这样的文件,但通常是的,您可以在控制器中运行该代码。
-
谢谢@ndm。 CakeLog::write('debug', Debugger::trace()); 的结果是:Object::dispatchMethod() - CORE\cake\libs\object.php,第 128 行 Dispatcher::_invoke() - CORE\cake\dispatcher.php,第 247 行 Dispatcher::dispatch() - CORE\cake\dispatcher .php,第 211 行 [main] - APP\webroot\index.php,第 99 行。它并没有真正给我提示,我需要弄清楚是什么触发了我在问题中提到的这个“函数 view()”。我试图了解代码“view()”在哪里被触发或执行。我希望 Debugger::trace() 不仅从 CakePHP 核心代码返回一些东西,而且从应用程序返回一些东西。
-
该方法使用 PHPs
debug_backtrace(),并且应该只排除call_user_func_array和trigger_error。因此,如果没有更多条目,则很可能没有涉及更多代码。您可以尝试从异常对象 ($ex = new Exception(); $trace = $ex->getTraceAsString()) 中获取格式化的堆栈跟踪,但结果可能相似。
标签: php cakephp cakephp-1.2