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 5带微内核的微应用程序抛出错误“;控制器没有容器集“;_Php_Symfony_Symfony5 - Fatal编程技术网

Php Symfony 5带微内核的微应用程序抛出错误“;控制器没有容器集“;

Php Symfony 5带微内核的微应用程序抛出错误“;控制器没有容器集“;,php,symfony,symfony5,Php,Symfony,Symfony5,我正在尝试用Symfony 5构建一个微型应用程序,单文件方法是可行的,但使用Twig等的高级示例却不行 我按照此处发布的确切描述构建了一个测试项目:,我拥有与示例中相同的目录结构和文件内容: 这是启动应用程序的index.php: // public/index.php use App\Kernel; use Doctrine\Common\Annotations\AnnotationRegistry; use Symfony\Component\HttpFoundation\Request

我正在尝试用Symfony 5构建一个微型应用程序,单文件方法是可行的,但使用Twig等的高级示例却不行

我按照此处发布的确切描述构建了一个测试项目:,我拥有与示例中相同的目录结构和文件内容:

这是启动应用程序的index.php:

// public/index.php
use App\Kernel;
use Doctrine\Common\Annotations\AnnotationRegistry;
use Symfony\Component\HttpFoundation\Request;

$loader = require __DIR__.'/../vendor/autoload.php';
// auto-load annotations
AnnotationRegistry::registerLoader([$loader, 'loadClass']);

$kernel = new Kernel('dev', true);
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
$response->send();
$kernel->terminate($request, $response);
这是具有(示例)动作的微控制器:

调用Kernel.php中的“configureContainer”方法并运行时不会出错:

protected function configureContainer(ContainerBuilder $c, LoaderInterface $loader)
{
    $loader->load(__DIR__.'/../config/framework.yaml');

    // configure WebProfilerBundle only if the bundle is enabled
    if (isset($this->bundles['WebProfilerBundle'])) {
        $c->loadFromExtension('web_profiler', [
            'toolbar' => true,
            'intercept_redirects' => false,
        ]);
    }
}
但是项目仍然没有运行,调用有效的路由(如示例中的“/random/10”)会产生错误:“”App\Controller\microcontroler“没有容器集,您是否忘记将其定义为服务订户?

my composer.json如下所示:

"doctrine/annotations": "^1.8",
"symfony/config": "^5.0",
"symfony/dependency-injection": "^5.0",
"symfony/framework-bundle": "^5.0",
"symfony/http-foundation": "^5.0",
"symfony/http-kernel": "^5.0",
"symfony/routing": "^5.0",
"symfony/twig-bundle": "^5.0",
"symfony/web-profiler-bundle": "^5.0",
"symfony/yaml": "^5.0",

我错过了什么?任何提示都非常感谢。

找到了:所提到的教程在配置文件中缺少一些条目

# config/framework.yaml
framework:
    secret: S0ME_SECRET
    profiler: { only_exceptions: false }
是原始版本,请将其添加到文件中以使微应用程序正常工作:

services:
    _defaults:
        autowire: true
        autoconfigure: true
        public: false
    App\:
        resource: '../src/*'
        exclude: '../src/{DependencyInjection,Entity,Migrations,Tests,Kernel.php}'
上面的部分取自常规的symfony配置文件,在micro应用程序教程中不知怎么丢失了

App\Controller\microcontroler“没有容器集,您忘记将其定义为服务订户了吗?”

它告诉你,微控制器需要像服务一样定义。根据,微控制器不应扩展AbastracController

使用定义为服务的控制器时,仍然可以扩展AbstractController基本控制器并使用其快捷方式。但是,你不需要!您可以选择不扩展任何内容,并使用依赖项注入来访问不同的服务

因此,控制器的定义如下:

namespace App\Controller;

use Symfony\Component\Routing\Annotation\Route;

class MicroController
{
    /**
     * @Route("/random/{limit}")
     */
     public function randomNumber($limit)
     {
        $number = random_int(0, $limit);

        return $this->render('micro/random.html.twig', [
            'number' => $number,
        ]);
     }
}

找到了解决方案(无法回答问题,因为它已关闭):教程缺少重要的配置条目(添加服务/u默认值/autowire和App\/resource等,就像在常规Symfony项目中一样)。我无法在此处发布,因为他们太想发表评论了:(感谢您的回答。如果微控制器不应该扩展AbstractController,那么Micro应用程序的文档是错误的,请参阅-此处微控制器扩展AbstractController,但要使其工作,您必须在framework.yaml中应用我的修复。无论哪种方法都是一种解决方法,我认为首先应该修复官方页面 :)
namespace App\Controller;

use Symfony\Component\Routing\Annotation\Route;

class MicroController
{
    /**
     * @Route("/random/{limit}")
     */
     public function randomNumber($limit)
     {
        $number = random_int(0, $limit);

        return $this->render('micro/random.html.twig', [
            'number' => $number,
        ]);
     }
}