我的應用程序在db中有一些實體,並且每個實體都包含有關控制器名稱的數據。動態重定向到不同的控制器
當路由被調用時,它調用MainController並遵循方法,然後重定向到不同的控制器。
有沒有更好的方法來做到這一點?
UPDATE
routes.php文件
Route::get('/print-pdf/{uniqueID}', Logic\[email protected]');
EditorController.php
protected function dispatchPDF(Request $request, $uniqueID){
$ent = Entity::find($uniqueID);
$variable_name = $ent->controller_name; //for example: LSEntityController
return resolve("\App\Http\Controllers".$variable_name)->printPDF();
}
然後,每個實體具有不同的控制器:
LSEntityController.php
protected function printPDF(Request $request, $uniqueID){
$pdf = \PDF::loadView('map.2017.print',array('data' => $data));
$pdf->setPaper('a4', 'portrait');
return @$pdf->stream('data.pdf');
}
SOEntityController.php
protected function printPDF(Request $request, $uniqueID){
//here is the difference, this method must call some extra methods
$this->compileAndReport();
$pdf = \PDF::loadView('map.2017.print2',array('data' => $data));
$pdf->setPaper('a4', 'portrait');
return @$pdf->stream('data.pdf');
}
爲什麼您的實體關心控制器? – delboy1978uk
因爲實體需要不同的數據來打印pdf。 – Tim
看@ Dees040的回答。實體應該對控制器一無所知。你的請求應該通過一個路由器,它將你引導到控制器,並隨之傳遞。理想的控制器應該調用一個服務來處理你的數據(你的實體)並捕獲任何異常並處理它們,就是這樣。 – delboy1978uk