BẠN ĐÃ NGHE VỀ BITCOIN VÀ MUỐN TÌM HIỂU CHÍNH THỐNG?

HƯỚNG DẪN TOÀN TẬP ĐẦU TƯ VỚI THỊ TRƯỜNG BITCOIN 2021

>> Xem tại đây <<

học laravel 5

Bài 10 : Form validation trong Laravel 5

Tiếp theo bài hôm trước là Xử lý ngày tháng trong Laravel 5, các bạn hẳn đã nắm được cách xử lý ngày tháng cơ bản trong Laravel 5 rồi. Hôm nay mình tiếp tục gửi tới các bạn bài Form validation trong Laravel 5 thông qua ví dụ để các bạn dễ hình dung.

1. Form validation là gì ?

Thông thường, khi bạn tạo 1 form đăng ký, đăng nhập, hay bất cứ một web form nào đó cho phép người dùng có thể nhập thông tin, ấn submit để thực thi 1 mục đích nào đó. Khi đó, ở tư cách là 1 lập trình viên, bạn phải đảm bảo rằng người dùng có thể nhập thông tin 1 cách chính xác nhất và submit form thành công. Bởi vì người dùng họ không có nhiều kiến thức về lập trình, hoặc đôi khi vì vội vàng mà họ sẽ dễ dàng nhầm lẫn trong việc điền thông tin. Chẳng hạn như là với form đăng ký, bạn phải 1 sự ràng buộc để bắt họ phải nhập username và password, hoặc email thì phải có định dạng abc@xyz, còn số điện thoại thì chỉ được nhập số chứ không được nhập chữ,…Tất cả những điều “ép buộc” này, bạn có thể hiểu nó chính là Form validation 🙂

2. Form Validation trong laravel 5

Trong Laravel 5, Form validation cũng tương tự như vậy, nhưng điểm khác biệt duy nhất ở đây là Laravel đã xây dựng 1 hệ thống validation, giúp cho bạn sử dụng 1 cách dễ dàng và thuận tiện hơn. Bạn sẽ không còn phải viết những đoạn code dài dòng, lê thê để kiểm tra thông tin người dùng nhập vào form, vì Laravel 5 đã làm hết tất cả những điều đó cho bạn.

3. Cách sử dụng Form Validation trong Laravel 5

Trước khi bắt đầu vào thực hành sử dụng form validation trong laravel 5, các bạn xem lại 1 chút ở Xử lý ngày tháng trong Laravel 5 . Vì trong bài viết này, mình sẽ sử dụng lại mẫu form đã được tạo ra trong file create.blade.php có nội dung :

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Form trong Laravel 5</title>
</head>
<body>
	<h1>Them Bai Viet Moi</h1>
	{!! Form::open() !!}
		{!! Form::label('name','Name:') !!}
		{!! Form::text('name') !!} <br />

		{!! Form::label('author','Author:') !!}
		{!! Form::text('author') !!} </br>

                {!! Form::label('created_at','Created Date:') !!}
                {!! Form::input('date', 'created_at') !!} <br />

		{!! Form::submit('Them moi')!!}
	{!! Form::close() !!}
</body>
</html>

và giao diện hiển thị như sau :

form validation trong laravel 5

Mục đích của mình là sẽ sử dụng lại form này và thực thi việc kiểm tra (form valition) để đảm bảo người dùng nhập đúng thông tin vào các ô Name, Author, Created Date theo đúng mục đích của mình với các rule như là :

  • Bắt buộc người dùng phải nhập thông tin vào các ô Name, Author, Created Date
  • Ô name phải điền tối thiểu là 6 ký tự

Ok, bắt đầu nào. Trước tiên các bạn mở cmd lên, gõ lệnh cd để di chuyển vào thư mục Laravel-5

cd C:/wamp/www/laravel-5

Tiếp đến sử dụng php artisan để tạo 1 file chứa các rules form valition mà chúng ta sẽ đặt ra:

php artisan make:request CheckArticlesRequest

Sau khi chạy lệnh trên, các bạn vào thư mục : app/Http/Requests/CheckArticlesRequest.php đã được tạo ra có nội dung như sau :

<?php namespace App\Http\Requests;

use App\Http\Requests\Request;

