STEP 1 - ก่อนจะเปิดหน้า Register ได้เราต้อง > สร้าง Route
[code]
Route::get('register', function()
{
return View::make('register');
});
[/code]
อธิบาย
เมื่อมีการเข้า http://localhost/laravel/public/index.php/register
จะเรียกใช้ไฟล์ register.blade.php ในโฟล์เดอร์ Views
........................................................................................................
STEP 2 - สร้าง View
[code] register.blade.php@extends('default')
@section('content')
{{ Form::open(array('url' => 'register_action')) }}
<p>Name :</p> <p>{{ Form::text('name') }}</p>
<p>Email :</p> <p>{{ Form::text('email') }}</p>
<p>Password :</p> <p>{{ Form::password('password') }}</p>
<p>Confirm Password :</p> <p>{{ Form::password('cpassword') }}</p>
<p>{{ Form::submit('Submit') }}</p>
{{ Form::close() }}
//ดัก Error ทั้งหมดที่ส่งมาจาก Controller @if ($errors)
@if($errors->has()) @foreach ($errors->all() as $error) {{ $error }} @endforeach @endif
//ดัก Message ถ้าสมัครสมาชิกเรียบร้อยจะแสดง Message ออกมา
@if (Session::has('message'))
{{ Session::get('message') }}
@endif
@stop
อธิบาย
{{ Form::open(array('url' => 'register_action')) }}
{{ Form::close() }}
จะเหมือนกับ
<form action="http://localhost/function/register_action.php" >
</form>
แต่แบบด้านบน จะมีการ Random Token เป็น Hidden Input Field
เพื่อป้องกันการโจมตีแบบ CSRF
.................................................................................................................................
STEP 3 - สร้าง Route ให้ Register Form
แบบสั้นๆRoute::post('register_action', 'UserController@register', array('before' => 'csrf'));
หรือบางครั้งอาจ ต้องการแทรกเงื่อนไข
ก็สามารถเขียน Route แบบนี้ได้เช่นกัน
[code]
Route::post('register_action', array('before' => 'csrf', function()
{
$obj = new UserController() ;
return $obj->register();
});
อธิบาย
เมื่อมีการกดปุ่ม Register จะเรียกใช้งานคลาส UserController ที่เมธอท : register()
....................................................
STEP 4
UserController รับค่าจาก Route มาตรวจสอบ และส่งต่อให้ Model เพื่อ Insert ลงฐานข้อมูลUserController.php
<?php
class UserController extends BaseController {
public function store() {
$data = array('name' => Input::get('name'),
'email' => Input::get('email'),
'password' => Hash::make(Input::password('password'),
'cpassword' => Input::get('cpassword'));
$rule = array(
'name' => 'required|unique:registered_users,name',
'email' => 'required|email|unique:registered_users,email',
'password' => 'required|min:6|',
'cpassword' => 'required|min:6|same:password'
);
$validator = Validator::make($data,$rule);
if ($validator->fails()) {
return Redirect::back()->withErrors($validator);
} else {
User::register($data);
return Redirect::back()->withMessage('สมัครสมาชิกเรียบร้อย');
}
} // end store()
} // end class UserController
อธิบาย
1.รับค่าใส่ตัวแปร + ตรวจสอบ _token ป้องกัน CSRF ซึ่ง laravel สร้างให้เราในทุกๆฟอร์ม
$data = Input::except(array('_token'));
2.กำหนด $rule ดังนี้
name => ต้องกรอก | ห้ามซ้ำ
email => ต้องกรอก | รูปแบบอีเมล | ห้ามซ้ำกับ Column : name
password => ต้องกรอก | ยาวอย่างต่ำ 6 | ต้องเหมือนกับ cpassword
cpassword => ต้องกรอก | ยาวอย่างต่ำ 6
3.นำ $data ตรวจสอบกับ Roule โดยใช้คลาส
Validator::make()
แบบนี้
$validator = Validator::make($data,$rule);
และนำตัวแปร $validator ไปตรวจสอบ
ถ้า $validator->fails()
จะ return error ไปที่ : Views/register.blade.php << ที่มีการเขียน foreach รอไว้ใน view
ถ้าผ่าน Roule (ตรงตามกฏที่กำหนด)
จะส่ง Input ไปที่ Model : User ที่เมธอท : register (ใน STEP 5)
และ Return ผลลัพธ์ true หรือ false กลับไปที่ Controller -> View
เพื่อทราบผลการลงทะเบียน
............................................................................................
อธิบาย
รับ Data เข้ามา เพื่อ insert ลงฐานข้อมูล
.......................................
[User.php]
<?php
class User extends Eloquent {
public static function saveFormData($data)
{
DB::table('registered_users')->insert($data);
}
}