我希望我知道如何更恰當地搜索這個問題/短語。這妨礙了我對以前的問題的搜索;如果這是重複的,請與我聯繫。Laravel 4:從數據庫中的字符串動態加載類
看到這個帖子的底部更新/編輯
背景/我想要做的事:
我有一個看起來很多像這樣的網址:
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
,其中的一個函數將接收數據。從那裏開始,對數據進行一系列計算和轉換。
我的問題
我的問題是,什麼是「laravel 4友好」的方式來動態加載advancedCalcs.php
和數據提供給一組的方法呢?有沒有辦法延遲加載這種類型的東西。目前,我只知道非常簡單的require_once()
方法。我真的想避免這種情況,因爲我相信laravel 4具有動態加載底層類並將其掛接到通用接口的功能。
編輯1
感謝安東尼奧·卡洛斯·裏貝羅,我能夠取得一些進展。
運行轉儲自動加載的命令後,我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");
}
};
?>
更新的問題: 如何創建類似於AnalyzeController
條目的別名autoload_classmap.php
,而不必使用全名稱空間來引用basicCalcs.php
?
**謝謝**。我看到你正在嘗試做,但find()方法在laravel 4的Filesystem類中不存在。我似乎也無法在php.net上發現它。我可以通過執行'$ className =「\\命名空間\\路徑\\ Inautoload_classmap來獲得我所需的內容。php「; $ instance = new $ className;' 這**有效**,但有沒有什麼辦法可以爲名稱空間設置別名? – user1521764
對不起,關於該File ::,我將其更改爲phpFile更清晰,因爲它應該是你的phpFile模型,在那裏你存儲你的文件名。只要你的類出現在autoload_classmap.php文件中,你不需要命名空間,當然,除非你需要它們來組織你的代碼。 –
如果你想使用'psr0','namespace'是必需的 –