Я попробовал решение Кевина Бонда на этот вопрос. Он отлично работает при использовании приложения в браузере, но выдает следующее исключение для консольных команд. Я трижды проверил мой синтаксис для опечаток …
Код точно такой же, как в приведенном выше вопросе. Единственное, что я изменил, это название комплекта.
$ php app/console
<?
// src/AppBundle/DependencyInjection/Compiler/ValidatorPass.php
namespace AppBundle\DependencyInjection\Compiler;
use Symfony\Component\Finder\Finder;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
class ValidatorPass implements CompilerPassInterface
{
public function process(ContainerBuilder $container)
{
$validatorBuilder = $container->getDefinition('validator.builder');
$validatorFiles = array();
$finder = new Finder();
foreach ($finder->files()->in(__DIR__ . '/../../Resources/config /validation') as $file) {
$validatorFiles[] = $file->getRealPath();
}
$validatorBuilder->addMethodCall('addYamlMappings', array($validatorFiles));
}
}[RuntimeException]
The autoloader expected class "AppBundle\DependencyInjection\Compiler\ValidatorPass"to be defined in file "/home/mt/devel/netsite/phpprojekte/circle8/events/src/AppBundle/DependencyInjection/Compiler/ValidatorPass.php".
The file was found but the class was not in it, the class name or namespace probably has a typo.
() at /.../vendor/symfony/symfony/src/Symfony/Component/Debug/DebugClassLoader.php:186
Symfony\Component\Debug\DebugClassLoader->loadClass() at n/a:n/a
spl_autoload_call() at /.../src/AppBundle/AppBundle.php:17
AppBundle\AppBundle->build() at /.../app/bootstrap.php.cache:2632
Symfony\Component\HttpKernel\Kernel->prepareContainer() at /.../app/bootstrap.php.cache:2611
Symfony\Component\HttpKernel\Kernel->buildContainer() at /.../app/bootstrap.php.cache:2564
Symfony\Component\HttpKernel\Kernel->initializeContainer() at /home/.../app/bootstrap.php.cache:2344
Symfony\Component\HttpKernel\Kernel->boot() at /.../vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Console/Application.php:70
Symfony\Bundle\FrameworkBundle\Console\Application->doRun() at /.../vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:126
Symfony\Component\Console\Application->run() at /.../app/console:27
Я попробовал любой способ отладки, который только мог себе представить. Пожалуйста помоги.
Единственное, что я могу сейчас сделать, это закомментировать вызов в моем AppBundle.php при использовании консоли и комментировать его обратно при использовании браузера.
Исправить разрешения класса
$ sudo chmod -R 777 src/AppBundle/DependencyInjection/
$ sudo -u daemon php app/console cache:clear --env=dev
=> та же ошибка.
Удалить кеш & попытаться разогреть
$ sudo rm -rf app/cache/*
$ sudo chmod 777 app/cache
$ sudo app/console cache:warmup
=> та же ошибка.
Вручную удалите кеш (стиль rm -rf), а затем разогрейтесь от имени пользователя root. Исправьте права доступа и вы GTG.
Я очень расстроился и не знаю, что я делаю неправильно. Я исправил это ДЕЙСТВИТЕЛЬНО грязный путь …
Мой AppBundle.php теперь выглядит так:
<?php
namespace AppBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Finder\Finder;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
//use AppBundle\DependencyInjection\Compiler\ValidatorPass;
class AppBundle extends Bundle
{
// ...
public function build(ContainerBuilder $container)
{
parent::build($container);
$container->addCompilerPass(new ValidatorPass());
}
// ...
}
class ValidatorPass implements CompilerPassInterface {
public function process(ContainerBuilder $container)
{
$validatorBuilder = $container->getDefinition('validator.builder');
$validatorFiles = array();
$finder = new Finder();
foreach ($finder->files()->in(__DIR__ . '/Resources/config/validation') as $file) {
$validatorFiles[] = $file->getRealPath();
}
$validatorBuilder->addMethodCall('addYamlMappings', array($validatorFiles));
}
}
Мне действительно не нравится это, и я был бы очень благодарен за реальное решение проблемы.