【发布时间】:2013-06-20 10:12:20
【问题描述】:
我希望我知道如何更恰当地搜索这个问题/短语。这妨碍了我寻找先前的问题;如果这是重复的,请耐心等待。
在这篇文章的底部查看更新/编辑
背景/我想做的事:
我有一个看起来很像这样的 URL:
http://myapp.com/calculate/$fileID/$calculateID
$fileID 和 $calculateID 是我用来跟踪数据集的键,我称之为“计算”。本质上,该 URL 表示对 $fileID 中的数据执行 $calculateID。
我去我的数据库 (mongo) 并询问一个 php 类名或 sring 或文件路径,或者你有什么匹配 $calculateID。例如,假设表格如下所示:
+-----+-------------------+
| _id | phpFile |
+-----+-------------------+
| 1 | basicCalcs.php |
| 2 | advancedCalcs.php |
| 3 | summaryCalcs.php |
+-----+-------------------+
注意:可以安全地假设phpFile 列中的每个文件都有一个公共接口/一组公共方法。
示例:
http://myapp.com/calculate/23/2
会去数据库,从集合23获取数据,然后加载advancedCalcs.php中的函数。一旦advancedCalcs.php 被加载,其中的一个函数将接收数据。从那里,对数据执行一组计算和转换。
我的问题
我的问题是动态加载advancedCalcs.php 并将数据输入一组方法的“laravel 4 友好”方式是什么?有没有办法延迟加载这种类型的东西。目前,我只知道非常简单的require_once() 方法。我真的很想避免这种情况,因为我确信 laravel 4 具有动态加载底层类并将其连接到通用接口的功能。
编辑 1
感谢 Antonio Carlos Ribeiro,我得以取得一些进展。
运行 dump-autoload 命令后,我的 vendor/composer/autoload_classmap.php 文件有几个新条目,如下所示:
'AnalyzeController' => $baseDir . '/app/controllers/AnalyzeController.php',
'AppName\\Calc\\CalcInterface' => $baseDir . '/app/calculators/CalcInterface.php',
'AppName\\Calc\\basicCalcs' => $baseDir . '/app/calculators/basicCalcs.php',
使用下面示例的代码,我可以创建 basicCalcs 类的实例:
$className = "AppName\\Calc\\basicCalcs";
$instance = new $className;
var_dump($instance);
basicCalcs.php 文件如下所示:
//PATH: /app/calculators/basicCalcs.php
<?php namespace Reporter\Calc;
class basicCalcs {
public function sayHi(){
echo("hello world! i am basicCalcs");
}
};
?>
更新问题:
如何在autoload_classmap.php 中创建类似于AnalyzeController 条目的别名,而不必使用完整的命名空间引用basicCalcs.php?
【问题讨论】:
标签: php class dynamic laravel laravel-4