รู้ไว้ 50 ข้อ เมื่อเริ่มต้นพัฒนา Website ด้วย Laravel 5.X ถ้าอยากจะลดระยะเวลาในการพัฒนา สิ่งที่จะบอกในบทความนี้ต้องช่วยคุณได้แน่ ๆ ผมรับรอง (EP.1/2)
ช่วงตอนที่ผมได้เอาเจ้าตัว Laravel มาใช้งานตอนนั้นก็ตรงกับ v. 5.X พอดี ขอใช้ version นี้มาเป็นตัวอย่างก็แล้วกัน เน้นเอาแต่สิ่งที่คิดว่าต้องทราบก่อนในช่วงเริ่มต้นพัฒนา
ไม่เยิ้นเย้อเริ่มกันเลย
- หน้า website หลักของ Laravel
- การ installation Laravel ติดตั้งได้ 2 วิิธี คือ “
laravel new blog
” และ “composer create-project --prefer-dist laravel/laravel blog
” เลือกเองได้โตแล้ว หรือจะเข้าไปดูรายละเอียดได้จากลิ้งนี้ Installation Laravel - Laravel มีคำ command ที่ชาญฉลาด (artisan) 1 ในคำสั่งนั้นคือ “
php artisan serve"
เราก็จะได้ web server ที่ start พร้อม dev ได้แล้ว โดย access เข้าด้วยhttp://localhost:8000
- config Laravel ต่าง ๆ จะอยู่ที่ไฟล์ .env ตัวอย่างเช่น database ,app name เป็นต้น
- ถ้าอยากจะ dev laravel ให้คล่องแคร่วและ ว่องไว ควรจะรู้ว่าไฟล์ต่าง ๆ อยู่ที่ไหนบ้าง ดังนั้นควรศึกษาให้เข้าใจในเรื่อง Directory Structure
- Route (URL ของแต่ละ Page) จะเก็บรวบรวมอยู่ที่ไฟล์
routes/web.php
กำหนดเพิ่มได้ที่ไฟล์นี้ - Route [::get,::post,::put,::patch,::delete,::options] โดยพื้นฐาน แต่ก็มี [::match,::any] ให้ใช้งานหากต้องการเพิ่มความสามารถในการใช้งานที่มีความหลากหลายมากขั้น ทำความเข้าใจเพิ่มเติมได้ที่ Routing
- Route::get มีความสามารถในการกำหนด optional parameters ได้โดยใส่ “/
{name?}
” และกำหนดค่า default ไว้ใน callback function แทนหากไม่มีการส่งค่า parameters {name?} - Route::get validate parameters ได้ด้วย Regular Expression Constraints ตัวอย่าง
->where('id' => '[0-9]+');
คือการกำหนดให้ส่งค่า parameter {name} ได้แต่ตัวเลข 0–9 ได้เท่านั้น - Route::fallback กำหนด url ที่เกิดกรณี 404 page not found
- cross-site request forgery (CSRF) เพิ่มความ secure โดยการเพิ่ม
@csrf
ใน form POST ศึกษาเพิ่มเติมที่นี่ CSRF Protection - X-CSRF-TOKEN function POST จะมีการ check X-CSRF-TOKEN request header แก้โดยเพิ่ม “
<meta name="csrf-token" content="{{ csrf_token() }}">
” ไว้ใน tag header ของ layout page - สร้าง Controller File เพื่อแยก Business Logic ออกจากไฟล์ /route/web.php และทำการ Mapping Route ด้วย
Route::get('user/{id}', 'UserController@show')
แทนการเขียน Logic ในไฟล์ /route/web.php - สร้างไฟล์ Controller ด้วยคำสั่ง
php artisan make:controller PhotoController
ช่วยลดเวลาการ dev ได้ ศึกษาเพิ่มเติมได้ที่ลิ้งน Controller - Get Data จาก
Illuminate\Http\Request
parameters มีด้วยกันหลายวิธี $request->input[‘name’] ,
$request->all() จะได้ array ,
$request->name ,
$request->query(‘name’) จะได้ parameter name จาก queryString ,
$request->input(‘user.name’) อ่าน jsonbody จาก post data { “user” : {“name” : “medium”}} ,
$request->filled(‘name’) check input name is empty ? - Get Cookie จาก
Illuminate\Http\Request
จะใช้$request->cookie('name');
หรือCookie::get('name')
ก็ได้ไม่มีปัญหา - Get File Data จาก
Illuminate\Http\Request
$request->file(‘photo’) หรือ $request->photo ใช้ function has ตรวจสอบ File ว่ามีค่ามาหรือไม่ด้วย$request->has('photo')
ก็จะ self code ได้ระดับนึง - สร้าง Response Object ด้วย
Illuminate\Http\Response
มีด้วยกันหลายวิธีตัวอย่างเช่น returnresponse('Hello World', 200)
->header('Content-Type', 'text/plain'); - Redirect
Illuminate\Http\RedirectResponse
ทำได้ด้วยreturn redirect('home/dashboard');
หรืออยากจะย้อนกลับไป step ก่อนหน้าreturn back()->withInput();
- Redirect
Illuminate\Http\RedirectResponse
โดยการแนบ Flash Session Data เพื่อใช้ไว้การแจ้งเตือนการทำ transaction status ด้วยreturn redirect('dashboard')->with('status', 'Profile updated!');
- สร้าง Response JSON ด้วย
return response()->json([ 'name' => 'Abigail', 'state' => 'CA']);
- สร้าง Response Streamed Downloads ด้วย
return response()->download($pathToFile);
- สร้าง view และเรียกใช้คำสั่ง
return view('admin.profile', $data);
โดยสร้างไฟล์ view ไว้ที่resources/views/admin/profile.blade.php
- อ้างอิง URL ของแต่ละ route path ด้วย
url("/posts/{$post->id}"); http://example.com/posts/1
- ว่าด้วยเรื่องการเก็บข้อมูล Session
- Session::get(“key”) หรือ $request->session()->get(“key”) เพื่อ Get Data
- Session:put(“key”,”value”) หรือ $request->session()->put(“key”,”value”) เพื่อ Set Data
- Session::exists(“key”) หรือ $request->session()->exists(“key”); เพื่อ Check Key เคยมีใน session แล้วหรือยัง
- Session::push(“key”,”value”) หรือ $request->session()->push(“key”,”value”) เพิ่มค่า item ใน session array
- Session::pull(‘key’,”default”) ลบค่า item ใน session array
- Session::forget(“key”) หรือ $request->session()->forget(“key”) ลบ session - เรื่อง Validate Input
$request->validate([
validate input return ค่า error จากนั้นก็ set Flash Data ให้กลับไปที่หน้า form ด้วย
'title' => 'required|unique:posts|max:255',
'body' => 'required',
]);return redirect('post/create')
ศึกษาเพิ่มเติมได้ที่ลิ้งนี้ Validate
->withErrors($validator)
->withInput(); - Logger เพิ่ม code logger ช่วยให้ตรวจสอบปัญหา ได้เมื่อ Deploy บน Production ศึกษาเพิ่มเติมได้ที่ Logger
Log::emergency($message);
Log::alert($message);
Log::critical($message);
Log::error($message);
Log::warning($message);
Log::notice($message);
Log::info($message);
Log::debug($message); - Blade Template extending layout reuse Code Layout Template ใช้งานกับหน้าจออื่น ๆ ลด Duplicate code ตัวอย่าง BladeTemplate
- Blade Component สร้างไฟล์ component.blade.php กับ Code ที่ Duplicate เยอะ ๆ แยกออกมาเขียนแยกเป็น external file แล้วเรียกใช้งานด้วย @component(‘component’)@endcomponent ศึกษาเพิ่มเติมได้ที่นี่ BladeComponent
htmlspecialchars
{!! $name !!}.
แสดงค่า value ที่เป็น html- pass Json Object to vue props ด้วย
<example-component :some-prop='@json($array)'></example-component>
- blade template condition if else ,loop ,while ,swith ,empty ,isset
IF ELSE: @if (true) @else @endif
IF : @if (true) @endif
IF ELSEIF ELSE: @if (true) @elseif (true) @else @endif
SWITCH CASE: @switch (value) @case (true) @break @endswitch
FOR: @for @endfor
FOREACH: @foreach @endforeach
WHILE: @while @endwhile - locale ทำ multiple language ศึกษาเพิ่มเติม Localization
- Laravel MIX compile resource (js,css,image,…) Laravel MIX
35–50 มาตามต่อกันได้ในบทความหน้าครับ ติดตามกันด้วยนะครับ