2 回答

TA貢獻(xiàn)1878條經(jīng)驗(yàn) 獲得超4個(gè)贊
您可以使$exports這兩種方法通用,并且不接受請求中的類名。
const EXPORTS = [
'export_name_1' => TestExport::class,
'export_name_2' => AnotherExport::class,
];
public function index()
{
return view('export', compact(self::EXPORTS));
}
public function download(string $collection)
{
if (!isset(self::EXPORTS[$collection]) {
return 'error';
}
$className = self::EXPORTS[$collection];
return Excel::download(new $className(), 'Export.xlsx');
}
永遠(yuǎn)不要讓請求操作破壞你的代碼。對于export_name,您可以簡單地使用整數(shù)或數(shù)組簡單索引。
看法
@foreach($exports as $name => $collection)
<a href="{{ action('ExportController@download', $name)}}">Download</a>
@endforeach

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超3個(gè)贊
對我來說,感覺就像您的解決方案是將視圖邏輯與控制器邏輯混合在一起。
控制器應(yīng)該處理傳入的請求,獲取正確的數(shù)據(jù),然后形成響應(yīng)。
視圖應(yīng)根據(jù)給定數(shù)據(jù)處理任何邏輯以呈現(xiàn)輸出頁面。
在您的情況下,您傳遞給視圖的數(shù)據(jù)不會(huì)被檢索,它只是一個(gè)靜態(tài)列表,也可以保存在視圖中。更好的解決方案是:
在您的刀片模板中有一個(gè)路由列表(而不是類列表),然后對其進(jìn)行迭代。
如果路由列表不是那么長,請對整個(gè)列表進(jìn)行硬編碼,而不是使其動(dòng)態(tài)化。
這樣做的主要原因是為了防止出現(xiàn)很多“魔法”代碼。例如,在您的刀片模板中,您希望exports
是一個(gè)數(shù)組,其中包含一個(gè)類列表,這些類必須是控制器,并且必須具有download
函數(shù),否則代碼會(huì)中斷。
解決方案 1 的示例如下所示:
<?php
// You could consider moving $routes to the controller
$routes = [
action('ExportController@download', TestExport::class),
action('ExportController@download', AnotherExport::class),
];
@foreach($routes as $route)
<a href="{{ $route }}">Download</a>
@endforeach
- 2 回答
- 0 關(guān)注
- 176 瀏覽
添加回答
舉報(bào)