สอน Laravel 5 : ใช้งาน Controller ร่วมกับ Router

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

สอน Laravel : ใช้งาน Controller ร่วมกับ Router



โดยทั่วไปแล้ว Controller คือหัวใจหลักของการทำงานใน PHP MVC Framework เป็นส่วนที่ทำหน้าที่เชื่อมโยง
ข้อมูลระหว่าง view และ model เป็นส่วนของการประมวลผลข้อมูล เช่น ส่งอีเมล สร้างก้อนข้อมูลส่งไปให้ view
แสดงผล สั่งบันทึกลงฐานข้อมูล บันทึกไฟล์ภาพลงบนเซิฟเวอร์ เป็นต้น



จากบทความที่แล้ว สร้าง html form ส่งข้อมูลแบบ POST เราได้ทดสอบส่งข้อมูลแบบ POST และคืนค่าตัวแปรกลับไปใน
ส่วนของ Router เลย ในบทความนี้เราจะเปลี่ยนให้รับค่าเข้ามาทำงานใน Controller แทน แล้วค่อยคืนค่าไปให้ view

เตรียม View และ Router Method

  • 1.ให้สร้าง register.blade.php ไว้ที่ resources/views/register.blade.php
  • สร้าง html form รับค่าจากผู้ใช้งานและส่งค่าตัวแปร name และ _token ส่งไปที่ register Router

    <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>
  • 2. จากนั้นใน app/Http/routes.php ให้สร้าง Register Method ดังนี้
  • กำหนดทิศทางของ uri ด้วยให้ค่า default page ทำงานที่ RegisterController เมธอดชื่อว่า index
    กำหนดให้เมื่อมีการส่งค่าแบบ POST ใด ๆ มาที่เมธอด register ให้ไปทำงานที่ RegisterController
    ในฟังก์ชั่นหรือ Method ชื่อว่า save

    Route::get('/',"RegisterController@index"); 
    Route::post('register',"RegisterController@save");
    
  • 3. จากนั้นให้สร้าง RegisterController ไว้ที่ app/Http/Controllers/RegisterController.php เขียนโค๊ดได้ดังนี้
  • กำหนดให้เมื่อเรียกใช้งาน index Method ให้ทำการคืนค่าโดยการโหลดหน้า register.blade.php
    กำหนดให้เมื่อเรียกใช้งาน save Method จะรับค่าตัวแปรแบบ input POST จากนั้นทำการแปลงเป็น array
    ก่อนคืนค่าโดยการโหลดหน้า register.blade.php

    namespace App\Http\Controllers;
    use App\Http\Controllers\Controller;
    use Illuminate\Http\Request;
    class RegisterController extends Controller
    {
        public function index()
    	{
    		return view("register");	
    	}
    	public function save(Request $request)
    	{
    		$name = $request->input('name');
    		$data = array(
    			'name' => $name
    		);
    		return view("register",$data);	
    	}
    }
  • 4. ในกรณีที่เราต้องการให้ส่งตัวแปร name มาได้ทั้งแบบ POST และ GET ให้เปลี่ยน register method
    ใน app/Http/routes.php เป็น Router::any();

    Route::any('register',"RegisterController@save");

    จากนั้นในไฟล์ register.blade.php เราก็สามารถเปลี่ยน action เป็นแบบ get ได้

    <form action="register" method="get">

ในหลาย ๆ บทความที่ผ่านมาเราทำความเข้าใจการใช้งานส่วนของการรับและแสดงผลข้อมูล กำหนด uri ในส่วน
ของ router มาจนถึงในบทความนี้เป็นการใช้งาน controller และ method ในบทความต่อไปเราจะมาลอง
ใช้งาน Laravel framework เพื่อบันทึกข้อมูลที่ได้จาก view ลงฐานข้อมูล โดยใช้ Laravel Model กันครับ