根据 Damien 的回答,我发现 Composer 提供了最简单的方法来做到这一点。
现在,我的ExportExcel
班级住在src/
目录中。我的目录结构是:
源/
小贩/
索引.php
引导程序.php
作曲家.json
在 内composer.json
,我还要求它为我加载我的课程:
{
“名称”:“adityamenon/excel_export”,
"description": "将数据导出为自定义 Excel 工作表格式",
“要求”: {
“symfony/依赖注入”:“2.2.x-dev”,
“symfony/yaml”:“2.1.x-dev”,
“教义/dbal”:“2.4.x-dev”,
“嘲笑/嘲笑”:“开发大师”,
“CodePlex/PHPExcel”:“1.7.8”
},
“自动加载”:{
“psr-0”:{“ExportExcel”:“src/”}
},
“作者”:[
{
"name": "aditya menon",
“电子邮件”:“adityamenon90@gmail.com”
}
]
}
我只需要运行$ composer install
所有依赖项就可以神奇地出现在vendor/
.
PSR-0 很容易理解。我刚刚创建了一个文件ExportExcel.php
,其中包含一个命名空间类,名为ExportExcel
:
namespace ExportExcel;
class ExportExcel {
public function __construct(\ExportExcel\DbConvenience $db_convenience)
{
$this->DbConvenience = $db_convenience;
}
public function writeExcelFile()
{
// ...do stuff here
}
}
最后,这是 bootstrap.php,它负责自动加载我需要的东西以及注入依赖项:
<?php
// composer autoloads dependencies
// also configured to load from src/
$loader = require('vendor/autoload.php');
// load configuration (only db right now)
use Symfony\Component\Yaml\Yaml;
$yaml_config = Yaml::parse('config.yml');
// load the database
$db_config = new Doctrine\DBAL\Configuration();
$conn = Doctrine\DBAL\DriverManager::getConnection($yaml_config, $db_config);
// load the convenience classes
$DbConvenience = new ExportExcel\DbConvenience($conn);
// use the dependency injector to load the exporter with DB
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Reference;
$sc = new ContainerBuilder();
$sc->setParameter('dbconvenience.class', 'ExportExcel\DbConvenience');
$sc->setParameter('exportexcel.class', 'ExportExcel\ExportExcel');
$sc
->register('dbconvenience', '%dbconvenience.class%')
->addArgument($conn);
$sc
->register('exportexcel', '%exportexcel.class%')
->addArgument(new Reference('dbconvenience'));
// here's the most important class of 'em all
$ExportExcel = $sc->get('exportexcel');
最后在 index.php 中,第一行是require('bootstrap.php');
,然后我就走了。我可以使用 $ExportExcel->doStuff(); 调用 ExportExcel 中的函数;
请随时添加评论并缩短/改进此答案。解决这个难题有点困难,需要阅读一些内容,但事后看来一切都很清楚。