2013-07-11 3 views
8

Я пытаюсь развернуть мой проект Symfony2. Когда я запускаю командуКласс Не найден в AppKernel.php

php app/console cache:clear --env=prod --no-debug 

Я получаю следующее сообщение об ошибке:

PHP Fatal error: Class 'Acme\MainBundle\AcmeMainBundle' not found in /var/www/html/app/AppKernal.php on line 24 

Это в AppKernal.php

public function registerBundles() 
{ 
    $bundles = array(
     ... 
     new Acme\MainBundle\AcmeMainBundle(), 
    ); 
    ... 
} 

Похоже, что есть проблема с пространством имен?

+2

- это классы, загруженные или загруженные вручную? – DevZer0

+0

Я не уверен. Что ты имеешь в виду/как мне понять? –

ответ

2

Оказывается, мне нужно было добавить это на автозагрузчик. Спасибо @ комментарий DevZer0.

$loader->add('Acme', __DIR__ . '/../src');

+0

Где вы должны добавить это? В 'app/autoload.php'? – Sam

+0

Простите, что прошло. Я не помню. Это кажется правильным. –

+0

Это не решение, это всего лишь обходной путь/патч (хотя он может работать). –

5

Есть такая же проблема. Я просто удалил мою папку поставщика

rm -rf vendor 

и перезапустить обновление композитора .. тогда все было хорошо

composer update 
1

Есть такую ​​же проблему?

Судо гт -rf поставщик/

composer install 

или

composer update 
0

Удаление всей папки не было очень убедительно для меня, так что я пытался делать только следующее, и она работала:

$ composer update 

Затем я проверил его с:

$ php bin/console assets:install web --symlink 
$ php bin/console cache:clear 
0

У меня есть все вышеперечисленные ошибки раньше, но я нашел аналогичную проблему при запуске php app/console doctrine:migrations:status.

Проблема была в том, что я не импортировал константу, которая использовалась как часть аннотации. Например:

/** 
* Either "OUTBOUND" (we send out) or "INBOUND" (we receive). 
* 
* @var string 
* 
* @ORM\Column(name="Direction", type="string", length=20, nullable=true) 
* 
* @Assert\Choice(
*  choices = {BatchDirections::OUTBOUND,BatchDirections::INBOUND}, 
*  message = "Choose a valid direction." 
*) 
*/ 
private $Direction = BatchDirections::INBOUND; 

Я не импортировал файл BatchDirections.

Устранение проблемы с разрешением use Nora\BatchBundle\Constants\BatchDirections;.

2

Была такая же проблема после добавления пакета с генератором кода с Symfony 3.2. Я должен добавить этот новый пакет в разделе автозагрузки composer.json после AppBundle:

(...) 
"autoload": { 
    "psr-4": { 
     "AppBundle\\": "src/AppBundle", 
     "CoreBundle\\": "src/CoreBundle" 
    }, 
(...) 
+1

и запустить с консоли «композитор-самосвал» – teMkaa

7

Если вы получаете расслоение не найдена ошибку в Symfony, в composer.json, изменить раздел psr-4 под autoload раздела как это.

"autoload": { 
    "psr-4": { 
     "": "src/" 
    }, 
}, 

Поступая таким образом, вы не должны явно добавить новый пакет пространств имен при создании нового сверток.

+1

Lifesaver! Я просто потратил несколько часов, чтобы найти это. Я думаю, что я получил эту конфигурацию 'AppBundle \\ ...' по умолчанию от 'composer require symfony/symfony' –

3

Если бы это случилось в Symfony 3 (я не проверял это в Symfony 2),

  1. Убедитесь, что пакет зарегистрирован в AppKernal.php как:

    public function registerBundles() 
    { 
        $bundles = array(
         ... 
         new YourBundle\YourBundle(), 
        ); 
        ... 
    } 
    
  2. Check если вы обновили composer.json

    "autoload": { 
        "psr-4": { 
         "AppBundle\\": "src/AppBundle", 
         "YourBundle\\": "src/YourBundle" 
        }, 
        "classmap": [ "app/AppKernel.php", "app/AppCache.php" ] 
    }, 
    
  3. Run composer update от ваша консоль

Смежные вопросы