Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony';调用的内核句柄()函数?_Php_Symfony_Httprequest - Fatal编程技术网

Php Symfony';调用的内核句柄()函数?

Php Symfony';调用的内核句柄()函数?,php,symfony,httprequest,Php,Symfony,Httprequest,我试图理解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 = Req

我试图理解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

这里有什么问题?如何运行不依赖自动加载器的应用程序?

Symfony使用该函数自动加载所需的每个类。它使得所有require_once规则都不必要,而只加载我们需要的类。我在bootstrap.php.cache中找到了这个spl\u autoload\u寄存器,因此,如果您从加载中跳过此文件,那么您也会终止自动加载过程。

是否正在加载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
语句并查看发生了什么事SYMFONY实际上没有使用spl_autoload_register()(它依赖于使用它的Composer autoloader)。由于某些类(如Kernel)总是需要的,因此它们包含在bootstrap.php.cache文件中。如果希望始终使用自动加载程序,则应要求使用
vendor/autoload.php
而不是
app/bootstrap.php.cache
。无论如何,这个答案并没有真正回答这个问题,应该是一个注释。那么为什么删除自动加载器会导致应用程序在AppKernel中找不到内核类(它扩展了内核)?因为包含了名称空间,所以它使用了Symfony\Component\HttpKernel\Kernel;为什么没有自动加载器它就找不到它?如何让它在没有自动加载器的情况下找到它?或者如何手动包含它?