国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
1. 加載和解析JSON 數(shù)據(jù)
2. 在Blade 模板中顯示數(shù)據(jù)(基礎(chǔ)下拉菜單)
3. 實(shí)現(xiàn)級(jí)聯(lián)下拉菜單(JavaScript 交互)
3.1 準(zhǔn)備前端數(shù)據(jù)
3.2 編寫JavaScript 邏輯
3.3 大型數(shù)據(jù)集的考慮
總結(jié)
首頁 後端開發(fā) php教程 在 Laravel Blade 模板中高效利用 JSON 數(shù)據(jù)實(shí)現(xiàn)級(jí)聯(lián)下拉菜單

在 Laravel Blade 模板中高效利用 JSON 數(shù)據(jù)實(shí)現(xiàn)級(jí)聯(lián)下拉菜單

Jul 23, 2025 pm 07:18 PM
laravel ai 多級(jí)聯(lián)動(dòng) red

在 Laravel Blade 模板中高效利用 JSON 數(shù)據(jù)實(shí)現(xiàn)級(jí)聯(lián)下拉菜單

本文詳細(xì)介紹瞭如何在Laravel 應(yīng)用中加載本地JSON 文件,並將其數(shù)據(jù)傳遞到Blade 模板。通過控制器處理JSON 解析,視圖層利用Blade 的@foreach 指令遍歷數(shù)據(jù),從而實(shí)現(xiàn)動(dòng)態(tài)生成下拉菜單。特別地,文章還深入探討瞭如何結(jié)合JavaScript 實(shí)現(xiàn)多級(jí)聯(lián)動(dòng)的下拉菜單功能,為用戶提供基於選擇的動(dòng)態(tài)內(nèi)容展示,並提供了實(shí)現(xiàn)此類交互的實(shí)用代碼示例和注意事項(xiàng)。

在現(xiàn)代Web 應(yīng)用開發(fā)中,經(jīng)常需要從非數(shù)據(jù)庫源(如本地JSON 文件)加載數(shù)據(jù)並將其展示給用戶,尤其是在構(gòu)建動(dòng)態(tài)表單或數(shù)據(jù)選擇器時(shí)。 Laravel 框架提供了簡潔的機(jī)制來處理這類需求。本文將指導(dǎo)您如何將JSON 數(shù)據(jù)集成到Laravel Blade 視圖中,並進(jìn)一步實(shí)現(xiàn)多級(jí)聯(lián)動(dòng)的下拉菜單。

1. 加載和解析JSON 數(shù)據(jù)

首先,您需要在Laravel 控制器中讀取並解析JSON 文件。這通常在處理視圖渲染的方法中完成。

 <?php namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UserController extends Controller
{
    /**
     * 顯示創(chuàng)建用戶表單的視圖。
     *
     * @return \Illuminate\View\View
     */
    public function create()
    {
        // 構(gòu)建JSON 文件的完整路徑// base_path() 函數(shù)返回項(xiàng)目根目錄的絕對(duì)路徑$jsonFilePath = base_path(&#39;resources/data/address.json&#39;);

        // 檢查文件是否存在以避免錯(cuò)誤if (!file_exists($jsonFilePath)) {
            // 根據(jù)實(shí)際情況處理文件不存在的錯(cuò)誤,例如拋出異?;蚍祷劐e(cuò)誤信息return back()->withErrors('JSON 數(shù)據(jù)文件不存在!');
        }

        // 讀取JSON 文件的內(nèi)容$jsonString = file_get_contents($jsonFilePath);

        // 將JSON 字符串解碼為PHP 數(shù)組// 第二個(gè)參數(shù)true 表示將JSON 對(duì)象解碼為關(guān)聯(lián)數(shù)組,而非對(duì)象$details = json_decode($jsonString, true);

        // 檢查解碼是否成功if (json_last_error() !== JSON_ERROR_NONE) {
            // 處理JSON 解析錯(cuò)誤return back()->withErrors('JSON 數(shù)據(jù)解析失?。? . json_last_error_msg());
        }

        // 將解析後的數(shù)據(jù)傳遞給視圖return view('users.create')->with('details', $details);
    }
}

