Композитор и ПСР-0

У меня есть структура composer.json вот так:

"psr-0": {
        "DatabaseSeeder\\": "app/database/seeds/"
    },

У меня есть файлы в app / database / seed (файлы здесь могут быть созданы динамически, поэтому решение с "classmap": ["app / database / seed"] здесь не работает bcs Я должен всегда выгружать автозагрузку перед посевом:

  • UserTableSeeder.php
  • DatabaseSeeder.php

с такой структурой:

# DatabaseSeeder.php

namespace DatabaseSeeder;

use Doctrine\ORM\EntityManager;

 class DatabaseSeeder implements Seeder {

    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run(EntityManager $em)
    {
            $this->call('DatabaseSeeder\UserTableSeeder', $em);
    }

    private function call($class, $em)
    {
            $reflectionMethod = new \ReflectionMethod($class, 'run');
            $reflectionMethod->invoke(new $class, $em);
    }

После установки php composer.phar и dump-autoload php composer.phar я не могу использовать в приложении, например, в index.php

 $object = new \DatabaseSeeder\DatabaseSeeder();

потому что я получаю ошибку: Класс DatabaseSeeder \ DatabaseSeeder не существует ПОЧЕМУ ?? Он должен автоматически загружать класс при запуске объекта.


person Thomas    schedule 21.12.2013    source источник


Ответы (1)


Прежде всего, вы должны убедиться, что ваш index.php правильно включает автозагрузку композитора.

<?php

include __DIR__ . '/vendor/autoload.php';

Затем вам необходимо проверить правильность автозагрузки структуры каталогов.

Если ваша конфигурация PSR-0

"psr-0": {
    "DatabaseSeeder\\": "app/database/seeds/"
},

тогда ваша структура каталогов должна выглядеть так:

app/
   database/
       seeds/
           DatabaseSeeder/
               DatabaseSeeder.php

Для получения дополнительной информации об автозагрузке композитора PSR-0 вы можете прочитать схему композитора. документация. Надеюсь это поможет.

person Andy Librian    schedule 21.12.2013