經過一番研究,並要求在PHP聊天室圍繞我想出了以下解決方案:
首先,我檢索所有車型從/應用/型號目錄,刪除。和..並從文件名和任何剩餘的空白處裁剪擴展名。
在我的情況下,這將工作,因爲我在類之後命名文件。
private function getModels()
{
return array_filter(scandir(app_path('models/')), function(&$val)
{
if($val != '.' && $val != '..')
{
$val = trim(str_replace('.php', '', $val));
return class_exists($val);
}
});
}
現在我有我想要的所有模型,我需要過濾哪些我想報告的模型。在我想要報告的模型上,我實現了一個名爲IReportable
的接口。我想使用抽象類,但由於PHP不允許多重繼承,我使用這種方法。
class MyModel extends Eloquent implements IReportable
或者對於我來說:
Class Asset extends BaseModel implements IReportable
有了這個,我可以過濾模型。
private function getReportableModels()
{
return array_filter($this->getModels(), function($model)
{
return in_array('IReportable', class_implements($model, false));
});
}
看看[這個答案](http://stackoverflow.com/a/6671567/2629998),顯示有辦法讓擴展父類(在你的情況下,它的'Eloquent')所有類。 – 2014-03-28 16:00:26
我會創建一個存儲庫或服務提供程序類來處理您描述的功能。然後使用Laravel的內置IoC類簡單地獲取這些類。 – Dave
@André'get_declared_classes()'沒有列出之前沒有調用過的任何模型。 – MisterBla