說明:

  • base_path('resources/data/address.json'):用於獲取JSON 文件的絕對(duì)路徑。建議將這類靜態(tài)數(shù)據(jù)文件放在resources 目錄下,以便於管理。
  • file_get_contents():讀取整個(gè)文件到一個(gè)字符串。
  • json_decode($jsonString, true):將JSON 字符串解碼為PHP 變量。傳入true 參數(shù)會(huì)將JSON 對(duì)象轉(zhuǎn)換為關(guān)聯(lián)數(shù)組,這在Blade 模板中通過鍵名訪問數(shù)據(jù)時(shí)更為方便。
  • 錯(cuò)誤處理:添加了文件存在性檢查和JSON 解碼錯(cuò)誤檢查,這是生產(chǎn)環(huán)境中健壯代碼的必要部分。

2. 在Blade 模板中顯示數(shù)據(jù)(基礎(chǔ)下拉菜單)

在Blade 視圖中,您可以使用@foreach 循環(huán)來遍歷控制器傳遞過來的數(shù)組,並生成HTML

假設(shè)您的address.json 文件結(jié)構(gòu)如下:

 [
 {
   "Region": "Naypyitaw Union Territory",
   "Town ": "Za Bu Thi Ri Township",
   "Quarter ": "Zay Ya Theik Di Quarter",
   "Postal Code": 1501001
},
 {
   "Region": "Naypyitaw Union Territory",
   "Town ": "Za Bu Thi Ri Township",
   "Quarter ": "Pyin Nyar Theik Di Quarter",
   "Postal Code": 1501002
}
]

在users/create.blade.php 文件中,您可以這樣顯示區(qū)域(Region)下拉菜單:

 <label for="region">區(qū)域:</label>
<select name="region" id="region" class="form-control">
    <option value="">請(qǐng)選擇區(qū)域</option>
    {{-- 使用array_unique 確保區(qū)域不重複--}}
    @foreach($details->unique('Region') as $detail)
       <option value="{{ $detail['Region'] }}">{{ $detail['Region'] }}</option>
    @endforeach
</select>

說明:

  • $details 是從控制器傳遞過來的整個(gè)JSON 數(shù)據(jù)數(shù)組。
  • $details->unique('Region'):為了避免下拉菜單中出現(xiàn)重複的區(qū)域選項(xiàng),我們可以在Blade 中使用Laravel 集合的unique() 方法。這要求$details 變量是一個(gè)Laravel 集合(可以通過collect($details) 在控制器中轉(zhuǎn)換,或者直接在Blade 中使用collect($details)->unique('Region'))。如果$details 只是一個(gè)普通PHP 數(shù)組,您需要在控制器中處理去重,或者在Blade 中手動(dòng)去重。
  • $detail['Region']:由於json_decode 時(shí)使用了true 參數(shù),$detail 是一個(gè)關(guān)聯(lián)數(shù)組,因此通過方括號(hào)[] 訪問其鍵。

3. 實(shí)現(xiàn)級(jí)聯(lián)下拉菜單(JavaScript 交互)

要實(shí)現(xiàn)“如果用戶選擇了某個(gè)區(qū)域,則只顯示該區(qū)域下的鄉(xiāng)鎮(zhèn)”這樣的級(jí)聯(lián)功能,我們需要結(jié)合JavaScript。一種常見的方法是將所有數(shù)據(jù)一次性傳遞到前端,然後通過JavaScript 在客戶端進(jìn)行過濾和填充。

3.1 準(zhǔn)備前端數(shù)據(jù)

為了讓JavaScript 能夠訪問到$details 數(shù)據(jù),我們需要將其轉(zhuǎn)換為JavaScript 可用的格式,通常是JSON 字符串,並嵌入到<script> 標(biāo)籤中。</script>

 <!-- users/create.blade.php 的某個(gè)位置-->
