为什么我必须 运行 Composer 转储我的包后?
Why do I have to run Composer dump after installing my package?
我在 packagist 上创建了一个简单的包用于学习 (tommytest/tommytest)。它安装得很好,但我必须在安装后立即 运行 "composer dump-autoload -o"。在手动 运行 转储自动加载之前,我得到了这个:
致命错误:Class 'mysqlgridspace\Page' 未在第 5 行的 C:\xampp\htdocs\simple\index.php 中找到
手动 运行ning 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/"
}
}
}
还有我的class文件(位于: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>";
}
}
我找到了解决问题的方法。我在 composer.json
的自动加载详细信息中添加了 "files": ["src/Mysqlgridmain.class.php"],
所以它来自:
"autoload": {
"psr-4": {
"mysqlgridspace\":"src/"
}
至:
"autoload": {
"files": ["src/Mysqlgridmain.class.php"],
"psr-4": {
"mysqlgridspace\":"src/"
}
我不知道为什么 psr-4 标签不这样做,但我认为这是一个可以接受的解决方法。
那些 classes 无法使用 Composer 的 PSR-4 自动加载器自动加载,因为它将 class 名称 mysqlgridspace\Page
解析为名为 Page.php
的文件,该文件应该存在于src
- 但事实并非如此。
首先,每个文件中只能声明一个class。
你应该
src/
Book.php
Page.php
每个只声明一个 class。
然后你的 PSR-4 自动加载应该可以工作了。
有关参考,请参阅 http://www.php-fig.org/psr/psr-4/。
我在 packagist 上创建了一个简单的包用于学习 (tommytest/tommytest)。它安装得很好,但我必须在安装后立即 运行 "composer dump-autoload -o"。在手动 运行 转储自动加载之前,我得到了这个:
致命错误:Class 'mysqlgridspace\Page' 未在第 5 行的 C:\xampp\htdocs\simple\index.php 中找到
手动 运行ning 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/"
}
}
}
还有我的class文件(位于: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>";
}
}
我找到了解决问题的方法。我在 composer.json
的自动加载详细信息中添加了 "files": ["src/Mysqlgridmain.class.php"],所以它来自:
"autoload": {
"psr-4": {
"mysqlgridspace\":"src/"
}
至:
"autoload": {
"files": ["src/Mysqlgridmain.class.php"],
"psr-4": {
"mysqlgridspace\":"src/"
}
我不知道为什么 psr-4 标签不这样做,但我认为这是一个可以接受的解决方法。
那些 classes 无法使用 Composer 的 PSR-4 自动加载器自动加载,因为它将 class 名称 mysqlgridspace\Page
解析为名为 Page.php
的文件,该文件应该存在于src
- 但事实并非如此。
首先,每个文件中只能声明一个class。
你应该
src/
Book.php
Page.php
每个只声明一个 class。
然后你的 PSR-4 自动加载应该可以工作了。
有关参考,请参阅 http://www.php-fig.org/psr/psr-4/。