Symfony3 您在添加 FOSUserBundle 时请求了一个不存在的服务 "validator.builder"
Symfony3 You have requested a non-existent service "validator.builder", while add FOSUserBundle
我有 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
Call Stack
/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';
}
}
修复您报告的错误很容易。只需添加:
services:
validator.builder:
class: Symfony\Component\Config\Definition\Builder\ValidationBuilder
给你的services.yml
...但是,这并不能解决我的所有问题,并且会导致更多问题,因为缺少所有来自 FOS 用户包的身份验证服务。我花了一段时间尝试添加这些服务定义,但我认为内心深处有些问题。 FOSUserBundle 还没有支持 Symfony 3 的标记版本。你可以尝试在 composer 中使用 dev-master
看看它是如何工作的,但它没有为我修复它。
我的建议是首先尝试使用默认的 Symfony3 应用程序(不使用微内核),如果仍然失败,请决定您更想要哪个,Symfony3 或 FOSUserBundle。
我解决了我的问题
services.yml:
Symfony\Component\Config\Definition\Builder\ValidationBuilder:
autowire: true
根据 documentation.
你的情况如何?
我有 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
Call Stack
/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';
}
}
修复您报告的错误很容易。只需添加:
services:
validator.builder:
class: Symfony\Component\Config\Definition\Builder\ValidationBuilder
给你的services.yml
...但是,这并不能解决我的所有问题,并且会导致更多问题,因为缺少所有来自 FOS 用户包的身份验证服务。我花了一段时间尝试添加这些服务定义,但我认为内心深处有些问题。 FOSUserBundle 还没有支持 Symfony 3 的标记版本。你可以尝试在 composer 中使用 dev-master
看看它是如何工作的,但它没有为我修复它。
我的建议是首先尝试使用默认的 Symfony3 应用程序(不使用微内核),如果仍然失败,请决定您更想要哪个,Symfony3 或 FOSUserBundle。
我解决了我的问题 services.yml:
Symfony\Component\Config\Definition\Builder\ValidationBuilder:
autowire: true
根据 documentation.
你的情况如何?