Symfony2 - фатальная ошибка с пакетами - PullRequest
7 голосов
/ 28 марта 2012

У меня ошибка [Решение в конце вопроса]

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

Я задал вопрос Как установить или интегрировать пакеты в Symfony2 , но приведенные решения не помогли мне, потому что я уже сделал то, что там предлагается. Я следую учебному пособию symblog.co.uk , за исключением того, что я создал в

app/config/routing.yml

а

*.php resource

Заранее спасибо!

Я должен добавить, что при регистрации пакета с консоли у меня появляется ошибка

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

И инструкция:

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

за которым я следовал.

AppKernel.php

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

/ приложение / Config / routing.yml

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

По запросу: /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

[Редактировать] Решение было очень легко после ответа @Clamidity о том, что пакеты обычно находятся в src / Blogger / SymBlogBundle / BloggerSymBlogBundle.php

Во время конфигурации с использованием консоли было указано расположение пакета, и по умолчанию было /../src, но я изменил на /../blog. И, конечно, это не сработает, Symfony искал не в том месте. Я переместил папки из / blog в / src и все прошло нормально.

Ответы [ 2 ]

13 голосов
/ 28 марта 2012

Есть несколько вещей, которые могут быть.Я просто расскажу обо всем, что могу придумать.

  1. Обычно пакеты помещаются в папку src.Таким образом, путь к вашему пакету должен выглядеть следующим образом.

    src/Blogger/SymBlogBundle/BloggerSymBlogBundle.php
    

    (обратите внимание, что имя пакета соответствует соглашению имени файла)

  2. Внутри BloggerSymBlogBundle.phpубедитесь, что у вас есть что-то похожее на следующее:

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

    (обратите внимание, что здесь соблюдается то же соглашение имен)

  3. В вашем autoload.php пространство именто, что должно быть зарегистрировано, является частью "Blogger" имени / пути к вашему пакету.Это связано с тем, что сам пакет находится в папке Blogger:

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

    (обратите внимание, что указанная папка является родительской для папки Blogger)

  4. Теперь вAppKernel.php зарегистрирует пакет в соответствии с пространством имен, которое вы настроили и зарегистрировал:

    new Blogger\SymBlogBundle\BloggerSymBlogBundle(),
    

    * Примечание. Ваши ресурсы и ссылки на этот пакет с указанной конфигурацией будут

    BloggerSymBlogBundle
    

    , поэтомуВаша PHP-маршрутизация будет вызываться с помощью:

    @BloggerSymBlogBundle/Resources/config/routing.php
    
4 голосов
/ 28 марта 2012

Есть иное решение.

Очистить папку app / cache / (prod | dev). Когда вы отредактировали Appkernel и автозагрузку.

Неустранимая ошибка: класс 'symblog \ Blogger \ BlogBundle \ SymblogBundle' не найден в /var/www/Symfony/app/AppKernel.php в строке 20

Вот сейчас разные проблемы:

  1. Найдите SymblogBundle.php в папке Bundle и посмотрите, какое пространство имен они используют. Возможно, это действительно заглавные буквы ("S"), как сказал @kuba.

  2. Файл класса не находится в папке, или у вас нет прав на папку, которую переводчик может загрузить файл.

  3. Я думаю, что ваш autoload.php не правильный.

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

    Это обычный способ регистрации пространства имен. В вашем случае это должно быть

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

Вот инструкции от "BloggerBundle" Надеюсь, это правильный

Там вы видите, что ваша автозагрузка не верна. Пространство имен "Blogger".

...