【发布时间】:2015-10-23 14:30:03
【问题描述】:
我正在尝试了解 Symfony 的工作原理,因此我正在研究它的内部结构。在app.php 我有这样的事情:
$loader = require_once __DIR__.'/../app/bootstrap.php.cache';
require_once __DIR__.'/../app/AppKernel.php';
$kernel = new AppKernel('prod', false);
$kernel->loadClassCache();
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
$response->send();
$kernel->terminate($request, $response);
我感兴趣的是handle() 函数。 AppKernel 扩展了 Kernel,实现了 KernelInterface。 handle() 函数在Kernel 中实现,而不是在AppKernel 中实现。 AppKernel 只注册捆绑包和配置文件。函数如下:
public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true)
{
if (false === $this->booted) {
$this->boot();
}
return $this->getHttpKernel()->handle($request, $type, $catch);
}
这意味着如果我修改这个函数来做某事,这应该发生在任何请求上。例如,在函数开头键入exit; 应该会破坏应用程序。但是,我的应用程序就像什么也没发生一样工作。我是在查看错误的函数还是出了什么问题?
我也多次清除缓存,并尝试了prod和dev环境,但都没有成功。
编辑
似乎与bootstrap.php.cache 文件有关。如果我将它改为autoload.php,它就可以工作。问题是删除它后我得到:
Fatal error: Class 'Symfony\Component\HttpKernel\Kernel' not found in E:\svn\medapp\app\AppKernel.php on line 8
这里有什么问题?如何运行不依赖自动加载器的应用程序?
【问题讨论】:
-
您正在加载 app/autoload.php 文件吗?也许用您正在使用的确切 $loader = 行更新您的问题。因为它应该可以工作。
-
它最初是 bootstrap.php.cache,我将其更改为 autoload.php。有什么区别,为什么即使它包含在 AppKernel.php 中也找不到内核?
-
你改变了什么?
-
而不是 $loader = require_once DIR.'/../app/bootstrap.php.cache';我有 $loader = require_once DIR.'/../app/autoload.php';
-
删除exit语句,使用
--no-warmup选项清除缓存,添加exit语句看看会发生什么
标签: php symfony httprequest