Symfony2 - Fatal error with Bundles

13,212

Solution 1

There are a few things that it could be. I'll just cover anything I can think of.

  1. Generally bundles are placed in the src folder. So the path to your bundle should look like this.

    src/Blogger/SymBlogBundle/BloggerSymBlogBundle.php
    

    (Notice that the bundle name follows the file name convention)

  2. Inside of the BloggerSymBlogBundle.php make sure you have something similar to the following:

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

    (Notice that the same name convention is also followed here)

  3. In your autoload.php the namespace that should be registered is the "Blogger" part of the name/path to your bundle. This is because the bundle itself resides in the Blogger folder:

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

    (Notice that the folder listed is the parent of the Blogger folder)

  4. Now in the AppKernel.php register the bundle according the namespace your set up and registered:

    new Blogger\SymBlogBundle\BloggerSymBlogBundle(),
    

    *Note - Your resources and references to this bundle with the above configuration would be

    BloggerSymBlogBundle
    

    so your php routing would be called by using:

    @BloggerSymBlogBundle/Resources/config/routing.php
    

Solution 2

There are different solution.

Clear the app/cache/(prod|dev) folder. When you have edited the Appkernel and autoload.

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

Here are now different Problems:

  1. Look to the SymblogBundle.php in the Bundle Folder and look which namespace they use. Perhaps its really an uppercase ("S") like @kuba said.

  2. The Class file is not in the folder or you have no rights to the folder that the interpreter can load the file.

  3. I think your autoload.php is not correct.

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

    This is the common way to register an Namespace. In your case it have to be

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

Here are the instructions from the "BloggerBundle" I hope its the correct one

There you can see the your autoload its not correct the Namespace is "Blogger".

Share:
13,212
matt
Author by

matt

Updated on June 04, 2022

Comments

  • matt
    matt over 1 year

    I've got the error [Solution at the end of the question]

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

    I founded the question How to install or integrate bundles in Symfony2, but the solutions given didn't help me, because I already did what is suggested there. I'm following the tutorial symblog.co.uk except that I created at

    app/config/routing.yml
    

    a

    *.php resource
    

    Thanks in advance!

    I have to add that while registering the bundle by console I've got the error

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

    And the instructions:

    - 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',
    

    which I followed.

    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:   /
    

    As requested: /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
    

    [Edit] The solution was very easy after the answer from @Clamidity that the bundles usually are located at src/Blogger/SymBlogBundle/BloggerSymBlogBundle.php

    While the configuration using the console it saked about the location of the bundle and the default was /../src but I changed to /../blog. And of course it won't work, Symfony was looking into the wrong location. What I did was to move the folders inside /blog to /src and everything went fine.