2013-07-11 12 views
8

Sto provando a distribuire il mio progetto Symfony2. Quando eseguo il comandoClasse Non trovata in AppKernel.php

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

ottengo il seguente errore:

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

Questa è la in AppKernal.php

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

Sembra che ci sia un problema con lo spazio dei nomi?

+2

le classi sono caricate automaticamente o caricate manualmente? – DevZer0

+0

Non ne sono sicuro. Cosa intendi/come faccio a capire? –

risposta

2

Risulta necessario aggiungere questo al caricatore automatico. Grazie al commento di DevZer0.

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

+0

Dove hai dovuto aggiungere questo? In 'app/autoload.php'? – Sam

+0

Scusa è passato un po 'di tempo. Non ricordo. Sembra corretto. –

+0

Questa non è la soluzione, questa è solo una soluzione/patch (anche se potrebbe funzionare). –

5

avuto lo stesso problema. Ho appena cancellato la mia cartella vendor

rm -rf vendor 

e rilanciare un aggiornamento del compositore .. allora tutto andava bene

composer update 
1

hanno lo stesso problema?

sudo rm -rf venditore/

composer install 

o

composer update 
0

rimuovere l'intera cartella non era molto convincente per me, così ho provato a fare solo quanto segue e ha funzionato:

Quindi ho controllato con:

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

Ho riscontrato tutti gli errori precedenti, ma ho riscontrato un problema simile durante l'esecuzione di php app/console doctrine:migrations:status.

Il problema era che non avevo importato una costante che veniva usata come parte di un'annotazione. Ad esempio:

/** 
* 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; 

Non avevo importato il file BatchDirections.

La risoluzione dell'importazione con use Nora\BatchBundle\Constants\BatchDirections; ha risolto il problema.

2

Aveva lo stesso problema dopo aver aggiunto un pacchetto con il generatore di codice con Symfony 3.2. Ho dovuto aggiungere questo nuovo pacchetto nella sezione di caricamento automatico del composer.json dopo l'AppBundle:

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

ed esegui dalla console "compositore dump-autoload" – teMkaa

7

Se hai trovato un pacco non trovato errore in Symfony, in composer.json, modificare la sezione psr-4 sotto autoload sezione come questo.

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

In questo modo, non c'è bisogno di aggiungere in modo esplicito i nuovi spazi dei nomi fascio quando si crea un nuovo pacchetto.

+1

Lifesaver! Ho appena passato ore a trovarlo. Penso di aver ottenuto questa 'configurazione AppBundle \\ ...' da 'compositore richiede symfony/symfony' –

3

Se questo è accaduto in Symfony 3 (non ho ancora testato questo in symfony 2),

  1. Assicurarsi che il bundle sia registrato nel AppKernal.php come:

    public function registerBundles() 
    { 
        $bundles = array(
         ... 
         new YourBundle\YourBundle(), 
        ); 
        ... 
    } 
    
  2. Controllare se hai aggiornato composer.json

    "autoload": { 
        "psr-4": { 
         "AppBundle\\": "src/AppBundle", 
         "YourBundle\\": "src/YourBundle" 
        }, 
        "classmap": [ "app/AppKernel.php", "app/AppCache.php" ] 
    }, 
    
  3. Run composer update da la tua console