第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

在 Laravel 中將類名傳遞給視圖的常見做法

在 Laravel 中將類名傳遞給視圖的常見做法

PHP
翻翻過去那場雪 2021-11-26 14:46:13
我有一個(gè)控制器方法,可以將模型名稱和類名稱傳遞給視圖。然后在另一個(gè)控制器方法中實(shí)例化這些類。在這種情況下,我使用的是 Laravel Excel 包。public function index(){    $exports = [        'Model name 1' => TestExport::class,        'Model name 2' => AnotherExport::class    ];    return view('export', compact('exports'));}public function download(string $collection){    return Excel::download(new $collection(), 'Export.xlsx');}我的視圖文件然后重定向到download具有特定類名的控制器方法。@foreach($exports as $name => $collection)  <a href="{{ action('ExportController@download', $collection) }}">Download</a>@endforeach因?yàn)槲艺趯W(xué)習(xí)設(shè)計(jì)模式,并注意到它會(huì)破壞 DRY 規(guī)則,所以我不想要另一個(gè)控制器方法或我下載的每個(gè)不同的 Excel 文件。這是好的做法還是可以做得更好?
查看完整描述

2 回答

?
UYOU

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


查看完整回答
反對 回復(fù) 2021-11-26
?
蠱毒傳說

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)列表,也可以保存在視圖中。更好的解決方案是:

  1. 在您的刀片模板中有一個(gè)路由列表(而不是類列表),然后對其進(jìn)行迭代。

  2. 如果路由列表不是那么長,請對整個(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


查看完整回答
反對 回復(fù) 2021-11-26
  • 2 回答
  • 0 關(guān)注
  • 176 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號