class CheckArticlesRequest extends Request {

	/**
	 * Determine if the user is authorized to make this request.
	 *
	 * @return bool
	 */
	public function authorize()
	{
		return false;
	}

	/**
	 * Get the validation rules that apply to the request.
	 *
	 * @return array
	 */
	public function rules()
	{
		return [
			//
		];
	}

}

Thoạt nhìn qua file này bạn sẽ có cảm giác bỡ ngỡ và rối rắm, nhưng thực chất thì cách sử dụng nó vô cùng đơn giản. Các bạn để ý function rules(). Trong function này chúng ta sẽ thiết lập các rule để kiểm tra thông tin người dùng nhập từ form. Hiện tại thì các bạn thấy là form của chúng ta bao gồm 3 fields là  : name, author, created_date sẽ được sử dụng để chúng ta tạo ra các rule như đã nói ở trên.

Mình sẽ sửa lại function rules() như sau :

Gợi ý : Bạn là người mới và muốn tìm hiểu về Bitcoin nhưng không biết bắt đầu từ đâu? Click xem ngay Hướng Dẫn Đầu Tư Bitcoin Cho Người Mới nhé!

public function rules()
{
  return [
    			//thiết lập các rule cho form
  			  'name' => 'required|min:6', // field name bắt buộc nhập và phải có tổi thiểu 6 ký tự
    'author' => 'required', // field author bắt buộc nhập
			    'created_at' => 'required|date' // field created_at bắt buộc nhập và phải có định dạng kiểu date
  ];
}

Save lại, sau đó các bạn tiếp tục mở file controller ArticlesController.php đã được tạo ra bài trước, nhìn 1 chút vào function store() có nội dung như sau :

public function store(Request $request){
  // lấy dữ liệu từ form
	  $dulieu_tu_input = $request->all();

  //dùng hàm create của laravel 5 để đưa hết thông tin lấy từ input và lưu vào trong database
	  Articles::create($dulieu_tu_input);

 // chuyển hướng người dùng đến trang hiển thị danh sách bài viết
	  return redirect('articles');
	}

Hiện tại trong function store trên, mình đang dùng đối tượng Request $request của Laravel để truyền vào function. Nhưng vì chúng ta đã tạo ra đối tượng request là CheckArticlesRequest nên mình sẽ sửa lại function store() như sau :

	public function store(CheckArticlesRequest $request){ // truyền đối tượng CheckArticlesRequest
  // lấy dữ liệu từ form
	  $dulieu_tu_input = $request->all();

  //dùng hàm create của laravel 5 để đưa hết thông tin lấy từ input và lưu vào trong database
	  Articles::create($dulieu_tu_input);

  // chuyển hướng người dùng đến trang hiển thị danh sách bài viết
	  return redirect('articles');
	}

Lưu ý là các bạn phải gọi đường dẫn

use App\Http\Requests\CheckArticlesRequest;

trên top của controller để có thể hiểu được đối tượng CheckArticlesRequest nha.

Tiếp theo, các bạn tiếp tục mở lại file view create.blade.php và thêm đoạn code sau bên dưới :

@if ( $errors->any() )
		<ul>
			@foreach ($errors->all() as $error)
				<li>{{ $error }}</li>
			@endforeach
		</ul>	
@endif

khi đó toàn bộ nội dung file view create.blade.php sẽ như sau :

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Form trong Laravel 5</title>
</head>
<body>
	<h1>Them Bai Viet Moi</h1>
	{!! Form::open() !!}
		{!! Form::label('name','Name:') !!}
		{!! Form::text('name') !!} <br />

		{!! Form::label('author','Author:') !!}
		{!! Form::text('author') !!} </br>

                {!! Form::label('created_at','Created Date:') !!}
                {!! Form::input('date', 'created_at') !!} <br />

		{!! Form::submit('Them moi')!!}
	{!! Form::close() !!}

	@if ( $errors->any() )
		<ul>
			@foreach ($errors->all() as $error)
				<li>{{ $error }}</li>
			@endforeach
		</ul>	
	@endif
</body>
</html>

Cuối cùng, các bạn gõ

 php artisan serve

Để chạy Laravel ở port 8000. Sau đó vào đường dẫn :

