Để kiểm tra ràng buộc dữ liệu một cách chặt chẽ, chúng ta sẽ kiểm tra ràng buộc trên phía Server.
Các ràng buộc phía Server sử dụng Laravel, có thể xem trên trang chủ: https://laravel.com/docs/5.8/validation
Cách 1: sử dụng class
Cách 2: tạo
Step 1: tạo
Step 2: bổ sung các quy luật (rules) cho
Step 3: yêu cầu action
Cách 1: sử dụng class Validator
trực tiếp trong Controller
Step 1: bổ sung kiểm tra ràng buộc dữ liệu cho chức năng "Thêm mới"
- Theo quy trình CRUD chuẩn của Laravel, sau khi người dùng nhập dữ liệu, khi bấm
Lưu
sẽ chuyển dữ liệu đếnaction store
để xử lý lưu trữ. Chúng ta sẽ bắt ràng buộc dữ liệu trong action này. - Hiệu chỉnh file:
app\Http\Controllers\ChuDeController.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Controllers\Controller; use App\ChuDe; use Session; use Validator; class ChuDeController extends Controller { ... /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { // var_dump();die; // print_r();die; // dd($request); //Dump and die // Kiểm tra ràng buộc dữ liệu (validation) $validator = Validator::make($request->all(), [ 'cd_ten' => 'required|min:3|max:50|unique:cusc_chude', ]); // Nếu kiểm tra ràng buộc dữ liệu thất bại -> tức là dữ liệu không hợp lệ // Chuyển hướng về view "Thêm mới" với, // - Thông báo lỗi vi phạm các quy luật. // - Dữ liệu cũ (người dùng đã nhập). if ($validator->fails()) { return redirect(route('backend.chude.create')) ->withErrors($validator) ->withInput(); } $cd = new ChuDe(); $cd->cd_ten = $request->input('cd_ten'); $cd->cd_trangThai = 2; $cd->save(); Session::flash('alert-warning', 'Thêm mới thành công ^^~!!!'); return redirect()->route('backend.chude.index'); } ... }
Step 2: bổ sung chỗ hiển thị thông báo các lỗi vi phạm trên chức năng "Thêm mới"
- Tạo mới file
resources\views\backend\layout\partials\error-message.blade.php
<!-- DIV hiển thị thông báo lỗi start --> @if ($errors->any()) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif <!-- DIV hiển thị thông báo lỗi end -->
- Nhúng vùng hiển thị lỗi vào trong view layout master. Hiệu chỉnh file
resources\views\backend\layout\master.blade.php
<!doctype html> <html lang="en"> <head> ... </head> <body> ... <!-- Main content --> <div class="container-fluid"> <div class="row"> <!-- Sidebar --> @include('backend.layout.partials.sidebar') <!-- End sidebar --> <!-- Content --> <main role="main" class="col-md-9 ml-sm-auto col-lg-10 px-4"> <div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom"> <h1 class="h2">@yield('feature-title')</h1> <small>@yield('feature-description')</small> </div> @include('backend.layout.partials.error-message') @include('backend.layout.partials.flash-message') @yield('content') </main> <!-- End content --> </div> </div> <!-- End main content --> ... </body> </html>
- Hiển thị lại dữ liệu cũ (người dùng đã nhập) khi hiển thị form "Thêm mới", tránh tình trạng khó chịu của người dùng (phải nhập lại từ đầu các thông tin). Hiệu chỉnh file
resources\views\backend\chude\create.blade.php
... @section('content') <form id="frmChuDe" name="frmChuDe" method="post" action="{{ route('backend.chude.store') }}"> {{ csrf_field() }} <div class="form-group"> <label for="cd_ten">Tên chủ đề</label> <input type="text" class="form-control" id="cd_ten" name="cd_ten" aria-describedby="cd_tenHelp" placeholder="Nhập tên chủ đề" value="{{ old('cd_ten') }}"> <small id="cd_tenHelp" class="form-text text-muted">Nhập tên chủ đề. Giới hạn trong 50 ký tự.</small> </div> <button class="btn btn-primary">Lưu</button> </form> @endsection ...
Cách 2: tạo Custom Request
để kiểm tra ràng buộc dữ liệu
Step 1: tạo Custom Request
cho việc Thêm mới Chủ đề
- Chạy câu lệnh:
php artisan make:request ChuDeCreateRequest
- File sẽ được Laravel tạo ra trong `app\Http\Requests\ChuDeCreateRequest.php`
Step 2: bổ sung các quy luật (rules) cho ChuDeCreateRequest
- Hiệu chỉnh file:
<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class ChuDeCreateRequest extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return true; // Tạm thời không phân quyền } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ 'cd_ten' => 'required|min:3|max:50|unique:cusc_chude', //tên table cusc_chude ]; } public function messages() { return [ 'cd_ten.required' => 'Tên chủ đề bắt buộc nhập', 'cd_ten.min' => 'Tên chủ đề ít nhất phải 3 ký tự trở lên', 'cd_ten.max' => 'Tên chủ đề tối đa chỉ 50 ký tự', 'cd_ten.unique' => 'Tên chủ đề này đã tồn tại. Vui lòng nhập tên chủ đề khác' ]; } }
Step 3: yêu cầu action store
sử dụng ChuDeCreateRequest
để kiểm tra ràng buộc dữ liệu
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Controllers\Controller; use App\ChuDe; use Session; use Validator; use App\Http\Requests\ChuDeCreateRequest; class ChuDeController extends Controller { ... /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(ChuDeCreateRequest $request) { // var_dump();die; // print_r();die; // dd($request); //Dump and die // // Kiểm tra ràng buộc dữ liệu (validation) // $validator = Validator::make($request->all(), [ // 'cd_ten' => 'required|min:3|max:50|unique:cusc_chude', //tên table // ]); // // Nếu kiểm tra ràng buộc dữ liệu thất bại -> tức là dữ liệu không hợp lệ // // Chuyển hướng về view "Thêm mới" với, // // - Thông báo lỗi vi phạm các quy luật. // // - Dữ liệu cũ (người dùng đã nhập). // if ($validator->fails()) { // return redirect(route('backend.chude.create')) // ->withErrors($validator) // ->withInput(); // } $cd = new ChuDe(); $cd->cd_ten = $request->input('cd_ten'); $cd->cd_trangThai = 2; $cd->save(); Session::flash('alert-warning', 'Thêm mới thành công ^^~!!!'); return redirect()->route('backend.chude.index'); } ... }
Mục lục
Chương trình học
- Bức tranh Tổng thể về Lập trình WEB
-
Giới thiệu, cài đặt, cấu hình môi trường lập trình
9
- Cài đặt web server XAMPP #84
- Cài đặt công cụ truy vấn database HeidiSQL #85
- Cài đặt Composer để quản lý các gói thư viện trong PHP #86
- Cài đặt trình soạn thảo code Visual Studio Code IDE #64
- Tạo tên miền ảo trên máy cục bộ (virtual host on localhost) bằng XAMPP #107
- Cài đặt nền tảng quản lý Source Code sử dụng GIT #1030
- Cài đặt công cụ quản lý Source Code TortoiseGit #1045
- Cài đặt chế độ Debug PHP với Visual Studio Code #8066
- Tạo chứng chỉ SSL trên Localhost #10399
- Tập làm quen với quản lý source code bằng GitHub 3
- Cài đặt framework Laravel 1
- Tìm hiểu mô hình kiến trúc MVC vận hành trong framework Laravel 4
- Sử dụng Template Engine để trình diễn nội dung trong các VIEW 3
-
Dự án thực tế mẫu - Trang web bán hàng trực tuyến - Thiết kế CSDL
7
- Phân tích các yêu cầu, nghiệp vụ của khách hàng #68
- Mô hình thiết kế CSDL mẫu Sunshine #69
- Khởi tạo database sunshine, thiết lập kết nối CSDL trong Laravel #1143
- Tạo cấu trúc table bằng tính năng MIGRATION trong Laravel - Danh mục phẳng #70
- Tạo cấu trúc table bằng tính năng MIGRATION trong Laravel - Danh mục có liên kết khóa ngoại #1157
- Tạo dữ liệu ban đầu cho CSDL bằng tính năng SEED trong Laravel - Danh mục phẳng #71
- Tạo dữ liệu ban đầu cho CSDL bằng tính năng SEED trong Laravel - Danh mục có liên kết khóa ngoại #7851
- Dự án thực tế mẫu - Trang web bán hàng trực tuyến - Ánh xạ CSDL và Laravel 3
-
Dự án thực tế mẫu - Trang web bán hàng trực tuyến - Thiết kế Backend
20
- Thiết kế bố cục (layouts) cho giao diện Backend #72
- Xây dựng chức năng CRUD (Thêm, Sửa, Xóa, Xem) danh mục phẳng - Loại sản phẩm (index) #135
- Xây dựng chức năng CRUD (Thêm, Sửa, Xóa, Xem) danh mục phẳng - Loại sản phẩm (create) #137
- Xây dựng chức năng CRUD (Thêm, Sửa, Xóa, Xem) danh mục phẳng - Loại sản phẩm (edit) #138
- Xây dựng chức năng CRUD (Thêm, Sửa, Xóa, Xem) danh mục phẳng - Loại sản phẩm (delete) #139
- Xây dựng danh mục Sản phẩm có chức năng upload hình ảnh - Index #75
- Lưu đồ Upload file từ Client lên Server #2229
- Xây dựng danh mục Sản phẩm có chức năng upload hình ảnh - Create #108
- Xây dựng danh mục Sản phẩm có chức năng upload hình ảnh - Edit #87
- Xây dựng danh mục Sản phẩm có chức năng upload hình ảnh - Delete #88
- Xây dựng danh mục Sản phẩm có chức năng upload nhiều Hình ảnh cùng lúc #9259
- Xây dựng danh mục Sản phẩm có chức năng upload hình ảnh - Bổ sung menu vào sidebar #104
- Xây dựng chức năng xuất biểu mẫu và In ấn trực tiếp trên web #78
- Xây dựng chức năng xuất Excel #76
- Xây dựng chức năng xuất PDF #77
- Tạo chức năng Đăng nhập #1870
- Lưu đồ Kiểm tra ràng buộc dữ liệu (Validation) #2205
- Kiểm tra ràng buộc dữ liệu (Validation) phía Client #2206
- Kiểm tra ràng buộc dữ liệu (Validation) phía Server #2207
- Bài tập tổng hợp - Tạo các chức năng Backend cho trang web đọc Truyện Tranh và Tiểu Thuyết Online sử dụng Laravel framework #9312
-
AngularJS
7
- AngularJS là gì? Cài đặt AngularJS và cú pháp sử dụng AngularJS #95
- Cách mô hình kiến trúc MVC vận hành trong AngularJS #96
- Cách sử dụng AngularJS Controller, Scope #98
- Cách sử dụng AngularJS Directive #97
- Cách sử dụng AngularJS Event #100
- Cách sử dụng AngularJS Filter #99
- Cách sử dụng AngularJS Validation #101
-
Dự án thực tế mẫu - Trang web bán hàng trực tuyến - Thiết kế Frontend sử dụng AngularJS
11
- Thiết kế bố cục (layouts) cho giao diện Frontend #80
- Tích hợp AngularJS vào framework Laravel #102
- Tạo giao diện trang chủ (index) #81
- Tạo giao diện trang Giới thiệu (about) #109
- Tạo giao diện trang Liên hệ (contact) #114
- Tạo trang danh sách Sản phẩm (product) #110
- Tạo nút Thêm vào giỏ hàng cho từng sản phẩm (add-to-cart) #112
- Tạo trang Chi tiết Sản phẩm (product-detail) #111
- Tạo giỏ hàng (cart sidebar) #82
- Tạo trang thanh toán (checkout) #83
- Tạo đơn hàng và gởi mail xác nhận #103
-
Bonus
9
- Đa ngôn ngữ trong Laravel #115
- Tạo báo cáo với biểu đồ ChartJS #116
- Tạo khung chọn Ngày tháng cho dự án #2431
- Tạo các trang thông báo lỗi tương ứng STATUS CODE #117
- Kiểm tra ứng dụng với tunnel ảo NGROK #2418
- Phân trang trong Laravel #2436
- Bổ sung khung xem Hình ảnh trước khi upload (preview image upload) #2439
- Tạo API trong Laravel và sử dụng AngularJS để hiển thị giao diện #9385
- Cách tự động sinh Ảnh nhiều kích cỡ (Automatic resize image) khi upload file Ảnh #9970
- Danh sách Đồ án xây dựng trang web sử dụng LARAVEL 2
- Tài liệu tham khảo 3
- Thực hiện Đồ án 1
Các bài học
Bài học trước Bài học tiếp theo
Chương trình học
Bao gồm Module, Chương, Bài học, Bài tập, Kiểm tra...Chương trình học
- Bức tranh Tổng thể về Lập trình WEB
-
Giới thiệu, cài đặt, cấu hình môi trường lập trình
9
- Cài đặt web server XAMPP #84
- Cài đặt công cụ truy vấn database HeidiSQL #85
- Cài đặt Composer để quản lý các gói thư viện trong PHP #86
- Cài đặt trình soạn thảo code Visual Studio Code IDE #64
- Tạo tên miền ảo trên máy cục bộ (virtual host on localhost) bằng XAMPP #107
- Cài đặt nền tảng quản lý Source Code sử dụng GIT #1030
- Cài đặt công cụ quản lý Source Code TortoiseGit #1045
- Cài đặt chế độ Debug PHP với Visual Studio Code #8066
- Tạo chứng chỉ SSL trên Localhost #10399
- Tập làm quen với quản lý source code bằng GitHub 3
- Cài đặt framework Laravel 1
- Tìm hiểu mô hình kiến trúc MVC vận hành trong framework Laravel 4
- Sử dụng Template Engine để trình diễn nội dung trong các VIEW 3
-
Dự án thực tế mẫu - Trang web bán hàng trực tuyến - Thiết kế CSDL
7
- Phân tích các yêu cầu, nghiệp vụ của khách hàng #68
- Mô hình thiết kế CSDL mẫu Sunshine #69
- Khởi tạo database sunshine, thiết lập kết nối CSDL trong Laravel #1143
- Tạo cấu trúc table bằng tính năng MIGRATION trong Laravel - Danh mục phẳng #70
- Tạo cấu trúc table bằng tính năng MIGRATION trong Laravel - Danh mục có liên kết khóa ngoại #1157
- Tạo dữ liệu ban đầu cho CSDL bằng tính năng SEED trong Laravel - Danh mục phẳng #71
- Tạo dữ liệu ban đầu cho CSDL bằng tính năng SEED trong Laravel - Danh mục có liên kết khóa ngoại #7851
- Dự án thực tế mẫu - Trang web bán hàng trực tuyến - Ánh xạ CSDL và Laravel 3
-
Dự án thực tế mẫu - Trang web bán hàng trực tuyến - Thiết kế Backend
20
- Thiết kế bố cục (layouts) cho giao diện Backend #72
- Xây dựng chức năng CRUD (Thêm, Sửa, Xóa, Xem) danh mục phẳng - Loại sản phẩm (index) #135
- Xây dựng chức năng CRUD (Thêm, Sửa, Xóa, Xem) danh mục phẳng - Loại sản phẩm (create) #137
- Xây dựng chức năng CRUD (Thêm, Sửa, Xóa, Xem) danh mục phẳng - Loại sản phẩm (edit) #138
- Xây dựng chức năng CRUD (Thêm, Sửa, Xóa, Xem) danh mục phẳng - Loại sản phẩm (delete) #139
- Xây dựng danh mục Sản phẩm có chức năng upload hình ảnh - Index #75
- Lưu đồ Upload file từ Client lên Server #2229
- Xây dựng danh mục Sản phẩm có chức năng upload hình ảnh - Create #108
- Xây dựng danh mục Sản phẩm có chức năng upload hình ảnh - Edit #87
- Xây dựng danh mục Sản phẩm có chức năng upload hình ảnh - Delete #88
- Xây dựng danh mục Sản phẩm có chức năng upload nhiều Hình ảnh cùng lúc #9259
- Xây dựng danh mục Sản phẩm có chức năng upload hình ảnh - Bổ sung menu vào sidebar #104
- Xây dựng chức năng xuất biểu mẫu và In ấn trực tiếp trên web #78
- Xây dựng chức năng xuất Excel #76
- Xây dựng chức năng xuất PDF #77
- Tạo chức năng Đăng nhập #1870
- Lưu đồ Kiểm tra ràng buộc dữ liệu (Validation) #2205
- Kiểm tra ràng buộc dữ liệu (Validation) phía Client #2206
- Kiểm tra ràng buộc dữ liệu (Validation) phía Server #2207
- Bài tập tổng hợp - Tạo các chức năng Backend cho trang web đọc Truyện Tranh và Tiểu Thuyết Online sử dụng Laravel framework #9312
-
AngularJS
7
- AngularJS là gì? Cài đặt AngularJS và cú pháp sử dụng AngularJS #95
- Cách mô hình kiến trúc MVC vận hành trong AngularJS #96
- Cách sử dụng AngularJS Controller, Scope #98
- Cách sử dụng AngularJS Directive #97
- Cách sử dụng AngularJS Event #100
- Cách sử dụng AngularJS Filter #99
- Cách sử dụng AngularJS Validation #101
-
Dự án thực tế mẫu - Trang web bán hàng trực tuyến - Thiết kế Frontend sử dụng AngularJS
11
- Thiết kế bố cục (layouts) cho giao diện Frontend #80
- Tích hợp AngularJS vào framework Laravel #102
- Tạo giao diện trang chủ (index) #81
- Tạo giao diện trang Giới thiệu (about) #109
- Tạo giao diện trang Liên hệ (contact) #114
- Tạo trang danh sách Sản phẩm (product) #110
- Tạo nút Thêm vào giỏ hàng cho từng sản phẩm (add-to-cart) #112
- Tạo trang Chi tiết Sản phẩm (product-detail) #111
- Tạo giỏ hàng (cart sidebar) #82
- Tạo trang thanh toán (checkout) #83
- Tạo đơn hàng và gởi mail xác nhận #103
-
Bonus
9
- Đa ngôn ngữ trong Laravel #115
- Tạo báo cáo với biểu đồ ChartJS #116
- Tạo khung chọn Ngày tháng cho dự án #2431
- Tạo các trang thông báo lỗi tương ứng STATUS CODE #117
- Kiểm tra ứng dụng với tunnel ảo NGROK #2418
- Phân trang trong Laravel #2436
- Bổ sung khung xem Hình ảnh trước khi upload (preview image upload) #2439
- Tạo API trong Laravel và sử dụng AngularJS để hiển thị giao diện #9385
- Cách tự động sinh Ảnh nhiều kích cỡ (Automatic resize image) khi upload file Ảnh #9970
- Danh sách Đồ án xây dựng trang web sử dụng LARAVEL 2
- Tài liệu tham khảo 3
- Thực hiện Đồ án 1
Bài học trước Bài học tiếp theo
Menu Tiện ích
Menu Hướng dẫn Học tập
❤🧡💛💚💙💜 Học là phải THỰC HÀNH ❤🧡💛💚💙💜
Thực hiện các bước tuần tự theo nội dung Bài học nhé!