- Blade รวบรวมเทมเพลต .blade.php เป็น PHP ล้วนๆ และนำเสนอคำสั่งที่ชัดเจนสำหรับเงื่อนไข ลูป เค้าโครง และส่วนประกอบ
- สแต็กของ Blade (@stack, @push, @prepend) ช่วยให้คุณสามารถรวมสคริปต์และสไตล์ไว้ที่ศูนย์กลาง โดยมอบหมายสิ่งที่สแต็กไว้ให้กับมุมมองของย่อย
- สภาพแวดล้อม การอนุญาต เซสชัน และคำสั่งการตรวจสอบจะบูรณาการมุมมองกับกรอบงานที่เหลืออย่างปลอดภัยและชัดเจน
- คำสั่งและตัวช่วยแบบกำหนดเอง เช่น Js::from เปิดประตูสู่รูปแบบขั้นสูง รวมถึงคำสั่งแบบ hasStack
หากคุณใช้งาน Laravel เป็นประจำทุกวัน ไม่ช้าก็เร็วคุณจะต้องเจอกับ Blade, ไดเร็กทีฟต่างๆ ของมัน และแน่นอนว่ารวมถึงวิวสแต็กและแนวคิดของไดเร็กทีฟ `hasStack`ที่ใช้เพื่อจัดการวิวสแต็กให้ดียิ่งขึ้น คุณอาจเคยใช้เทมเพลต PHP แบบดั้งเดิม หรืออาจคุ้นเคยกับ React หรือ Vue แต่เมื่อคุณเข้าใจ Blade และทุกสิ่งที่มันมีให้ (รวมถึงสแต็ก) อย่างแท้จริง นั่นคือช่วงเวลาที่การจัดการวิวของคุณจะก้าวหน้าไปอย่างมาก
ในบทความนี้ เราจะเจาะลึกลงไปในรายละเอียดต่างๆ: คุณจะได้เห็นวิธีการทำงานของ Blade อย่างละเอียด คำสั่งควบคุมคืออะไร โครงสร้างของเลย์เอาต์ คอมโพเนนต์ สล็อต แอตทริบิวต์ การอนุญาต และสภาพแวดล้อมเป็นอย่างไร และในบริบทนั้น แนวคิดของสแต็กและคำสั่ง hasStack เข้ามามีบทบาทอย่างไร โดยช่วยให้คุณตรวจสอบเนื้อหาที่ซ้อนกันก่อนแสดงผล ทั้งหมดนี้จะแสดงให้เห็นด้วยตัวอย่างที่เป็นรูปธรรมและแนวทางที่สมจริงซึ่งออกแบบมาสำหรับโปรเจ็กต์ Laravel สมัยใหม่
Blade คืออะไร และเหตุใดจึงเป็นสิ่งสำคัญในการทำความเข้าใจคำสั่งต่างๆ
ใบมีดเป็น เครื่องมือเทมเพลต Laravel อย่างเป็นทางการมันไม่ได้บังคับให้คุณหยุดใช้ PHP แต่จะทำให้คุณมีรูปแบบไวยากรณ์ที่สะอาดขึ้นมากสำหรับการผสมผสานตรรกะการนำเสนอและ HTML โดยไม่ต้องเปิดและปิดแท็กอย่างต่อเนื่อง ตลอดเวลา ทุกเทมเพลต .ใบมีด.php มันถูกคอมไพล์เป็น PHP ล้วนและแคชไว้ใน storage/framework/viewsดังนั้นค่าใช้จ่ายรันไทม์จึงน้อยที่สุด
มุมมองใบมีดโดยทั่วไปจะถูกบันทึกไว้ใน ทรัพยากร/มุมมอง และถูกส่งกลับจากเส้นทางหรือตัวควบคุมโดยใช้ตัวช่วย view()คุณสามารถส่งข้อมูลไปยังตัวช่วยนี้ในอาร์กิวเมนต์ที่สอง (อาร์เรย์แบบเชื่อมโยง compact()ฯลฯ) และในมุมมองนั้น พวกเขาจะบริโภคด้วยไวยากรณ์ของ กุญแจคู่ เพื่อแสดงเนื้อหาที่หลุดออกมาหรือพร้อมเครื่องหมายอัศเจรีย์สำหรับเนื้อหาที่ไม่หลุดออกมา
ข้อได้เปรียบที่สำคัญของ Blade คือการที่มันเสนอ คำสั่งที่เฉพาะเจาะจง (คำเหล่านั้นที่ขึ้นต้นด้วย @) เพื่อจัดการกับเงื่อนไข ลูป การอนุญาต สแต็กสคริปต์ ส่วนประกอบ สล็อต การตรวจสอบ สภาพแวดล้อม... ทั้งหมดนี้ทำให้โค้ดมุมมองอ่านและบำรุงรักษาได้ง่ายกว่าการผสมผสาน PHP แบบคลาสสิกที่วุ่นวาย echo และ HTML ธรรมดา
ไวยากรณ์พื้นฐานของ Blade: echo, escape และ verbatim
การดำเนินการทั่วไปที่สุดในมุมมองคือการแสดงข้อมูล ด้วย Blade หากต้องการพิมพ์เนื้อหาของตัวแปร เพียงใช้ {{ }}ซึ่งภายในแปลว่า echo e($variable) และดังนั้นจึง, หลีกเลี่ยงเอนทิตี HTML เพื่อป้องกัน XSS:
การแสดงตัวแปรที่ถูกเข้ารหัสทำได้ง่ายๆ ดังนี้:
{{ $name }}
หากคุณต้องการแสดง HTML ที่สร้างไว้ล่วงหน้าหรือเนื้อหาที่ไม่ควรถูกแปลงเป็นอักขระพิเศษ (ตัวอย่างเช่น เพราะคุณควบคุมได้และรู้ว่าปลอดภัย) คุณสามารถใช้ไวยากรณ์{!! !!}ซึ่งจะปิดใช้งานการแปลงเป็นอักขระพิเศษโดยอัตโนมัติและปล่อยให้เบราว์เซอร์ตีความตามที่เป็นอยู่:
{!! $htmlSeguro !!}
หากคุณทำงานกับเฟรมเวิร์กส่วนหน้าที่ใช้คีย์ด้วย (เช่น Vue หรือไลบรารีเทมเพลตฝั่งไคลเอนต์บางตัว) Blade จะช่วยให้คุณ “หนี” จากเครื่องยนต์ของตัวเอง ด้วยคำนำหน้า @. ด้วยวิธีนี้ @{{ ตัวแปรจาวาสคริปต์ }} จะไม่ถูกตีความว่าเป็นการแสดงออกของ Blade แต่จะยังคงอยู่ใน HTML ที่จะประมวลผลโดยกรอบงานของเบราว์เซอร์
เมื่อคุณมีบล็อกขนาดใหญ่ที่ต้องการให้เคารพวงเล็บปีกกาคู่โดยสมบูรณ์โดยไม่ให้ Blade เข้าไปยุ่งเกี่ยว คุณสามารถใช้คำสั่ง@verbatim … @endverbatim ครอบบล็อกเหล่านั้น ได้ ทุกอย่างที่อยู่ภายในจะยังคงอยู่เหมือนเดิม ซึ่งเป็นเครื่องมือที่มีประโยชน์มากเมื่อต้องผสานรวมเทมเพลตส่วนหน้าที่ซับซ้อน
โครงสร้างการควบคุม: if, switch, loop และตัวแปร $loop
Blade มีชุดคำสั่งควบคุมการไหล ของโปรแกรมที่สมบูรณ์ ซึ่งช่วยให้การเขียนโค้ด PHP อ่านง่ายและสอดคล้องกันมากขึ้น ในทางปฏิบัติ ตรรกะแทบจะเหมือนกัน แต่คุณจะได้รับความชัดเจนและหลีกเลี่ยงการใช้แท็ก PHP มากเกินไปใน HTML ของคุณ
คำสั่ง if พวกเขาเขียนด้วย @if, @elseif, @else และพวกเขาก็ปิดท้ายด้วย @endifคุณยังมีทางลัดเช่น @unless (การปฏิเสธเงื่อนไข) @isset เพื่อตรวจสอบว่าตัวแปรได้รับการกำหนดแล้วและ @empty เพื่อตรวจสอบว่าว่างเปล่าหรือไม่
สำหรับสถานการณ์ที่มีค่าที่เป็นไปได้หลายค่า คำสั่ง @สวิตซ์ จำลองโครงสร้างสวิตช์ PHP ด้วย @case, @break, @default และปิดท้ายด้วย @endswitchซึ่งช่วยให้มีเงื่อนไขต่างๆ มากมายที่อ่านง่าย
เกี่ยวกับลูปคุณมี @สำหรับ, @foreach y @ในขณะที่นอกจากนี้ @forelseสิ่งนี้มีประโยชน์มากเมื่อคุณต้องการวนซ้ำในคอลเลกชันแต่ยังต้องจัดการกรณีของรายการว่างโดยไม่ต้องเขียนคำสั่ง if เพิ่มเติม @forelse ... @empty ... @endforelse คุณสามารถแสดงเนื้อหาทางเลือกได้หากไม่มีองค์ประกอบ
ขณะที่คุณเดินทางผ่าน @foreachBlade ทำให้ตัวแปรพร้อมใช้งานสำหรับคุณ ลูปวัตถุที่ประกอบด้วยข้อมูลที่มีประโยชน์มากเกี่ยวกับการวนซ้ำปัจจุบัน: ดัชนี ไม่ว่าจะเป็นรอบแรกหรือรอบสุดท้าย ดัชนีเป็นคู่หรือคี่ จำนวนการวนซ้ำทั้งหมด หรือแม้กระทั่งการเข้าถึงลูปหลักในกรณีของลูปซ้อนกันโดยใช้ $loop->parent.
การสืบทอดเทมเพลต เค้าโครง และส่วนต่างๆ
ในการใช้งานจริง คุณไม่ต้องการทำซ้ำส่วนหัว เมนู หรือส่วนท้ายในทุกมุมมอง Blade ช่วยให้คุณกำหนด เค้าโครงหลัก (โดยทั่วไปจะถูกเก็บไว้ใน) resources/views/layouts/master.blade.php) ที่ทุกหน้าสืบทอดมา ภายในเค้าโครง คุณกำหนดพื้นที่ "ว่าง" ด้วย @yield และส่วนที่เหลือของ HTML ทั่วไปยังคงมีเสถียรภาพ
หากต้องการใช้เค้าโครงนั้นจากมุมมองเด็ก คุณเพียงแค่ต้องระบุ @ขยาย('เลย์เอาต์.มาสเตอร์') และประกาศส่วนที่คุณต้องการกรอกโดยใช้ @ส่วน y @ส่วนท้าย. ทุก @yield('nombre') ปริญญาโทจะสอดคล้องกับ @section('nombre') ในมุมมองของลูกสาว
นอกจากนี้ คำสั่ง@parentยังช่วยให้คุณสามารถแทนที่ส่วนต่างๆ ได้ และยังสามารถเพิ่มเนื้อหาด้านบนหรือด้านล่างของเลย์เอาต์ได้อีกด้วยซึ่งมีประโยชน์มากในแถบด้านข้างหรือบล็อกที่คุณต้องการขยาย ไม่ใช่แทนที่
หากคุณจำเป็นต้องรวมโค้ด HTML ที่นำมาใช้ซ้ำได้โดยไม่ต้องสืบทอดแบบเต็ม Blade จะจัดเตรียมไว้ให้ @รวม และคำสั่งที่เกี่ยวข้องทั้งหมด: @includeIf, @includeWhen, @includeUnless y @includeFirstซึ่งช่วยให้คุณรวมมุมมองย่อยตามเงื่อนไขหรือเลือกมุมมองย่อยแรกที่มีอยู่ในรายการเส้นทางที่เป็นไปได้
ในกรณีที่คุณต้องการทำซ้ำส่วนย่อยเล็กๆ สำหรับแต่ละองค์ประกอบในคอลเลกชัน คำสั่ง @eachจะรวม foreach + include เข้าไว้ในบรรทัดเดียว และยังสามารถกำหนดมุมมองทางเลือกสำหรับกรณีที่คอลเลกชันว่างเปล่าได้อีกด้วย
ส่วนประกอบของใบมีด ช่อง และคุณลักษณะ
คอมponent ของ Blade คือวิวัฒนาการตามธรรมชาติของ layout และ includes: มันช่วยให้คุณสามารถห่อหุ้มส่วนประกอบอินเทอร์เฟซที่นำกลับมาใช้ ซ้ำได้ (ปุ่ม การแจ้งเตือน การ์ด ฟอร์ม…) ด้วยตรรกะ คุณสมบัติ และ slot ของตัวเอง ซึ่งสามารถแทรกเนื้อหาจากภายนอกได้ ทั้งหมดนี้ด้วยไวยากรณ์ที่ใกล้เคียงกับคอมponent ของเฟรมเวิร์ก JS สมัยใหม่
มีส่วนประกอบหลักอยู่ 2 ประเภท: ตามชั้นเรียน (ตั้งอยู่ใน app/View/Components, สร้างขึ้นด้วย php artisan make:component) และ ไม่ระบุชื่อซึ่งจะเห็นได้เฉพาะใน resources/views/components โดยไม่มีคลาสที่เกี่ยวข้อง ในทั้งสองกรณี พวกมันจะถูกแสดงในมุมมองที่มีป้ายกำกับประเภท <x-alert /> o <x-forms.input />.
ส่วนประกอบตามคลาสได้รับข้อมูลผ่าน แอตทริบิวต์ HTML (กับ kebab-case อยู่ในสายตาและ camelCase ในคอนสตรัคเตอร์) จะถูกเปิดเผยในมุมมองส่วนประกอบเป็นคุณสมบัติสาธารณะและสามารถเลือกใช้วิธีได้ shouldRender() เพื่อตัดสินใจโดยมีเงื่อนไขว่าควรแสดงหรือไม่
สำหรับเนื้อหาที่มีความยืดหยุ่น ส่วนประกอบมีคุณลักษณะ สล็อตเนื้อหาหลักเข้าถึงได้ที่ $slot ในเทมเพลตส่วนประกอบและ สล็อตที่มีชื่อ ถูกกำหนดโดยใช้ <x-slot name="titulo">...</x-slot> เมื่อใช้ส่วนประกอบ จากภายใน คุณสามารถเรียกใช้เมธอดของส่วนประกอบได้ผ่าน $component และแม้กระทั่งตรวจสอบว่าช่องว่างด้วย $slot->isEmpty() หรือหากมีเนื้อหาจริงด้วย $slot->hasActualContent().
ส่วนประกอบยังจัดการอย่างมีระดับ คุณสมบัติเพิ่มเติม ที่ไม่ตรงกับคุณสมบัติของ constructor (ตัวอย่างเช่น class, id, data-*ทั้งหมดนี้ถูกจัดกลุ่มเป็น “ถุงคุณลักษณะ” ที่เข้าถึงได้ด้วย $attributesซึ่งคุณสามารถแสดงผลตามที่เป็นอยู่หรือจัดการด้วยวิธีการเช่น merge(), class(), prepend(), filter(), whereStartsWith(), has() o get().
นอกจากนี้ Blade ยังมีคำสั่งเฉพาะสำหรับ HTML แบบฟอร์มทั่วไป ได้แก่@checked , @selected , @disabled , @readonlyและ@requiredซึ่งจะแสดงแอตทริบิวต์ที่เกี่ยวข้องก็ต่อเมื่อเงื่อนไขที่ได้รับนั้นเป็นจริงเท่านั้น
เค้าโครงที่ใช้ส่วนประกอบและการสืบทอดแบบคลาสสิก
ใน Laravel ยุคใหม่ การกำหนดเค้าโครงทั่วไปของแอปเป็น ส่วนประกอบของใบมีด (ตัวอย่างเช่น <x-layout>) แทนที่จะใช้การสืบทอดแบบคลาสสิกเพียงอย่างเดียว @extendsด้วยวิธีนี้เค้าโครงสามารถรับช่อง แอตทริบิวต์ และคุณสมบัติได้เช่นเดียวกับส่วนประกอบอื่นๆ
รูปแบบทั่วไปเกี่ยวข้องกับการสร้างส่วนประกอบ แบบ กับ php artisan make:component Layoutกำหนดโครงสร้าง HTML พื้นฐาน (ส่วนหัว, ลิงก์ CSS, การนำทาง, ส่วนท้าย) ในเทมเพลตของคุณและใช้ {{ $slot }} เพื่อแทรกเนื้อหาหลัก สามารถเลือกช่องที่มีชื่อได้ title เพื่อให้แต่ละหน้ามีการระบุชื่อเรื่องอย่างชัดเจน
ในทางกลับกัน ตัวเลือก "คลาสสิก" ยังคงมีอยู่ด้วย การสืบทอดเทมเพลต ผ่านทาง @extends, @section y @yieldวิธีนี้ใช้กันอย่างแพร่หลายก่อนที่จะมีการเผยแพร่ส่วนประกอบต่างๆ คุณสามารถผสมผสานทั้งสองวิธีเข้าด้วยกันได้ โดยใช้เลย์เอาต์แบบอิงส่วนประกอบสำหรับทุกอย่าง หรือจะยึดตามการสืบทอดแบบดั้งเดิมหากโครงการของคุณตั้งค่าไว้แบบนั้นอยู่แล้ว
ในทั้งสองกรณี เป้าหมายเหมือนกันคือเพื่อหลีกเลี่ยงการสร้างโครงสร้าง HTML ซ้ำในแต่ละมุมมองเพื่อรักษาจุดอ้างอิงเดียวสำหรับเค้าโครง และเพื่อให้แต่ละหน้าสามารถมุ่งเน้นไปที่เนื้อหาเฉพาะของตนเองได้เท่านั้น
เซสชัน การรับรองความถูกต้อง สภาพแวดล้อม และการอนุญาตใน Blade
Blade ผสานรวมเข้ากับส่วนอื่นๆ ของเฟรมเวิร์กได้เป็นอย่างดี ดังนั้นจึงไม่จำกัดอยู่แค่การแสดงผล HTML เท่านั้น แต่ยังให้คำสั่งระดับสูงในการโต้ตอบกับเซสชัน ระบบการตรวจสอบสิทธิ์ สภาพแวดล้อมของแอป และกฎการอนุญาต อีกด้วย
สำหรับการตรวจสอบสิทธิ์ มีคำสั่งต่างๆ เช่น@authและ@guestซึ่งจะแสดงเนื้อหาเฉพาะเมื่อผู้ใช้ได้รับการตรวจสอบสิทธิ์แล้ว หรือเป็นผู้เยี่ยมชม ตามลำดับ นอกจากนี้ คุณยังสามารถระบุ guard เฉพาะเป็นอาร์กิวเมนต์เพื่อปรับแต่งบริบทการตรวจสอบสิทธิ์ที่ใช้ได้อีกด้วย
ลา คำสั่งด้านสิ่งแวดล้อม ในขณะที่ @production o @env('local') ฟังก์ชันเหล่านี้ช่วยให้คุณกำหนดเงื่อนไขของส่วนต่างๆ ของมุมมองตามสภาพแวดล้อม Laravel ในปัจจุบัน มีประโยชน์มาก เช่น สำหรับการแสดงแบนเนอร์ การติดตามการดีบัก หรือสคริปต์เฉพาะในสภาพแวดล้อมแบบโลคัลหรือสเตจจิ้ง
ในส่วนของเซสชัน คำสั่ง @sessionช่วยให้ตรวจสอบได้ง่ายว่ามีคีย์เซสชันอยู่หรือไม่ และหากมี ก็จะส่งค่าของคีย์นั้นผ่าน ตัวแปร $valueซึ่งช่วยแก้ปัญหาข้อความแจ้งเตือนหรือข้อความแวบขึ้นมาแบบเดิมๆ ได้อย่างลงตัว
สำหรับนโยบายและการอนุญาตแบบเกต Blade ให้บริการ @สามารถ, @ไม่สามารถ y @คานานี่ด้วยเครื่องมือเหล่านี้ คุณสามารถแสดงหรือซ่อนปุ่ม ลิงก์ หรือบล็อกทั้งหมดได้ ขึ้นอยู่กับว่าผู้ใช้มีสิทธิ์ในการดำเนินการเฉพาะบนโมเดลหรือคลาสหรือไม่ รวมกับ @guest o @authมันช่วยให้สามารถสร้างอินเทอร์เฟซที่ปลอดภัยและชัดเจนยิ่งขึ้น
แบบฟอร์ม การตรวจสอบ และการจัดการข้อผิดพลาดในมุมมอง
เมื่อคุณเปลี่ยนจากการแสดงผลแบบคงที่ไปใช้ฟอร์ม คุณจะเห็นได้ว่า Blade สะดวกสบายแค่ไหน Laravel กำหนดให้คุณต้องใส่โทเค็น CSRFในฟอร์มทั้งหมดที่แก้ไขข้อมูล และเพื่อหลีกเลี่ยงการเขียนฟิลด์ที่ซ่อนไว้ด้วยตนเอง มี คำสั่ง `@csrf`ซึ่งจะสร้างอินพุตพร้อมโทเค็นที่เกี่ยวข้องให้โดยอัตโนมัติ
วิธีการ HTTP เช่น ใส่ แพทช์ หรือลบ พวกมันถูกจำลองผ่านสนามที่ซ่อนอยู่ _methodและ Blade ทำให้คุณใช้งานได้ @method('ใส่') (หรือ PATCH/DELETE) เพื่อสร้างโดยอัตโนมัติภายในแบบฟอร์ม
เพื่อที่จะแสดง ข้อผิดพลาดในการตรวจสอบ มีคำสั่งอยู่ @ความผิดพลาดซึ่งเชื่อมโยงกับฟิลด์เฉพาะ ภายในฟิลด์นั้น คุณมีตัวแปรที่พร้อมใช้งาน ข้อความ พร้อมข้อความแสดงข้อผิดพลาด เนื่องจากเป็นคำสั่ง if ที่คอมไพล์แล้ว คุณจึงสามารถใช้ @else เพื่อแสดงเนื้อหาทางเลือกเมื่อไม่มีข้อผิดพลาด
วัตถุ ข้อผิดพลาด จะปรากฏในมุมมองและจัดกลุ่มข้อความตรวจสอบความถูกต้องทั้งหมดสำหรับคำขอปัจจุบันอยู่เสมอ ผสานรวมกับตัวช่วยได้อย่างราบรื่น old()ซึ่งช่วยให้คุณสามารถ "เติมข้อมูล" ลงในแบบฟอร์มใหม่ด้วยค่าที่ส่งโดยผู้ใช้หลังจากการตรวจสอบล้มเหลว โดยเก็บรักษารายการไว้และแสดงข้อผิดพลาดอย่างชัดเจน
ด้วยการผสานคำสั่งเหล่านี้เข้ากับกฎการตรวจสอบความถูกต้องในคอนโทรลเลอร์หรือคำขอแบบฟอร์ม คุณจะมี กระบวนการ ตรวจสอบความถูกต้องฝั่งเซิร์ฟเวอร์ที่แข็งแกร่งซึ่งเสริมกับการตรวจสอบความถูกต้องฝั่งไคลเอ็นต์ และมีความปลอดภัยมากขึ้นจากการถูกแทรกแซงโดยผู้ไม่ประสงค์ดี
สแต็กใน Blade: @stack, @push, @prepend และแนวคิด hasStack
หนึ่งในคุณสมบัติของ Blade ที่ไม่ค่อยมีคนพูดถึงแต่มีประโยชน์มากสำหรับโปรเจ็กต์ขนาดใหญ่คือสแต็ก (Stacks ) สแต็กโดยพื้นฐานแล้วคือกลุ่มของส่วนแสดงมุมมอง (View Fragment) ที่คุณสามารถเพิ่มเนื้อหาจากมุมมองย่อย คอมโพเนนต์ หรือไฟล์ที่รวมเข้ามา (Include) จากนั้นแสดงผลทั้งหมดพร้อมกัน ณ จุดใดจุดหนึ่งในเลย์เอาต์หลัก
คำสั่ง`@stack('name')`ระบุตำแหน่งที่จะผลักส่วนประกอบทั้งหมดที่เกี่ยวข้องกับสแต็กนั้น ในทางตรงกันข้าม จากมุมมองอื่นๆ คุณสามารถใช้`@push('name')`เพื่อผลักเนื้อหาไปที่ท้ายสแต็ก หรือ`@prepend('name') ` เพื่อผลักไปที่ต้นสแต็ก ซึ่งมักใช้กับสคริปต์และสไตล์เฉพาะหน้า
ลองนึกภาพว่าในเค้าโครงของคุณมีบางอย่างเช่นนี้ <head> และในตอนท้ายของ <body>:
@stack('styles')
...
@stack('scripts')
จากนั้น ในมุมมองเฉพาะที่ต้องการJavaScript เพิ่มเติมคุณสามารถทำได้ดังนี้:
@push('scripts')
<script src="/js/pagina-especifica.js"></script>
@endpush
วิธีนี้ช่วยให้การจัดวางไม่ต้องรู้สคริปต์หรือสไตล์ทุกอย่างในทุกหน้าโดยจะกำหนดเฉพาะสแต็กเท่านั้น และวิวลูกจะจัดเรียงสิ่งที่จำเป็นลงในสแต็กเอง นอกจากนี้ยังมี`@pushIf`สำหรับเพิ่มเนื้อหาตามเงื่อนไขบูลีนโดยไม่ต้องเขียนคำสั่ง `if` ทั้งหมด
ในบริบทนี้ นักพัฒนาหลายคนมักขาดคำสั่งอย่างเช่น `@hasStack` หรือคำสั่งที่คล้ายกันซึ่งจะช่วยให้พวกเขาสามารถตรวจสอบได้ว่าสแต็กที่กำหนดมีเนื้อหาอยู่หรือไม่ก่อนที่จะแสดงผล แม้ว่า Blade จะไม่มีคำสั่งที่มีชื่อนั้นมาให้ในตัว แต่แนวคิดนั้นชัดเจน: คือการสามารถทำสิ่งต่างๆ เช่น "ถ้าสแต็กสคริปต์ว่างเปล่า อย่าพิมพ์ป้ายกำกับเพิ่มเติม" หรือ "ถ้ามีองค์ประกอบอยู่ในสแต็กเมตาเดตา ให้ห่อหุ้มองค์ประกอบเหล่านั้นด้วยบล็อกเฉพาะ"
หนทางที่จะบรรลุพฤติกรรมที่เท่าเทียมกันในปัจจุบันคือ เสริมคำสั่งสแต็กด้วยตรรกะในเค้าโครง หรือด้วยผู้ช่วยที่กำหนดเองหรือแม้แต่ด้วยคำสั่งที่ลงทะเบียนของเราเองผ่าน Blade::directive()ด้วยวิธีนี้ จึงสามารถจำลองคำสั่ง hasStack ที่จะสอบถามสแต็กภายในก่อนที่จะตัดสินใจว่าจะสร้าง HTML ตัวใด
JSON, JavaScript และคำสั่งช่วยเหลือใน Blade
ในมุมมอง Laravel จำนวนมาก คุณจำเป็นต้องส่งข้อมูลจากแบ็กเอนด์ไปยัง JavaScript โดยทั่วไปแล้ว การดำเนินการนี้เกี่ยวข้องกับการทำ json_encode() ของอาร์เรย์หรือคอลเลกชันและปล่อยให้มันอยู่ในสคริปต์อินไลน์ แต่นั่นก็ไม่ได้ปลอดภัยหรือสะดวกเสมอไป Laravel ทำให้สิ่งนี้ง่ายขึ้นด้วยตัวช่วย Js::จาก()ซึ่งจะทำการแปลงค่า PHP เป็น JSON และแปลงค่าให้เป็น HTML ได้อย่างถูกต้อง
เมื่อคุณแสดงข้อมูลที่ซับซ้อนไปยังเบราว์เซอร์ Js::จาก() หลีกเลี่ยงปัญหาเรื่องเครื่องหมายคำพูดหรืออักขระพิเศษและส่งคืนนิพจน์ JSON.parse() ปลอดภัยสำหรับการรวมอยู่ในแอตทริบิวต์หรือสคริปต์ ไม่แนะนำให้ส่งนิพจน์ที่ซับซ้อนภายในไดเรกทีฟ เนื่องจากภายใน Blade ใช้ regex ในการคอมไพล์นิพจน์เหล่านี้ ซึ่งอาจทำให้เกิดปัญหาที่ไม่คาดคิดได้
นอกจากนี้ Blade ยังอนุญาตให้คุณกำหนดคอมเมนต์เทมเพลตที่ไม่ถูกส่งต่อไปยัง HTML สุดท้าย (ต่างจากคอมเมนต์ HTML แบบคลาสสิก) และ บล็อก @php … @endphpที่คุณสามารถเรียกใช้โค้ด PHP สั้นๆ ได้เมื่อจำเป็นจริงๆ คุณยังสามารถใช้@useเพื่อนำเข้าคลาสไปยังวิวหรือกำหนดชื่อเรียกแทนให้กับคลาสเหล่านั้น ซึ่งมีประโยชน์เมื่อทำงานกับตัวช่วยหรือคอมโพเนนต์ที่เฉพาะเจาะจงมาก
หากคุณถึงจุดที่ต้องการฟังก์ชันเสียงสะท้อนเฉพาะทางสูงสำหรับวัตถุบางอย่าง คุณสามารถลงทะเบียนได้ ตัวจัดการเสียงสะท้อนที่กำหนดเอง กับ Blade::stringable()เพื่อว่าเมื่อทำการสะท้อนวัตถุเฉพาะ Blade จะเรียกการโทรกลับของคุณแทนวิธีวิเศษ __toString() ของชั้นเรียน
มุมมองข้อผิดพลาด ชิ้นส่วน และคำสั่งที่กำหนดเอง
Laravel ช่วยให้คุณปรับแต่งได้ มุมมองข้อผิดพลาด: เพียงสร้างไฟล์ใน resources/views/errors โดยใช้รหัส HTTP เป็นชื่อ (ตัวอย่างเช่น 404.blade.php o 500.blade.phpทุกครั้งที่เกิดข้อผิดพลาดดังกล่าว เทมเพลตของคุณจะถูกใช้แทนเทมเพลตทั่วไปจากกรอบงาน
สำหรับกรณีที่คุณทำงานกับเครื่องมือเช่น Turbo หรือ htmx และต้องการส่งคืน ส่วนที่เจาะจงของมุมมองเบลดเสนอคำสั่ง @fragment … @endfragment ผสมผสานกับวิธีการต่างๆ เช่น view('...')->fragment('nombre'), fragmentIf(), fragments() y fragmentsIf()วิธีนี้ช่วยให้คุณใช้เทมเพลตเดียวกันซ้ำทั้งหมดและแยกเฉพาะส่วนที่คุณต้องการขึ้นอยู่กับบริบท
หากคลังคำสั่งไม่เพียงพอสำหรับคุณ คุณสามารถสร้างคำสั่งของคุณเองได้เสมอด้วย ใบมีด::ไดเรกทีฟ()การปฏิบัติตามปกติคือการลงทะเบียนโดยใช้วิธีการ boot() de AppServiceProvider หรือผ่านผู้ให้บริการเฉพาะ คอมไพเลอร์ Blade จะส่งนิพจน์ภายในคำสั่งให้คุณเป็นสตริง และคุณจะส่งคืนโค้ด PHP ที่คุณต้องการให้สร้างขึ้นเมื่อคอมไพล์
สำหรับเงื่อนไขที่กำหนดเองอย่างง่ายก็มี ใบมีด::ถ้า()ซึ่งสร้างคำสั่งแบบมีเงื่อนไขในบรรทัดเดียว ตัวอย่างเช่น คุณสามารถกำหนด @disk('s3') เพื่อตรวจสอบว่าดิสก์เริ่มต้นของแอปคือ S3 หรือไม่ จากนั้นใช้ในมุมมองใดก็ได้เหมือนกับว่าเป็นไดเร็กทิฟดั้งเดิม
ด้วยเครื่องมือเหล่านี้ คุณสามารถสร้างภาษาเทมเพลตที่ปรับแต่งให้เหมาะกับความต้องการของคุณได้อย่างแท้จริงรวมถึงคำสั่งประเภท hasStack หากคุณต้องการ ซึ่งทำหน้าที่เป็นตัวช่วยในการเขียนโค้ดสำหรับตรรกะที่ตรวจสอบภายในว่าสแต็กมีเนื้อหาหรือไม่ก่อนที่จะแสดงผล
การเรียนรู้ Blade อย่างลึกซึ้ง ตั้งแต่ไวยากรณ์พื้นฐานไปจนถึงส่วนประกอบขั้นสูง คำสั่งการอนุญาต การตรวจสอบความถูกต้อง สภาพแวดล้อม และเหนือสิ่งอื่นใด การจัดการสแต็ก จะช่วยให้คุณสร้าง มุมมอง แบบโมดูลาร์ ปลอดภัย สม่ำเสมอ และบำรุงรักษาง่ายซึ่งในอนาคต คำสั่งอย่าง hasStack จะเข้ามาเสริมได้อย่างลงตัว เพื่อเพิ่มการควบคุมสิ่งที่แทรกเข้าไปในแต่ละส่วนของเลย์เอาต์ของคุณให้สมบูรณ์ยิ่งขึ้น