2012-03-27 29 views
7

Tengo el error [Solución al final de la pregunta]Symfony2 - Fatal error con paquetes

Fatal error: Class 'symblog\Blogger\BlogBundle\SymblogBundle' not found in 
/var/www/Symfony/app/AppKernel.php on line 20 

fundé la cuestión How to install or integrate bundles in Symfony2, pero las soluciones dadas no me ayudaron, porque ya hizo lo que se sugiere allí. Estoy siguiendo el tutorial symblog.co.uk excepto que creé en

app/config/routing.yml 

un

*.php resource 

Gracias de antemano!

Tengo que añadir que al registrar el paquete de consola Tengo el error

The command was not able to configure everything automatically. 
You must do the following changes manually. 

Y las instrucciones:

- Edit the app/autoload.php file and register the bundle 
namespace at the top of the registerNamespaces() call: 
'symblog\Blogger\BlogBundle' => '/var/www/Symfony/blog', 

que he seguido.

AppKernel.php

class AppKernel extends Kernel 
{ 
public function registerBundles() 
{ 
    $bundles = array(
     //.. 
     new symblog\Blogger\BlogBundle\SymblogBundle(), 
    ); 

/app/config/routing.yml

SymblogBundle: 
resource: "@SymblogBundle/Resources/config/routing.php" 
prefix: /

Como solicitada: /app/config/config.yml

imports: 
    - { resource: parameters.ini } 
    - { resource: security.yml } 

framework: 
    #esi:    ~ 
    #translator:  { fallback: %locale% } 
    secret:   %secret% 
    charset:   UTF-8 
    router:   { resource: "%kernel.root_dir%/config/routing.yml" } 
    form:   true 
    csrf_protection: true 
    validation:  { enable_annotations: true } 
    templating:  { engines: ['twig'] } #assets_version: SomeVersionScheme 
    session: 
     default_locale: %locale% 
     auto_start:  true 

# Twig Configuration 
twig: 
    debug:   %kernel.debug% 
    strict_variables: %kernel.debug% 

# Assetic Configuration 
assetic: 
    debug:   %kernel.debug% 
    use_controller: false 
    # java: /usr/bin/java 
    filters: 
     cssrewrite: ~ 
     # closure: 
     #  jar: %kernel.root_dir%/java/compiler.jar 
     # yui_css: 
     #  jar: %kernel.root_dir%/java/yuicompressor-2.4.2.jar 

# Doctrine Configuration 
doctrine: 
    dbal: 
     driver: %database_driver% 
     host:  %database_host% 
     port:  %database_port% 
     dbname: %database_name% 
     user:  %database_user% 
     password: %database_password% 
     charset: UTF8 

    orm: 
     auto_generate_proxy_classes: %kernel.debug% 
     auto_mapping: true 

# Swiftmailer Configuration 
swiftmailer: 
    transport: %mailer_transport% 
    host:  %mailer_host% 
    username: %mailer_user% 
    password: %mailer_password% 

jms_security_extra: 
    secure_controllers: true 
    secure_all_services: false 

[Editar] La solución fue muy fácil después de la respuesta de @Clamidity de que los paquetes generalmente se encuentran en src/Blogger/SymBlogBundle/BloggerSymBlogBundle.php

Mientras que la configuración usando la consola se relacionó sobre la ubicación del paquete y el valor predeterminado fue /../src pero cambié a /../blog. Y, por supuesto, no funcionará, Symfony estaba buscando en el lugar equivocado. Lo que hice fue mover las carpetas dentro/blog a/src y todo salió bien.

+0

¿Recibió el nombre de la clase a la derecha? ¿Estás seguro de que es "symblog \ Blogger \ BlogBundle \ SymblogBundle" y no "Symblog \ Blogger \ BlogBundle \ SymblogBundle" (ten en cuenta mayúscula "S")? –

+0

¿Cuál es la ruta del archivo a su paquete? – Shattuck

+0

La ruta del archivo es/var/www/Symfony/blog – matt

Respuesta

13

Hay algunas cosas que podría ser. Cubriré todo lo que se me ocurra.

  1. Generalmente los paquetes se colocan en la carpeta src. Por lo tanto, la ruta a tu paquete debería verse así.

    src/Blogger/SymBlogBundle/BloggerSymBlogBundle.php 
    

    (Observe que el nombre del paquete sigue la convención de nombre de archivo)

  2. En el interior de la BloggerSymBlogBundle.php asegúrese de que usted tiene algo similar a lo siguiente:

    <?php 
    
    namespace Blogger\SymBlogBundle; 
    
    use Symfony\Component\HttpKernel\Bundle\Bundle; 
    
    class BloggerSymBlogBundle extends Bundle 
    { 
    } 
    

    (Tenga en cuenta que la misma convención de nombre también se sigue aquí)

  3. En su autoload.php, el espacio de nombre que se debe registrar es t él "Blogger" parte del nombre/ruta de acceso a su paquete. Esto se debe a que el paquete en sí reside en la carpeta de Blogger:

    'Blogger' => __DIR__.'/../src', 
    

    (Observe que la carpeta de la lista es el padre de la carpeta Blogger)

  4. Ahora en el AppKernel.php registrar el paquete según el espacio de nombres su instalación y registrado:

    new Blogger\SymBlogBundle\BloggerSymBlogBundle(), 
    

    * Nota - los recursos y referencias a este paquete con la configuración anterior sería

    BloggerSymBlogBundle 
    

    por lo que su enrutamiento php se llamaría mediante el uso de:

    @BloggerSymBlogBundle/Resources/config/routing.php 
    
4

Hay una solución diferente.

Borre la carpeta de la aplicación/caché/(prod | dev). Cuando haya editado el Appkernel y la carga automática.

Fatal error: Class 'symblog\Blogger\BlogBundle\SymblogBundle' not found in /var/www/Symfony/app/AppKernel.php on line 20

Éstos son ahora diferentes problemas:

  1. mirada a la SymblogBundle.php en la carpeta del paquete y buscar el espacio de nombres que utilizan. Quizás es realmente una mayúscula ("S") como dijo @kuba.

  2. El archivo de clase no está en la carpeta o no tiene derechos sobre la carpeta en la que el intérprete puede cargar el archivo.

  3. Creo que su autoload.php es incorrecto.

    'Avalanche'  => __DIR__.'/../vendor/bundles', 
    

    Esta es la forma más común de registrar un Namespace.En su caso tiene que ser

    'Symlog' => '/var/www/Symfony/blog', 
    

Here are the instructions from the "BloggerBundle" espero que sea la correcta

Allí se puede ver la carga automática de su su no corrige el espacio de nombres es "Blogger".

Cuestiones relacionadas