การพัฒนาเว็บไซต์ด้วยชุด framework ต่าง ๆ จะให้ได้รับความนิยมของ framework นั้น ๆ ต้องมีความพร้อมในเรื่องการจัดการ view ก็คือเครื่องมือการพัฒนาในส่วนของงานการแสดงผลของ data ต่าง ๆ การที่ laravel มาพร้อมกับ blade template engine นี้ถือว่าครบเพียบพร้อม เหมาะแก่การใช้งานเป็นอย่างมาก บทความนี้จะพาไปรู้จักการใช้งาน blade template engine นี้กันว่ามีการทำงานร่วมกับ laravel อย่างไรได้บ้าง
การใช้งาน Blade เพื่อ displaying data จาก controller
การที่จะนำค่าที่ผ่านกระบวนการทำงานจาก controller ไปที่ views (*.blade.php) โดยไฟล์ *.blade.php ทั้งหมดจะถูกจัดเก็บไว้ที่ resources/views/*
- สร้างไฟล์ {viewname}.blade.php ตัวอย่าง views/example/datatype.blade.php
<html> <body> <h1>DataType</h1> <h3>String</h3> <p>{{$string}}</p> <hr /> <h3>Boolean</h3> <p>{{$boolean}}</p> <hr /> <h3>Integer</h3> <p>{{$integer}}</p> <hr /> <h3>Object</h3> <p>{{$object['content']}}</p> <hr /> <h3>Array</h3> <p> <ol> @foreach($array as $index=> $item) <li>{{$item['content']}}</li> @endforeach </ol> </p> <hr /> </body> </html>
- แก้ไขไฟล์ routes/web.php กำหนด view(‘datatype’,[?]) กำหนด parameter data ที่จะส่งไปที่ view ใน arg ที่ 2 [?]
Route::get('/datatype', function () { return view('/example/datatype', [ 'string' => 'Laravel ใช้งาน view (blade template), json ,pdf', 'boolean' => true, 'integer' => 9999, 'object' => [ 'content' => 'Laravel ใช้งาน view (blade template), json ,pdf EP3', 'author' => 'poolsawat' ], 'array' => [ ['content' => 'Laravel เริ่มติดตั้งและสร้าง route ง่าย ๆ EP1'], ['content' => 'Laravel แนะนำโครงสร้างภายในโปรเจค อธิบายแต่ละส่วนการทำงาน EP2'], ['content' => 'Laravel ใช้งาน view (blade template), json ,pdf EP3'], ] ]); });
- ดูผลลัพธ์ที่ http://localhost:8000/datatype
การใช้งาน blade ในกรณีต้องการใช้งาน control structures (IF ,ELSE ,SWITCH ,LOOP (for ,foreach ,while) ต่าง ๆ เหล่านี้ ทำอย่างไร
ในบางครั้ง บางกรณีที่ต้องการตะเช็คเงื่อนไขในการที่จะแสดงผลของ data หรืออยากที่จะแสดงผลค่าที่เป็นในลักษณะชุดข้อมูล (array) ทาง blade ก็มีคำสั่งมาให้พร้อมแล้ว โดยการที่จะเรียกคำสั่งนั้น จะมี tag @ ตามด้วย name เช่น @if ,@for เป็นต้น
- สร้างไฟล์ views/example/control.blade.php
<!DOCTYPE html> <html lang="en"> <body> <h1>Control Structures</h1> <p>IF ,ELSEIF ,ELSE ,LOOP (FOR,FOREACH,WHILE) ,SWITCH</p> </body> <h1>IF</h1> @if (count($records) === 1) I have one record! @elseif (count($records) > 1) I have multiple records! @else I don't have any records! @endif <hr /> <h1>SWITCH</h1> @switch($case) @case(1) First case... @break @case(2) Second case... @break @default Default case... @endswitch <hr /> <h1>LOOP</h1> <h3>FOR</h3> @for ($i = 0; $i < 4; $i++) <br />The current value is {{ $i }} @endfor <h3>FOREACH</h3> @foreach ($records as $rec) <p>This is record {{ $rec }}</p> @endforeach <hr /> <h3>FORELSE</h3> @forelse ($records as $rec) <li>{{ $rec }}</li> @empty <p>No users</p> @endforelse <hr /> <h3>WHILE</h3> @php $i = 0 @endphp @while ($i < 4) <p>I'm looping forever.</p> @php $i++ @endphp @endwhile </html>
- แก้ไขไฟล์ routes/web.php โดยเพิ่ม route “control-structures” เข้าไป
Route::get('/control-structures', function () { return view('example/control', [ 'records' => [1, 2, 3, 4], 'case' => 2 ]); });
- ดูผลลัพธ์ที่ http://localhost:8000/control-structures
การใช้งาน blade กับการทำ component แยกส่วน
framework ที่ได้รับความนิยมในปัจจุบัน React , Angular ,Vue มีจุดเด่นเรื่องการทำ Component management โดยทั้งสิ้น Laravel เองก็มี concept นี้ด้วยเช่นกัน (ทีมเดียวกับที่พัฒนา Vue) ถือเป็นข้อดีอีกอย่างที่อยากแนะนำให้ใช้งาน laravel
- สร้างไฟล์ views/example/component.blade.php , views/components/alert.blade.php ,views/components/message.blade.php ,views/components/message-slot.blade.php ตาลำดับ
<!-- views/example/component.blade.php --> <!DOCTYPE html> <html lang="en"> <body> <h1>Component</h1> <h3>empty data</h3> @component('components/message',[]) @endcomponent <hr /> <h3>has data</h3> @component('components/message',['name' => 'poolsawat.com']) @endcomponent <hr /> <h3>append slot</h3> @component('components/message-slot',[]) <div>element slot 1</div> <div>element slot 2</div> @endcomponent <hr /> <x-alert /> </body> </html>
<!-- views/components/alert.blade.php --> <h1>x-{component}</h1>
<!-- views/components/message.blade.php --> <h2> @if (empty($name)) component message ... @else component message {{$name}} @endif </h2>
<!-- views/components/message-slot.blade.php --> <h2> component message append slot {{ $slot }} </h2>
- แก้ไขไฟล์ routes/web.php เพิ่ม route “components”
Route::get('/components', function () { return view('example/component', []); });
- ดูผลลัพธ์ที่
- components ของ laravel มีรูปแบบการเรียกได้ 2 วิธี
- @component(‘components/alert’,[]) @endcomponent สามารถเรียกได้แบบนี้จากหน้า views
- <x-alert /> สามารถเรียกได้แต่ต้องมีไฟล์ app/View/Components/Alert.php โดย genarate Component ได้ด้วยคำสั่ง artisan package นี้
php artisan make:component Alert
<?php namespace App\View\Components; use Illuminate\View\Component; class Alert extends Component { /** * Create a new component instance. * * @return void */ public function __construct() { // } /** * Get the view / contents that represent the component. * * @return \Illuminate\View\View|string */ public function render() { return view('components.alert'); } }
เหล่านี้คือการเรียกใช้งาน blade template engine ง่าย ๆ ยังมีความสามารถอีกเยอะมาก ศึกษาเพิ่มเติ่มที่นี่