2015-12-21 146 views
0

我在包装师学习上创建了一个简单的包(tommytest/tommytest)。它安装的很好,但是我必须在安装后立即运行“composer dump-autoload -o”。之前手动运行转储自动加载我得到这个:为什么安装我的软件包后必须运行Composer转储?

致命错误:类 'mysqlgridspace \页' 用C未找到:\ XAMPP \ htdocs中\简单\的index.php上线5

手动后运行转储自动加载它工作正常。安装软件包时不应该自动处理自动加载设置吗?

这里是我的composer.json(位于:简单/供应商/ 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": "[email protected]", 
     "homepage": "http://tberthold.com", 
     "role": "Developer" 
    } 
    ], 
    "require": { 
    "php": ">=5.3.0" 
    }, 
    "autoload": { 
    "psr-4": { 
     "mysqlgridspace\\":"src/" 
    } 
    } 
} 

我的类文件(位于:简单/供应商/ 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>"; 
    } 
} 

回答

1

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

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

你应该有

src/ 
    Book.php 
    Page.php 

每一个声明只类。

然后你的PSR-4自动加载应该可以工作。参考http://www.php-fig.org/psr/psr-4/

+0

感谢@localheinz,将每个类放入它自己的同名文件中,这让我更好地理解了psr-4自动编码的工作原理。谢谢你解决这个谜团! –

0

我找到了解决问题的方法。我加“文件”: “SRC/Mysqlgridmain.class.php”],到自动加载细节我composer.json

所以从去:

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

到:

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

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

+0

可能是因为'.class.php'扩展名,Composers类扫描器没有选中它。您可以将该文件从“Mysqlgridmain.class.php”重命名为“MysqlGridMain.php”,然后重新尝试。 –

相关问题