2012-03-27 2 views
7

Я получил ошибку [Решение в конце вопроса]Symfony2 - Фатальная ошибка Связки

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

Я создал вопрос How to install or integrate bundles in 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(), 
    ); 

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

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

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

+0

ли вы получите имя класса право? Вы уверены, что это «symblog \ Blogger \ BlogBundle \ SymblogBundle», а не «Symblog \ Blogger \ BlogBundle \ SymblogBundle» (обратите внимание на верхний регистр «S»)? –

+0

Каков путь к файлу вашего пакета? – Shattuck

+0

Путь к файлу -/var/www/Symfony/blog – matt

ответ

13

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

  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 пространство имен, которое должно быть зарегистрировано, равно t он «Blogger» часть имени/пути к вашему набору. Это происходит потому, что сам пакет находится в папке Blogger:

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

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

  4. Теперь в AppKernel.php зарегистрировать пакет в соответствии с пространством имен ваш набор и регистрации:

    new Blogger\SymBlogBundle\BloggerSymBlogBundle(), 
    

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

    BloggerSymBlogBundle 
    

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

    @BloggerSymBlogBundle/Resources/config/routing.php 
    
4

Существуют различные решения.

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

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

Вот теперь разные проблемы:

  1. Посмотрите на SymblogBundle.php в Bundle Folder и посмотреть, какое пространство имен они используют. Возможно, это действительно прописная буква («S»), как @kuba.

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

  3. Я думаю, что ваш autoload.php неверен.

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

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

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

Here are the instructions from the "BloggerBundle" Я надеюсь, что его правильный

Там вы можете увидеть вашу автозагрузку его не исправить пространство имен является «Blogger».

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