Laravel รู้จัก Routes และ การรับค่าจาก HttpRequest EP4

Sharing is caring!

การพัฒาน web application ข้อที่ควรคำนึงถึงคือเรื่อง url (endpoints) ต่าง ๆ ภายใน application ของเรา อาจจะเป็น url แบบเดียวกันได้เพียงแต่กำหนด http method ไม่เหมือนกัน เช่น

  • [GET] /api/v1/user สร้างเพื่อ provide data ให้กับ client
  • [POST] /api/v1/user สร้างเพื่อกำหนดไว้สำหรับ create data ใหม่

จุดสั่งเกตุที่เห็นได้ชัดคือ ความเหมือนกันของ url แต่ต่างกันในเรื่อง method เท่านั้น ทางฝั่ง application เราเอง (กำหนด route) จะ mapping route ให้ตรงกับการ request เรียกเข้ามา request เรียกมาแบบ [GET] ก็จะเข้าไปทำงานในส่วนของ GET method , เรียกมาแบบ [POST] จะเข้าไปทำงานในส่งของ POST method เรื่องเหล่านี้ต้องมาทำความเข้าใจกัน บทความนี้จะมาอธิบาย

การกำหนด Methods มีกี่แบบ Laravel จะต้องเขียนอย่างไร

  • GET
    • มีการเก็บ cached การ request ได้
    • ไม่ควรอย่างยิ่งสำหรับการส่ง sensitive data มากับ url
    • มีข้อจำกัดเรื่องความยาวของ url + parameters
    • ใช้สำหรับขอข้อมูลเท่านั้น ไม่เหมาะกับการแก้ไขข้อมูล
  • POST
    • ไม่ถูกเก็บ cached เอาไว้ (request body) จะไม่ถูกเก็บไว้
    • ไม่อยู่ในประวัติของ browser
    • request body สามารถกำหนดได้ยาว ขนาดใหญ่
  • PUT
    • เป็นลักษณะการสร้าง (created) หรือ อัพเดท (update) ข้อมูลฝั่ง serve
  • HEAD
    • คล้ายกันกับ GET แต่ไม่มีการคืนค่ากลับ
  • DELETE
    • การลบข้อมูลที่เป็น unique โดยส่วนใหญ่จะเป็น uuid หรือ id ที่ระบุเป็นเฉพาะเจาะจง
  • PATCH
    • เพื่อปรับเปลี่ยนบางอย่างของข้อมูลฝั่ง server
  • OPTIONS
    • เพื่ออธิบายการทำงานของ data ฝั่ง server

Laravel มีการกำหนด http methods Laravel Routing จะถูกสร้างไว้ที่ไฟล์ /routes/web.php และ /routes/api.php

[GET] สำหรับ inline function
Route::get('foo', function () {
    return 'Hello World';
});
[GET] สำหรับ use controller route อื่น ๆ
Route::get('/user', 'UserController@index');
[*] ลักษณะการกำหนด methods อื่น ๆ ทำตาามนี้
Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);

การกำหนด parameters ให้ทำ route ในรูปแบบต่าง ๆ

[required] การกำหนด parameters บังคับ ในรูแบบ required parameters จะกำหนดภายใต้ {} 
Route::get('user/{id}', function ($id) {
    return 'User '.$id;
});
Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) {
    //
});

[non required] กำหนด parameters แบบไม่บังคับให้ส่งเข้ามา
Route::get('user/{name?}', function ($name = null) {
    return $name;
});
Route::get('user/{name?}', function ($name = 'John') {
    return $name;
});

[regular] กำหนด parameter ด้วย rules ตาม pattern ด้วย regular expression
Route::get('user/{name}', function ($name) {
    //
})->where('name', '[A-Za-z]+');
Route::get('user/{id}', function ($id) {
    //
})->where('id', '[0-9]+');
Route::get('user/{id}/{name}', function ($id, $name) {
    //
})->where(['id' => '[0-9]+', 'name' => '[a-z]+']);

ศึกษาเพิ่มเติมเรื่อง Routes การทำ Routes Grouping จากลิ้งนี้ Laravel Routes

การรับค่าจาก HttpRequest ในรูปแบบต่าง ๆ

การที่จะได้มาของ parameters data ที่ได้จากการ request client นั้นมีได้หลายรูปแบบ ตามตัวอย่าง

การเข้าถึงค่าของ url information ที่ถูก request เข้ามา

[url path]
$uri = $request->path();

// Without Query String...
$url = $request->url();

// With Query String...
$url = $request->fullUrl();

การรับค่า (request body data) จาก HttpRequest (Payload Request Body)

[all] จะได้ค่าเป็น object ของ request data
$input = $request->all();

[name] การเข้าถึง value ด้วยการกำหนดจาก name ของ parameter
$name = $request->input('name');

[empty then value] กำหนดค่า default หากไม่พบค่าจาก parameters นั้น ๆ 
$name = $request->input('name', 'Sally');

[json array] การเข้าถึง request ที่เป็นลักาณะ raw json array ก็ทำได้
$name = $request->input('products.0.name');
$names = $request->input('products.*.name');

การรับค่า (request body data) จาก HttpRequest (Query Parameters)

[?name=hello] การเข้าถึง queryString จาก parameters
$name = $request->query('name');

[empty then value]
$name = $request->query('name', 'Helen');

ตรวจสอบค่าจาก parameters ด้วย name

[checking] ตรวจสอบ parameter ชื่อ name หากมีจะเข้าเงื่อนไขการทำงาน
if ($request->has('name')) {
    //
}
if ($request->has(['name', 'email'])) {
    //
}
if ($request->hasAny(['name', 'email'])) {
    //
}

[not empty] ตรวจสอบค่า parameter ต้องไม่เป็นค่าว่าง จะใช้ function filled ตรวจสอบ
if ($request->filled('name')) {
    //
}

รูปแบบการใช้งาน Routes และ HttpRequest ใน Laravel มีเนื้อหาเพิ่มเติมอีกมากมาย สามารถศึกษาเพิ่มเติมได้ที่ Laravel Route ,Laravel Request

ขอบคุณที่ติดตามบทความครับ

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *