我使用的是Laravel Snappy PDF包barryvdh/laravel-snappy
这一切都运行得很好,但是routes文件现在有很多我想要从routes文件中清理出来并放在其他地方的信息。
Route::get('services/{service}/overview', function ($id) {
$service = \App\Service::where('id', '=', $id)->first();
$service->load('sbo_name', 'sbm_name', 'stm_name', 'get_lifecycle_status', 'items', 'environments', 'agreements', 'supported_services', 'required_services', 'serviceDependencies', 'readiness');
$data['service'] = $service->toArray();
$pdf = PDF::loadView('reports.services.overview', $data)
->setPaper('a4')
->setOrientation('portrait')
->setOption('footer-right', 'Page [page] of [toPage] ')
->setOption('footer-left', ' Printed: [date]')
->setOption('footer-font-size', 8)
->setOption('footer-font-name', 'Arial')
->setOption('margin-top', 10)
->setOption('margin-left', 5)
->setOption('margin-right', 5)
->setOption('lowquality', false)
->setOption('dpi', 96)
->setOption('image-quality', 100);
return $pdf->inline('Service Overview.pdf');
});构建这种结构的最好方法是什么?我也不想重复每个新报告的pdf选项。
发布于 2018-12-20 13:41:30
首先,通过将路由文件移动到控制器中来清理它们。
Route::get('services/{service}/overview', ExportServiceController@show);
// app/Http/Controllers/ExportServiceController.php
class ExportServiceController extends Controller
public function show($id) {
return (new App/ExportServicePdf)->execute($id);
}进一步清理你的控制器,将逻辑移到它自己的类中,这样它就可以在其他控制器中重用。
// for example app/ExportServicePdf.php
namespace App;
class ExportServicePdf
{
public function execute($id)
{
$service = \App\Service::where('id', '=', $id)->first();
$service->load('sbo_name', 'sbm_name', 'stm_name', 'get_lifecycle_status', 'items', 'environments', 'agreements', 'supported_services', 'required_services', 'serviceDependencies', 'readiness');
$data['service'] = $service->toArray();
$pdf = PDF::loadView('reports.services.overview', $data)
->setPaper('a4')
->setOrientation('portrait')
->setOption('footer-right', 'Page [page] of [toPage] ')
->setOption('footer-left', ' Printed: [date]')
->setOption('footer-font-size', 8)
->setOption('footer-font-name', 'Arial')
->setOption('margin-top', 10)
->setOption('margin-left', 5)
->setOption('margin-right', 5)
->setOption('lowquality', false)
->setOption('dpi', 96)
->setOption('image-quality', 100);
return $pdf->inline('Service Overview.pdf');
}
}快速挖掘一下这个库,有一个公共方法setOptions(),它接受一组选项。
在您的ExportServicePdf类中,您可以进一步将其重构为:
class ExportServicePdf
{
private $options = [
'footer-font-size' => 8,
'footer-font-name' => 'Arial',
//...
];
// Then you can do
public function execute($id)
{
$pdf = PDF::loadView('reports.services.overview', $data)
->setPaper('a4')
->setOrientation('portrait')
->setOptions($this->options)
}
}https://stackoverflow.com/questions/53861139
复制相似问题