Routing ( การจัดการเส้นทางด้วย url )
ใช้ในการกำหนดว่าเมื่อเราเรียกลิ้งนี้จะให้ทำอะไรขึ้นบ้าง <a name="basic-routing"></a> ## Basic Routing
ในการตั้งค่าเราจะไปที่ app/routes.php โดยรูปแบบของฟังก็ชันที่เป็น Route จะเป็นแบบ Closure callback Closure คืออะไรตามไปตามเข้าไปอ่าน ที่นี่ครับ
การรับค่าที่เป็น get
1 Route::get('/', function()
2 {
3 return 'Hello World';
4 });
การรับค่าที่เป็น POST
1 Route::post('foo/bar', function()
2 {
3 return 'Hello World';
4 });
** การรับค่าได้หลายเเบบ **
เวอร์ชัน 4.1 ได้เพิ่มเมทอด match เพื่อช่วยให้เราไม่ต้องเขียน route get หรือ post สองตัว เพื่อรับค่าจาก route ชื่อเดียวกัน
1 Route::match(array('GET', 'POST'), '/', function()
2 {
3 return 'Hello World';
4 });
กำหนด route ในการเรียกพารามิเตอร์ foo ในทุกรูปแบบเมทอด
1 Route::any('foo', function()
2 {
3 return 'Hello World';
4 });
ลิ้งที่เรียกมาต้องเป็น https เท่านั้น
1 Route::get('foo', array('https', function()
2 {
3 return 'Must be over HTTPS';
4 }));
<a name="route-parameters"></a> ## Route Parameters
ตัวอย่างการกำหนดรูปแบบของพารามิเตอร์
1 Route::get('user/{id}', function($id)
2 {
3 return 'User '.$id;
4 });
พารามิเตอร์แบบมีหรือไม่มีก็ได้
1 Route::get('user/{name?}', function($name = null)
2 {
3 return $name;
4 });
กำหนดพารามิเตอร์แบบตายตัว
1 Route::get('user/{name?}', function($name = 'John')
2 {
3 return $name;
4 });
การใช้ regex ตรวจสอบว่าพารามิเตอร์ตรงกับที่กำหนดไว้ไหม
1 Route::get('user/{name}', function($name){})->where('name', '[A-Za-z]+');
2
3 Route::get('user/{id}', function($id)
4 {
5 //
6 })
7 ->where('id', '[0-9]+');
<br /><br /> จะใส่ไปเป็นอาเรย์ก็ได้
1 Route::get('user/{id}/{name}', function($id, $name)
2 {
3 //
4 })
5 ->where(array('id' => '[0-9]+', 'name' => '[a-z]+'))
<br /><br /> <a name="route-filters"></a> ## Route Filters
คือการกำหนดฟังก์ชันที่ใช้ในการตรวจสอบข้อมูล auth ใช้ตรวจว่ามีการล็อกอินไหม, guest ตรวจว่ายังไม่ได้ล็อกอิน, และ csrfตรวจว่าเป็นการทำ csrf ไหม.ซึ่งเราจะไปประกาศไว้ที่ app/filters.php
ตัวอย่างการสร้าง filter
1 Route::filter('old', function()
2 {
3 if (Input::get('age') < 200)
4 {
5 return Redirect::to('home');
6 }
7 });
การใส่ filter ให้ route
1 Route::get('user', array('before' => 'old', function()
2 {
3 return 'You are over 200 years old!';
4 }));
<br /><br /><br /><br /> การใส่ route หลายตัว
1 Route::get('user', array('before' => 'auth|old', function()
2 {
3 return 'You are authenticated and over 200 years old!';
4 }));
การกำหนดค่าเฉพาะให้ filter
1 Route::filter('age', function($route, $request, $value)
2 {
3 //
4 });
5
6 Route::get('user', array('before' => 'age:200', function()
7 {
8 return 'Hello World';
9 }));
filter บางตัวเราสั่งให้ทำงานหลังจากที่ route ทำงานไปแล้วเราต้องกำหนดตัวแปร $response เพื่อกำหนดค่าที่จะส่งไปให้ตัวฟังก์ชันด้วย
1 Route::filter('log', function($route, $request, $response, $value)
2 {
3 //
4 });
การกรองแบบมีรูปแบบ
เราสามารถกำหนด filter ให้ทำงานเฉพาะเมื่อมีการเรียกตรงกับที่เรากำหนดได้ ตามตัวอย่างเลยครับ.
1 Route::filter('admin', function()
2 {
3 //
4 });
5
6 Route::when('admin/*', 'admin');
ตามตัวอย่างเราเพิ่ม filter ชื่อ admin เข้ากับทุกลิ้งที่มี admin/ อยู่ข้างใน
<br />
แล้วก็ยังสามารถกำหนดเมทอดให้ได้ด้วย
1 Route::when('admin/*', 'admin', array('post'));
Filter Classes
ในการกรองขั้นสูงเราสามารถสร้างคลาสขึ้นมาได้เอง แล้วทำการใช้ IoC Container เรียกใช้คลาสนั้น
ตัวอย่างคลาส
1 class FooFilter {
2
3 public function filter()
4 {
5 // Filter logic...
6 }
7
8 }
ลงทะเบียนคลาสโดยให้ชื่อที่จะนำไปใช้ว่า foo
1 Route::filter('foo', 'FooFilter');
<a name="named-routes"></a> ## Named Routes
คือการตั้งชื่อย่อให้กับ route:
1 Route::get('user/profile', array('as' => 'profile', function()
2 {
3 //
4 }));
กำหนดให้ชื่อย่อนี้จะใช้ controller ไหน
1 Route::get('user/profile', array('as' => 'profile', 'uses' => 'UserController@sho\
2 wProfile'));
ตอนนี้เราใช้ชื่อย่อ เพื่อสร้างลิ้งได้เเล้ว
1 $url = URL::route('profile');
2
3 $redirect = Redirect::route('profile');
เราใช้เมทอดcurrentRouteName เพื่อดึงชื่อของ Route ที่ทำงานในขณะนี้ได้
1 $name = Route::currentRouteName();
<a name="route-groups"></a> ## Route Groups
เราสามารถกำหนดกลุ่มให้ Route ได้ทำให้สะดวกมากขึ้น
1 Route::group(array('before' => 'auth'), function()
2 {
3 Route::get('/', function()
4 {
5 // Has Auth Filter
6 });
7
8 Route::get('user/profile', function()
9 {
10 // Has Auth Filter
11 });
12 });
<a name="sub-domain-routing"></a> ## Sub-Domain Routing
การสร้าง Route ให้กับโดนเมนย่อย
1 Route::group(array('domain' => '{account}.myapp.com'), function()
2 {
3
4 Route::get('user/{id}', function($account, $id)
5 {
6 //
7 });
8
9 });
<a name="route-prefixing"></a> ## Route Prefixing
ในการกำหนดคำที่ใช้กำหนดกลุ่มของ เราใช้ prefix ในการตรวจสอบ
ตัวอย่างการใช้ prefix
1 Route::group(array('prefix' => 'admin'), function()
2 {
3
4 Route::get('user', function()
5 {
6 //
7 });
8
9 });
<a name="route-model-binding"></a> ## Route Model Binding
คือการผูกโมเดลเขาไปกับ Route โดยใช้เมทอด Route::model
การใช้งาน
1 Route::model('user', 'User');
ต่อมาก็กำหนดให้เมื่อมีการเรียกลิ้งที่มี {user}เป็นพารามิเตอร์
1 Route::get('profile/{user}', function(User $user)
2 {
3 //
4 });
เราก็จะทำการแทรก User instance เข้าไปใน Route ยกตัวอย่าง profile/1 ถูกเรียก User instance ก็จะมี ID = 1.
ถ้าพารามิเตอร์ที่ส่งเข้ามาไม่ตรงกับ model ใดๆเราสามารถกำหนดการแสดงข้อผิดพลาดำได้
1 Route::model('user', 'User', function()
2 {
3 throw new NotFoundException;
4 });
ต่อมา เมทอด Route::bind เป็นการผูกพารามิเตอร์เข้ากับ โมเดล เมื่อมีการส่งค่าเข้าตรงกับ route ที่กำหนดค่าก็จะก็จะถูกส่งมาที่เมทอดนี้ก่อน
1 Route::bind('user', function($value, $route)
2 {
3 return User::where('name', $value)->first();
4 });