localhost:8000/articles/create

và làm 1 trong các thao tác sau :

– Bỏ trống ô Name, Author, Created Date rồi ấn Them moi

– Điền đầy đủ thông tin vào 3 ô Name, Author, Created Date nhưng ở field Name bạn điền khoảng dưới 6 ký tự rồi ấn Them moi

Khi đó bạn sẽ thấy thông báo lỗi hiện ra tương tứng.

Chúng ta kết thúc bài viết Form Validation trong Laravel 5 tại đây. Đừng quên ấn Đăng ký bài viết ở khung sidebar bên phải để nhận các bài viết mới thường xuyên nhé.

Chúc các bạn học tốt . Thân !

Có ích

học laravel 5

Bài 16: Cache trong Laravel 5 (Phần 1)

Chào các bạn, trong bài viết này mình sẽ giới thiệu cho các bạn về …


Bình luận trực tiếp ↓

19 bình luận

  1. a ơi cho em hỏi thông báo lỗi bằng tiếng việt thì config như thế nào vậy ạ. em cảm ơn!!

    • tham khảo trả lời của Tuấn Nguyễn nhé : Nếu muốn tùy chỉnh thông báo lỗi thì thêm phương thức messages() trong class CheckArticlesRequest
      public function messages()
      {
      return [
      ‘title.required’ => “Bạn chưa nhập tiêu đề bài viết”,
      ‘title.min’ => “Tiêu đề bài viết phải tối thiểu 6 ký tự”,
      ‘author.required’ => “Bạn chưa nhập tác giả”,
      ‘created_at.required’ => “Bạn chưa nhập ngày tạo”,
      ‘created_at.data’ =>”Ngày tạo không hợp lệ”
      ];
      }

  2. Nếu muốn tùy chỉnh thông báo lỗi thì thêm phương thức messages() trong class CheckArticlesRequest
    public function messages()
    {
    return [
    ‘title.required’ => “Bạn chưa nhập tiêu đề bài viết”,
    ‘title.min’ => “Tiêu đề bài viết phải tối thiểu 6 ký tự”,
    ‘author.required’ => “Bạn chưa nhập tác giả”,
    ‘created_at.required’ => “Bạn chưa nhập ngày tạo”,
    ‘created_at.data’ =>”Ngày tạo không hợp lệ”
    ];
    }

  3. a Kungfu PHP ơi!!!
    nó báo lỗi errors bị undefinded ? giải quyết sao vậy a?

  4. file create.blade.php mình phải sửa lại {!! Form::open() !!} thành {!! Form::open([‘url’ => ‘articles’]) !!} mới chạy được, không biết tại sao. không biết file routes.php của mình bị sai gì không ?

  5. nó báo cái lỗi này: Undefined variable: errors … là sao vậy a

  6. em cũng làm và sau khi đã sửa hàm authorize trong file CheckArticlesRequest thì khi submit nó cứ báo “The create at field is required.” Có ai biết khắc phục ko ạ
    PS: em làm phần create at theo hướng dẫn ở bài trước ạ

  7. Tôi cũng làm. và lỗi Forbidden. Cách giải quyết là bạn phải chỉnh lại cái hàm authorize trong file CheckArticlesRequest thành return true;
    public function authorize() {
    return true;

    }

  8. không nhập vs nhập không đủ đều báo Forbidden. xem trong validation.php thấy cái nào có Fobidden cả… chắc xem lại từ đầu coi mình có làm sai cái gì không…

  9. Sao không được nà….

  10. Chỉnh lại cho ad cái function store()
    use Illuminate\Support\Facades\Validator;
    public function store(Request $request)
    {
    $dulieu_tu_input = $request->all();
    $validator = Validator::make(
    $dulieu_tu_input,
    [
    ‘name’ => ‘required|min:6’,
    ‘author’ => ‘required’,
    ‘created_at’ => ‘required|date’
    ]
    );
    if ($validator->fails())
    {
    return redirect()->back()->withErrors($validator->errors());
    }
    else echo ‘success’;
    }

  11. php artisan serve anh KF ơi,
    em làm theo nó không check được lỗi và nó chạy qua articles với thông báo Forbidden.
    Hông biết sai gì ạ

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *