0

Symfony マイクロカーネルがあり、FOSUserBundle を追加しようとしています。このガイドを読んでインストールした後https://symfony.com/doc/master/bundles/FOSUserBundle/index.html「validor.builder」でエラーが発生しました

Fatal error: Uncaught Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException: You have requested a non-existent service "validator.builder". in /var/www/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/ContainerBuilder.php on line 754

コール スタック

/app_dev.php:0 Symfony\Component\HttpKernel\Kernel->handle( ) .../app_dev.php:9 Symfony\Component\HttpKernel\Kernel->boot( ) .../Kernel.php:166 Symfony\ Component\HttpKernel\Kernel->initializeContainer( ) .../Kernel.php:117 Symfony\Component\DependencyInjection\ContainerBuilder->compile( ) .../Kernel.php:477 Symfony\Component\DependencyInjection\Compiler\Compiler- >compile( ) .../ContainerBuilder.php:528 FOS\UserBundle\DependencyInjection\Compiler\ValidationPass->process( ) .../Compiler.php:104 Symfony\Component\DependencyInjection\ContainerBuilder->getDefinition( ) .. ./ValidationPass.php:41

symfony が symfony FrameworkBundle と連携するサービス validator.builder を見つけられないことがわかりました。どこに問題があり、何が欠けているのか、誰にも提案がありますか? ありがとう!

Composer.json:

{
    "require": {
        "symfony/symfony": "^3.1",
        "symfony/security": "^3.1",
        "symfony/monolog-bundle": "^3.0",
        "twig/twig": "^1.28",
        "alcaeus/mongo-php-adapter": "^1.0",
        "ext-mongo": "*",
        "mongodb/mongodb": "^1.0",
        "doctrine/mongodb-odm": "^1.1",
        "doctrine/mongodb-odm-bundle": "^3.2",
        "friendsofsymfony/user-bundle": "~2.0@dev",
        "symfony/validator": "^3.1"
    },
    "autoload": {
        "psr-4": {
            "": "src/"
        }
    } }

App_dev.php

<?php

use Symfony\Component\HttpFoundation\Request;

require __DIR__.'/../app/AppKernel.php';

$kernel = new AppKernel('dev', true);
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
$response->send();
$kernel->terminate($request, $response);

AppKernel.php

<?php

use Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait;
use Symfony\Component\Config\Loader\LoaderInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\HttpKernel\Kernel;
use Symfony\Component\Routing\RouteCollectionBuilder;

// require Composer's autoloader
$loader = require __DIR__.'/../vendor/autoload.php';

class AppKernel extends Kernel
{
    use MicroKernelTrait;

    public function registerBundles()
    {
        $bundles = array(
            new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
            new Symfony\Bundle\TwigBundle\TwigBundle(),
            new Symfony\Bundle\MonologBundle\MonologBundle(),
            new Symfony\Bundle\SecurityBundle\SecurityBundle(),
            new DebatesBundle\DebatesBundle(),
            new Doctrine\Bundle\MongoDBBundle\DoctrineMongoDBBundle(),
            new FOS\UserBundle\FOSUserBundle(),
            new Exten\FOSUserBundle\ExtenFOSUserBundle()
        );

        if ($this->getEnvironment() == 'dev') {
            $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
            $bundles[] = new \Symfony\Bundle\DebugBundle\DebugBundle();
        }

        return $bundles;
    }

    protected function configureContainer(ContainerBuilder $c, LoaderInterface $loader)
    {
        $loader->load(__DIR__ . '/config/config.yml');
        $loader->load(__DIR__.'/config/parameters.'.$this->getEnvironment().'.yml');

        // configure WebProfilerBundle only if the bundle is enabled
        if (isset($this->bundles['WebProfilerBundle'])) {
            $c->loadFromExtension('web_profiler', array(
                'toolbar' => true,
                'intercept_redirects' => false,
            ));
        }

        $loader->load(__DIR__.'/config/services.yml');
    }

    protected function configureRoutes(RouteCollectionBuilder $routes)
    {

        $routes->import(__DIR__ . '/../src/DebatesBundle/Routes/routes.yml', '/', 'yaml');
        $routes->import('@FOSUserBundle/Resources/config/routing/all.xml', '/');

        // import the WebProfilerRoutes, only if the bundle is enabled
        if (isset($this->bundles['WebProfilerBundle'])) {
            $routes->import('@WebProfilerBundle/Resources/config/routing/wdt.xml', '/_wdt');
            $routes->import('@WebProfilerBundle/Resources/config/routing/profiler.xml', '/_profiler');
        }
    }

    // optional, to use the standard Symfony cache directory
    public function getCacheDir()
    {
        return __DIR__ . '/cache/' .$this->getEnvironment();
    }

    // optional, to use the standard Symfony logs directory
    public function getLogDir()
    {
        return __DIR__ . '/logs';
    }
}
4

2 に答える 2

5

報告されたエラーを修正するのは簡単です。追加するだけです:

services:
  validator.builder:
    class: Symfony\Component\Config\Definition\Builder\ValidationBuilder

あなたのservices.ymlに

...しかし、これですべてが解決するわけではなく、FOS User バンドルに由来する認証サービスが見つからないという問題がさらに発生します。これらのサービス定義を追加しようとしてしばらく時間を費やしましたが、何かが根本的に間違っていると思います。FOSUserBundle には、Symfony 3 をサポートするタグ付きリリースがまだありません。コンポーザーで使用dev-masterしてみて、それがどのように機能するかを確認できますが、私にとっては修正されませんでした。

私の推奨事項は、最初にデフォルトの Symfony3 アプリ (マイクロカーネルを使用しない) で試してみることです。 それでも失敗する場合は、Symfony3 または FOSUserBundle のどちらを追加するかを決定してください。

于 2016-11-27T12:26:59.610 に答える
0

私はservices.ymlで私の問題を解決しました:

Symfony\Component\Config\Definition\Builder\ValidationBuilder:
    autowire: true

ドキュメントによると。

あなたの場合はどうですか?

于 2017-09-14T12:42:58.930 に答える