<script>
    // 將PHP 數(shù)組轉(zhuǎn)換為JSON 字符串,並賦值給JavaScript 變量const allDetails = @json($details); 
    // 或者使用JSON.parse(&#39;{!! json_encode($details) !!}&#39;); 如果需要更嚴(yán)格的轉(zhuǎn)義</script>

<label for="region">區(qū)域:</label>
<select name="region" id="region" class="form-control">
    <option value="">請(qǐng)選擇區(qū)域</option>
    @foreach(collect($details)->unique('Region') as $detail)
       <option value="{{ $detail['Region'] }}">{{ $detail['Region'] }}</option>
    @endforeach
</select>

<label for="town" class="mt-3">鄉(xiāng)鎮(zhèn):</label>
<select name="town" id="town" class="form-control" disabled>
    <option value="">請(qǐng)選擇鄉(xiāng)鎮(zhèn)</option>
</select>

<label for="quarter" class="mt-3">街區(qū):</label>
<select name="quarter" id="quarter" class="form-control" disabled>
    <option value="">請(qǐng)選擇街區(qū)</option>
</select>

<label for="postal_code" class="mt-3">郵政編碼:</label>
<input type="text" name="postal_code" id="postal_code" class="form-control" readonly>

3.2 編寫JavaScript 邏輯

現(xiàn)在,我們將添加JavaScript 代碼來監(jiān)聽區(qū)域選擇的變化,並動(dòng)態(tài)更新鄉(xiāng)鎮(zhèn)和街區(qū)下拉菜單。

 <script>
    // 確保DOM 加載完成後執(zhí)行document.addEventListener(&#39;DOMContentLoaded&#39;, function () {
        const regionSelect = document.getElementById(&#39;region&#39;);
        const townSelect = document.getElementById(&#39;town&#39;);
        const quarterSelect = document.getElementById(&#39;quarter&#39;);
        const postalCodeInput = document.getElementById(&#39;postal_code&#39;);

        // 初始化時(shí)清空並禁用鄉(xiāng)鎮(zhèn)和街區(qū)下拉菜單function resetTownAndQuarter() {
            townSelect.innerHTML = &#39;<option value="">請(qǐng)選擇鄉(xiāng)鎮(zhèn)&#39;;
            townSelect.disabled = true;
            quarterSelect.innerHTML = &#39;<option value="">請(qǐng)選擇街區(qū)&#39;;
            quarterSelect.disabled = true;
            postalCodeInput.value = &#39;&#39;; // 清空郵政編碼}

        resetTownAndQuarter(); // 頁面加載時(shí)執(zhí)行一次regionSelect.addEventListener(&#39;change&#39;, function () {
            const selectedRegion = this.value;
            resetTownAndQuarter(); // 每次區(qū)域變化時(shí)重置if (selectedRegion) {
                // 過濾出與所選區(qū)域匹配的鄉(xiāng)鎮(zhèn)數(shù)據(jù)const filteredTowns = allDetails.filter(item => item[&#39;Region&#39;] === selectedRegion);

                // 獲取不重複的鄉(xiāng)鎮(zhèn)列表const uniqueTowns = [...new Set(filteredTowns.map(item => item[&#39;Town &#39;]))]; // 注意&#39;Town &#39; 有空格// 填充鄉(xiāng)鎮(zhèn)下拉菜單uniqueTowns.forEach(town => {
                    const option = document.createElement(&#39;option&#39;);
                    option.value = town;
                    option.textContent = town;
                    townSelect.appendChild(option);
                });
                townSelect.disabled = false; // 啟用鄉(xiāng)鎮(zhèn)下拉菜單}
        });

        townSelect.addEventListener(&#39;change&#39;, function () {
            const selectedRegion = regionSelect.value;
            const selectedTown = this.value;
            quarterSelect.innerHTML = &#39;<option value="">請(qǐng)選擇街區(qū)&#39;; // 重置街區(qū)quarterSelect.disabled = true;
            postalCodeInput.value = &#39;&#39;; // 清空郵政編碼if (selectedRegion && selectedTown) {
                // 過濾出與所選區(qū)域和鄉(xiāng)鎮(zhèn)匹配的街區(qū)數(shù)據(jù)const filteredQuarters = allDetails.filter(item => 
                    item[&#39;Region&#39;] === selectedRegion && item[&#39;Town &#39;] === selectedTown
                );

                // 獲取不重複的街區(qū)列表const uniqueQuarters = [...new Set(filteredQuarters.map(item => item[&#39;Quarter &#39;]))]; // 注意&#39;Quarter &#39; 有空格// 填充街區(qū)下拉菜單uniqueQuarters.forEach(quarter => {
                    const option = document.createElement(&#39;option&#39;);
                    option.value = quarter;
                    option.textContent = quarter;
                    quarterSelect.appendChild(option);
                });
                quarterSelect.disabled = false; // 啟用街區(qū)下拉菜單}
        });

        quarterSelect.addEventListener(&#39;change&#39;, function () {
            const selectedRegion = regionSelect.value;
            const selectedTown = townSelect.value;
            const selectedQuarter = this.value;
            postalCodeInput.value = &#39;&#39;; // 清空郵政編碼if (selectedRegion && selectedTown && selectedQuarter) {
                // 找到對(duì)應(yīng)的郵政編碼const matchedDetail = allDetails.find(item => 
                    item[&#39;Region&#39;] === selectedRegion && 
                    item[&#39;Town &#39;] === selectedTown && 
                    item[&#39;Quarter &#39;] === selectedQuarter
                );

                if (matchedDetail) {
                    postalCodeInput.value = matchedDetail[&#39;Postal Code&#39;];
                }
            }
        });
    });
