เรียนรู้ Laravel 4.1 ( Validate )

laravel_Validate

บทนี้เรามาเรียนรู้การ Validate ข้อมูลต่างๆกันครับ สำหรับเรื่องนี้ก็คงเป็นเรื่องพื้นฐานที่เราควรจะรู้ไว้ จะยากง่ายแค่ไหนไปดูกันกับ Laravel validate ครับ

สร้างหน้า Login ก่อน

เราจะสร้างหน้าสำหรับส่งข้อมูลให้เรา เพื่อจะทำการตรวจสอบข้อมูลหรือเรียกว่า validate กันครับ โค้ดตามด้านล่างเลย

@include('header')
<div class="container">
	<div class="row" style="margin-top:30px;">
		<form class="form-horizontal" role="form" action="login" method="post">
		  <div class="form-group">
		    <label for="inputEmail3" class="col-sm-2 control-label">Email</label>
		    <div class="col-sm-10">
		      <input type="email" name="email" class="form-control" id="inputEmail3" placeholder="Email">
		    </div>
		  </div>
		  <div class="form-group">
		    <label for="inputPassword3" class="col-sm-2 control-label">Password</label>
		    <div class="col-sm-10">
		      <input type="password" name="password"  class="form-control" id="inputPassword3" placeholder="Password">
		    </div>
		  </div>
		  <div class="form-group">
		    <div class="col-sm-offset-2 col-sm-10">
		      <div class="checkbox">
		        <label>
		          <input type="checkbox"> Remember me
		        </label>
		      </div>
		    </div>
		  </div>
		  <div class="form-group">
		    <div class="col-sm-offset-2 col-sm-10">
		      <button type="submit" class="btn btn-default">Sign in</button>
		    </div>
		  </div>
		</form>	
	</div>
</div>
@include('footer')

ตามด้วยการสร้างไฟล์ header.blade.php และ footer.blade.php ตามลำดับครับ

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>test</title>
	<!-- Latest compiled and minified CSS -->
	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">

	<!-- Optional theme -->
	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap-theme.min.css">

	<!-- Latest compiled and minified JavaScript -->
	<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>
</head>
<body>
</body>

</html>

สร้าง Route

สร้าง View แล้วต่อไปเราไปแก้ไขไฟล์ route.php กันครับ ใส่โค้ดดังนี้

Route::get('login', function(){
	return View::make('login');
});	

Route::get('register', function(){
	return View::make('register');
});	

Route::post('login', '[email protected]');

ใครงงไม่เข้าใจกลับไปอ่านเกี่ยวกับเรื่อง route ตามนี้เลยจ้า

https://www.oxygenyoyo.com/2015/02/04/%E0%B9%80%E0%B8%A3%E0%B8%B5%E0%B8%A2%E0%B8%99%E0%B8%A3%E0%B8%B9%E0%B9%89-laravel-4-1-%E0%B9%80%E0%B8%A3%E0%B8%B7%E0%B9%88%E0%B8%AD%E0%B8%87-route/

เริ่ม Validate

เข้าไป model user เราจะทำการสร้าง function สำหรับการ validation ให้กับค่าที่กรอกผ่าน form สำหรับการ register และหากไม่ถูกต้องก็จะคือคำเตือนให้แก่ user เปิดไฟล์ User.php

public static function validate($input) {

		$rules = array(
			'email' => 'Required|Between:3,64|Email|Unique:users',
			'address' => 'Required|Min:18',
			'password' => 'Required|AlphaNum|Between:4,8|Confirmed',
			'password_confirmation' => 'Required|AlphaNum|Between:4,8'
		);

		$message = array(
			'email.required' => 'กรุณาป้อนอีเมลด้วยครับ',
			'address.min' => 'กรุณาป้อนที่อยู่อย่างน้อย 18 ตัวอักษรด้วยครับ',
			'confirmed' => 'รหัสผ่านไม่ตรงกัน'
		);

		return Validator::make($input, $rules, $message);
}

เพิ่ม function นี้เข้าไปครับ อ่าน่าจะมีคำถามในใจว่าทำไมเราต้องใส่คำว่า static ใช่ไหมครับ มาผมจะอธิบายง่ายๆว่า การที่เราประกาศ static function เพื่อ

  • function นี้สามารถถูกใช้โดยไม่ต้องประกาศ object ก่อน ไม่ต้องมา new User(); ก่อนทำนองนี้ครับ
  • static method ทำงานได้เร็วกว่า
  • ไม่มีผลกับ function อื่นคือจบในตัวเอง

เสร็จแล้วให้เราไปแก้ไขไฟล์ LoginController.php ใน Folder controllers แล้วแก้ไข function register เป็นดังนี้

public function register()
	{
		$validate = User::validate(Input::all());

		if($validate->passes()) {
			$user = new User;
			$user->email = Input::get('email');
			$user->password = Hash::make(Input::get('password'));
			$user->address = Input::get('address');
			$user->save();	
			return Redirect::to('login')->with('message', 'Register Success');
		}
		else
		{
			return Redirect::to('register')->withErrors($validate->messages());
		}
		
	}

สังเกตุเราเรียก User::validate(Input::al()); เราเรียกใช้ function validate ที่เราสร้างใช้ User.php ก่อนหน้านี้โดยที่เราไม่ต้องประกาศ new User เลยเพราะว่ามันเป็น static function ครับ ส่วน Input::all() คือค่า Input จาก form ที่ส่งมาทั้งหมดครับ

อธิบายสำหรับ route ที่เราสร้างนะครับโดยเมื่อเราเข้า localhost/laravel/public/register จะเจอหน้า form สำหรับการลงทะเบียนครับเมื่อเรากรอกข้อมูลแล้ว form จะทำการส่งค่า POST ไปยัง localhost/laravel/public/login เข้าเงื่อนไขโค้ดด้านล่างนี้ครับ

Route::post('login', '[email protected]');

และทำการส่งค่าไปยัง class LoginController method register ครับ และ method นั้นทำงานเสร็จจะเช็คค่าว่าถูกต้องหรือไม่โดยการเรียกใช้ function validate ครับถ้าถูกต้องจะทำการ redirect ไปยังหน้า login แบบ get ถ้าไม่ถูกก็จะกลับไปหน้า register พร้อมกับ error ครับ

สรุป

ก็ได้เห็นภาพคร่าวๆของการตรวจสอบพวก Input ทั้งหลายบ้างแล้วนะครับลองเอาไปลองทำดูกัน หากทำแล้วติดรันแล้ว Errror อย่างไรก็ comment กันไว้นะครับ

Credit

พอดีผมได้ไปศึกษาจากคลิปนี้ https://www.youtube.com/user/laraveltut สามารถเข้าไปติดตามหรือเรียนจากคลิปได้ครับ หรือสามารถติดตามที่เว็บหลักของเขาครับทางนี้เลย http://laraveltut.com/

แล้วมาเขียนอธิบายเพิ่มเติมครับจึงอยากแชร์ต่อไว้โดยผมจะพยายามเขียนอธิบายคนที่ไม่เคยใช้หรือไม่เข้าใจมาก่อน หากมีคำถามใดๆสามารถเขียน comment ถามไว้ได้เลยครับถ้าผมว่าจะตอบทันที

 

 

Message us