สอน Laravel 5 : สร้าง html form ส่งข้อมูลแบบ POST
การสร้างแบบฟอร์มเพื่อรับข้อมูลแบบ POST จากผู้ใช้งานเว็บไซต์ และส่งข้อมูลนั้นไปยังส่วนของการบันทึกข้อมูล
หรือส่วนของ controller สำหรับใน Laravel framework มีขั้นตอนที่ไม่ได้ยุ่งยากอะไรมาก เราสามารถ
ทำได้ด้วยการสร้าง html form แบบทั่วไปและชี้ action ไปที่ controller method นั้น ๆ ผ่านการ
กำหนดที่ router ได้เลย
สร้าง html form ส่งข้อมูลแบบ POST
สร้างไฟล์ register.blade.php วางไฟล์ไว้ที่ resources/views/register.blade.php เป็นการสร้างฟอร์มให้ผู้ใช้งานเว็บ
ทำการกรอกข้อมูล จากนั้นเมื่อมีการกดปุ่ม submit ข้อมูลจะถูกส่งไปที่ Router register แบบ POST
โดยในฟอร์มจะสังเกตุว่ามีตัวแปรอยู่ 2 ตัวคือตัวแปร name เป็นการรับค่า input text จากผู้ใช้งาน
ส่วนตัวแปร _token เป็นการส่งตัวแปรตรวจสอบค่าเพื่อป้องกันการโจมตีแบบ CSRF ซึ่งเป็นคุณสมบัติที่ติด
มากับ Laravel framework
<body> <div class="container"> <div class="title">Hello {{{ $name or '' }}}</div> <div class="content"> <form action="register" method="post"> <input type="hidden" name="_token" value="<?php echo csrf_token() ?>"> <input type="text" name="name" value=""> <input type="submit" value="สมัครสมาชิก"> </form> </div> </div> </body>
สร้าง Router Method ไว้รอรับข้อมูลแบบ POST
สร้าง Register Method ที่ Router ที่ไฟล์ app/Http/routes.php ไว้รอรับตัวแปรแบบ POST
จากนั้นใช้ Request คลาสเพื่อรับข้อมูลแบบ input post อย่าลืมทำการเรียกใช้งานตัว Request คลาส
ด้วยคำสั่ง use Illuminate\Http\Request
use Illuminate\Http\Request; // เรียกใช้งานคลาส Request Route::get('/', function () { return view('register'); // โหลด register view แสดง html form ในครั้งแรก }); Route::post('register',function (Request $request) { $name = $request->input('name'); // รับตัวแปร name จาก html form $data = array( 'name' => $name ); return view("register",$data); // return ค่าออกไปแสดงที่ register view });
เราสามารถ return ค่าออกไปแสดงที่ view ได้ในรูปแบบของ array ดังนี้
$data = array( 'name' => $name ); return view("register",$data);
และเมื่ออยู่ที่ view เราสามารถแสดงค่าตัวแปร name โดยใช้ syntax ของ Blade template ได้ดังนี้
<div class="title">Hello {{{ $name or '' }}}</div>
หรือจะเขียนโดยใช้ php echo ธรรมดาแบบนี้ก็ได้
<div class="title">Hello <?php if(isset($name)) echo $name; ?></div>
จากตัวอย่างด้านบนเป็นการส่งค่า POST Data จาก html form view มาที่ Router Method และ
ทำการ return ค่าออกไปแสดงที่ register view ทันที แต่ในการทำงานจริงเราจะไม่ใช้วิธีรับค่าโดยตรง
ผ่าน Router แต่จะเป็นการชี้ collback function ไปที่ controller และรับค่าตัวแปรทั้งหมดใน
controller นั้น ๆ แทน หลังจากได้ตัวแปรทั้งหมดเราจะทำงานให้เสร็จภายใน controller นั้น ๆ เสียก่อน
เช่นอาจจะบันทึกข้อมูลลงฐานข้อมูลหรือประมวลผลในรูปแบบอื่น ๆ ก่อน เสร็จแล้วค่อย คืนค่ากลับไปที่ view
ในบทความต่อไป เราจะมาทดสอบการทำงานรวมกันระหว่าง view -> router -> controller