</script>

說明:

  • @json($details):這是Laravel Blade 的一個(gè)便捷指令,它會(huì)自動(dòng)將PHP 變量安全地轉(zhuǎn)換為JSON 字符串,並進(jìn)行HTML 實(shí)體編碼,可以直接在JavaScript 中使用。
  • document.addEventListener('DOMContentLoaded', ...):確保在HTML 文檔完全加載和解析後執(zhí)行JavaScript 代碼。
  • filter() 和map():JavaScript 數(shù)組的常用方法,用於過濾和轉(zhuǎn)換數(shù)據(jù)。
  • [...new Set(...)]:一種簡潔的JavaScript 語法,用於從數(shù)組中提取唯一的元素。
  • disabled 屬性:在用戶未做出有效選擇前,禁用後續(xù)的下拉菜單。
  • 注意鍵名:您的JSON 數(shù)據(jù)中Town 和Quarter 鍵名末尾有空格。在JavaScript 中訪問時(shí),請(qǐng)務(wù)必保留這些空格,例如item['Town ']。在實(shí)際開發(fā)中,建議保持鍵名的規(guī)範(fàn)性,避免空格。

3.3 大型數(shù)據(jù)集的考慮

如果您的JSON 文件非常大,一次性將所有數(shù)據(jù)加載到前端可能會(huì)導(dǎo)致性能問題。在這種情況下,更好的做法是:

  1. 初始加載:只在頁面加載時(shí)加載第一個(gè)下拉菜單(例如“區(qū)域”)的數(shù)據(jù)。
  2. AJAX 請(qǐng)求:當(dāng)用戶選擇一個(gè)區(qū)域時(shí),通過JavaScript (例如使用fetch API 或Axios) 向後端發(fā)送一個(gè)AJAX 請(qǐng)求,將所選區(qū)域作為參數(shù)。
  3. 後端過濾:後端控制器接收到請(qǐng)求後,根據(jù)參數(shù)從JSON 文件中過濾出對(duì)應(yīng)的鄉(xiāng)鎮(zhèn)數(shù)據(jù),並以JSON 格式返回。
  4. 前端更新: JavaScript 接收到後端返回的數(shù)據(jù)後,動(dòng)態(tài)填充鄉(xiāng)鎮(zhèn)下拉菜單。
  5. 重複:對(duì)後續(xù)的街區(qū)等下拉菜單重複此過程。

這種方法可以減少初始頁面加載的數(shù)據(jù)量,提高用戶體驗(yàn)。

總結(jié)

通過以上步驟,您已經(jīng)學(xué)會(huì)瞭如何在Laravel 應(yīng)用程序中加載和解析本地JSON 文件,並將其數(shù)據(jù)動(dòng)態(tài)地展示在Blade 模板中。無論是簡單的下拉菜單還是複雜的級(jí)聯(lián)選擇器,結(jié)合Laravel 的後端處理能力和前端JavaScript 的交互性,您都可以構(gòu)建出功能強(qiáng)大且用戶友好的表單。在實(shí)際項(xiàng)目中,請(qǐng)務(wù)必考慮數(shù)據(jù)量大小,選擇最適合的加載和交互策略。

以上是在 Laravel Blade 模板中高效利用 JSON 數(shù)據(jù)實(shí)現(xiàn)級(jí)聯(lián)下拉菜單的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1600
29
PHP教程
1502
276
以太坊是什麼幣?以太坊ETH獲得的方式有哪些? 以太坊是什麼幣?以太坊ETH獲得的方式有哪些? Jul 31, 2025 pm 11:00 PM

以太坊是一個(gè)基於智能合約的去中心化應(yīng)用平臺(tái),其原生代幣ETH可通過多種方式獲取。 1、通過Binance必安、歐意ok等中心化平臺(tái)註冊(cè)賬戶、完成KYC認(rèn)證並用穩(wěn)定幣購買ETH;2、通過去中心化平臺(tái)連接數(shù)字儲(chǔ)存,使用穩(wěn)定幣或其他代幣直接兌換ETH;3、參與網(wǎng)絡(luò)質(zhì)押,可選擇獨(dú)立質(zhì)押(需32個(gè)ETH)、流動(dòng)性質(zhì)押服務(wù)或在中心化平臺(tái)一鍵質(zhì)押以獲取獎(jiǎng)勵(lì);4、通過為Web3項(xiàng)目提供服務(wù)、完成任務(wù)或獲得空投等方式賺取ETH。建議初學(xué)者從主流中心化平臺(tái)入手,逐步過渡到去中心化方式,並始終重視資產(chǎn)安全與自主研究,以

如何在Laravel中實(shí)施推薦系統(tǒng)? 如何在Laravel中實(shí)施推薦系統(tǒng)? Aug 02, 2025 am 06:55 AM

創(chuàng)建referrals表記錄推薦關(guān)係,包含推薦人、被推薦人、推薦碼及使用時(shí)間;2.在User模型中定義belongsToMany和hasMany關(guān)係以管理推薦數(shù)據(jù);3.用戶註冊(cè)時(shí)生成唯一推薦碼(可通過模型事件實(shí)現(xiàn));4.註冊(cè)時(shí)通過查詢參數(shù)捕獲推薦碼,驗(yàn)證後建立推薦關(guān)係並防止自薦;5.當(dāng)被推薦用戶完成指定行為(如下單)時(shí)觸發(fā)獎(jiǎng)勵(lì)機(jī)制;6.生成可分享的推薦鏈接,可使用Laravel簽名URL增強(qiáng)安全性;7.在儀表板展示推薦統(tǒng)計(jì)信息,如總推薦數(shù)和已轉(zhuǎn)化數(shù);必須確保數(shù)據(jù)庫約束、會(huì)話或Cookie持久化、

Laravel的存儲(chǔ)庫合同是什麼? Laravel的存儲(chǔ)庫合同是什麼? Aug 03, 2025 am 12:10 AM

Repository模式是一種設(shè)計(jì)模式,用於解耦業(yè)務(wù)邏輯與數(shù)據(jù)訪問邏輯。 1.它通過接口(Contract)定義數(shù)據(jù)訪問方法;2.具體操作由Repository類實(shí)現(xiàn);3.控制器通過依賴注入使用接口,不直接接觸數(shù)據(jù)源;4.優(yōu)勢(shì)包括代碼整潔、可測(cè)試性強(qiáng)、便於維護(hù)和團(tuán)隊(duì)協(xié)作;5.適用於中大型項(xiàng)目,小型項(xiàng)目可直接使用模型。

