[英]Routing in laravel 4
我有一個稱為報告的部分,在此之下有大約40-50個報告。
對於每個報告,我需要定義一個單獨的類/控制器。
我在控制器下創建了一個reports文件夾,並在其下添加了一個ReportsController類。 我的路由路由到此ReportsController的add方法,並根據傳遞的參數調用不同的報告類(例如ContainerReportController)的add方法。
示例代碼:
controllers/reports/ReportController.php
class ReportController extends BaseController {
public function add($type)
{
$controller = Str::studly($type) . 'Controller';
return $controller::add();
}
}
controllers/reports/ContainerReportController.php
class ContainerController extends BaseController {
public function add()
{
return "Report will be added here and redirected to main page".
}
}
我這樣做是因為我無法定義到每種不同類型的報告的路由(例如ContainerReportController),我定義了到主RportController的一條路由,並從那里調用不同的控制器。
我想知道我是否以正確的方式進行操作,或者是否可以使用其他可以幫助改善我的代碼的方法。
僅供參考-在控制器/報告目錄中添加每個報告后,我運行composer dump-autoload
,以便在應用程序運行時自動加載報告類。
請幫助改善此編碼。
謝謝,Nikhil
我認為您的代碼還不錯,但是有一些改進:
所以你有一條路線:
Route::get('report/{type}', 'ReportsController@report');
一個可以實例化您的報告而不是靜態使用它的報告控制器,這是可測試的:
class ReportsController extends BaseController {
public function report($type)
{
$report = Str::studly($type) . 'Report';
return with(new $report)->add();
}
}
許多報表類擴展了BaseReport類。
這不是控制器,因為控制器不應相互通信。 控制器基本上接收到將請求傳遞給服務類或模型的請求,獲取處理的數據並將其發送到視圖。
class ContainerReport extends BaseReport {
public function add()
{
$this->reportData = "Report will be added here and redirected to main page".
return $this->render();
}
}
還有一個BaseReport類,該類將由所有報告類擴展,以執行您的報告肯定會做的普通事情:
abstract class BaseReport {
protected $reportData;
public function render()
{
return $this->reportData;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.