作曲家和PSR-0

时间:2013-12-21 10:25:22

标签: php composer-php psr-0

我有这样的composer.json结构:

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

我在app / database / seeds中有文件(这里的文件可以动态创建,所以“classmap”的解决方案:[“app / database / seeds”]在这里不起作用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安装和php composer.phar dump-autoload之后我无法在应用程序中使用例如index.php

 $object = new \DatabaseSeeder\DatabaseSeeder();

因为我收到错误:类DatabaseSeeder \ DatabaseSeeder不存在为什么?它应该在启动对象时自动加载类。

1 个答案:

答案 0 :(得分:1)

首先,您应该确保index.php正确包含composer autoload。

<?php

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

然后,您需要验证您的目录结构是否正确自动加载。

如果您的PSR-0配置

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

然后您的目录结构应如下所示:

app/
   database/
       seeds/
           DatabaseSeeder/
               DatabaseSeeder.php

有关composer PSR-0自动加载的更多信息,您可以阅读composer schema文档。希望这会有所帮助。