สอน Laravel 5 : สร้าง html form ส่งข้อมูลแบบ POST

สอน-laravel-framework
สอน-laravel-framework

สอน 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