如何在Laravel雄辯中使用訪問者和突變器? 如何在Laravel雄辯中使用訪問者和突變器? Aug 02, 2025 am 08:32 AM

conscortorSandMutatorsInlaravel'SeloquentormallowyOutoFormAtormanIpulateModeModeLattributesWhenRetRievorvingOrstTingValues.1.useaccessorstocustomizeattributeretributeretrieval,sueascaScapapitalizingfirst_namevirst_nameviagetFirstnameAtTeameAtTeameAtTeameAtTeameAtTeameAttribute($ value)($ value)

如何與Laravel創(chuàng)建一個(gè)寧靜的API? 如何與Laravel創(chuàng)建一個(gè)寧靜的API? Aug 02, 2025 pm 12:31 PM

創(chuàng)建Laravel項(xiàng)目並配置數(shù)據(jù)庫環(huán)境;2.使用Artisan生成模型、遷移和控制器;3.在api.php中定義API資源路由;4.實(shí)現(xiàn)控制器中的增刪改查方法並使用請(qǐng)求驗(yàn)證;5.安裝LaravelSanctum實(shí)現(xiàn)API認(rèn)證並保護(hù)路由;6.統(tǒng)一JSON響應(yīng)格式並處理錯(cuò)誤;7.使用Postman等工具測(cè)試API,最終得到一個(gè)功能完整、可擴(kuò)展的RESTfulAPI。

以太坊閃耀:美國銀行開啟數(shù)字資產(chǎn)追蹤,ETH 再成焦點(diǎn) 以太坊閃耀:美國銀行開啟數(shù)字資產(chǎn)追蹤,ETH 再成焦點(diǎn) Aug 01, 2025 pm 08:09 PM

美國銀行開啟數(shù)字資產(chǎn)追蹤標(biāo)誌著以太坊在主流金融的認(rèn)可度提升,1. 合法性認(rèn)可度提升;2. 可能吸引機(jī)構(gòu)配置數(shù)字資產(chǎn);3. 推動(dòng)合規(guī)化進(jìn)程;4. 確認(rèn)ETH作為“數(shù)字石油”的應(yīng)用前景和潛在價(jià)值;以太坊成為焦點(diǎn)因其擁有龐大的DApp生態(tài)系統(tǒng),1. 技術(shù)升級(jí)至PoS提升可擴(kuò)展性、安全性和可持續(xù)性;2. 作為DeFi核心支持借貸、交易等金融服務(wù);3. 支撐NFT繁榮鞏固生態(tài)需求;4. 拓展企業(yè)級(jí)應(yīng)用如供應(yīng)鏈管理;5. EIP-1559引入通縮機(jī)制提升稀缺性;頂尖交易平臺(tái)包括:1. Binance(交易量

了解MVC:Laravel如何實(shí)現(xiàn)模型視圖控制器模式 了解MVC:Laravel如何實(shí)現(xiàn)模型視圖控制器模式 Aug 02, 2025 am 01:04 AM

laravelimplementsthemvcpatternbyingmodelsmodelsfordatamanage,ControllerSforBusinessLogic,andViewSforPresentation.1)模型InnlaravelaravelAravelAravelAravelAravelAravelAravelAraveRormshandlingDataAndRealations.2)ControllersManagetheflowbetneflowbetefbetefbetnefbetnemodelsandviews.3)

Laravel MVC:建築限制 Laravel MVC:建築限制 Aug 03, 2025 am 12:50 AM

Laravel'simplementationofMVChaslimitations:1)Controllersoftenhandlemorethanjustdecidingwhichmodelandviewtouse,leadingto'fat'controllers.2)Eloquentmodelscantakeontoomanyresponsibilitiesbeyonddatarepresentation.3)Viewsaretightlycoupledwithcontrollers,m

See all articles