【问题标题】:Composer and PSR-0作曲家和 PSR-0
【发布时间】:2014-01-10 03:52:53
【问题描述】:

我有这样的 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 install 和 php composer.phar dump-autoload 之后,我无法在应用程序中使用,例如在 index.php 中

 $object = new \DatabaseSeeder\DatabaseSeeder();

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

【问题讨论】:

    标签: php composer-php psr-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 文档。希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2020-05-30
      • 2013-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-31
      • 2016-10-31
      • 2017-01-27
      • 2017-01-02
      相关资源
      最近更新 更多