为什么我必须在安装我的包后运行Composer转储?

时间:2015-12-21 18:31:28

标签: php composer-php autoloader packagist

我在packagist上创建了一个用于学习的简单包(tommytest / tommytest)。它安装得很好,但我必须在安装后立即运行“ composer dump-autoload -o ”。在手动运行dump-autoload之前,我得到了这个:

致命错误:第5行的C:\ xampp \ htdocs \ simple \ index.php中找不到类'mysqlgridspace \ Page'

手动运行dump-autoload后,它可以正常工作。是不是应该在安装软件包时自动处理自动加载设置?

这是我的composer.json(位于: simple / vendor / tommytest / tommytest / composer.json

 {
  "name": "tommytest/tommytest",
  "type": "library",
  "description": "Framework agnostic data grid",
  "keywords": ["datagrid","data grid"],
  "homepage": "https://github.com/escalibore/tommytest",
  "license": "MIT",
  "authors": [
    {
      "name": "Tommy Bert",
      "email": "tom@tberthold.com",
      "homepage": "http://tberthold.com",
      "role": "Developer"
    }
  ],
  "require": {
    "php": ">=5.3.0"
  },
  "autoload": {
    "psr-4": {
      "mysqlgridspace\\":"src/"
    }
  }
}

我的班级文件(位于: simple / vendor / tommytest / tommytest / src / Mysqlgridmain.class.php

<?php
namespace mysqlgridspace;

class Page {
    public function __construct()
    {
        echo "hello, i am a page.<br>";
    }
}

class Book {
    public function __construct()
    {
    echo "hello, i am a book.<br>";
    }
}

2 个答案:

答案 0 :(得分:1)

这些类无法使用Composer的PSR-4自动加载器自动加载,因为它将类名mysqlgridspace\Page解析为名为Page.php的文件,该文件应存在于src中 - 它但是,并没有。

首先,每个文件中只应声明一个类。

你应该

src/
    Book.php
    Page.php

每个只声明一个班级。

然后你的PSR-4自动加载应该可行。

供参考,请参阅http://www.php-fig.org/psr/psr-4/

答案 1 :(得分:0)

我找到了解决问题的方法。我将&#34;文件&#34;:[&#34; src / Mysqlgridmain.class.php&#34;],添加到我的composer.json中的自动加载详情

所以它来自:

"autoload": {
   "psr-4": {
     "mysqlgridspace\\":"src/"
}

为:

"autoload": {
  "files": ["src/Mysqlgridmain.class.php"],
  "psr-4": {
    "mysqlgridspace\\":"src/"
} 

我不知道为什么psr-4标签没有这样做,但我认为这是一种可接受的解决方法。