Cộng đồng chia sẻ tri thức Lib24.vn

Xay dung website su dung framework

82cc382bcfbd8b174576c07fa0f9d7b7
Gửi bởi: Trường Cao Đẳng Cơ Điện Hà Nội 12 tháng 1 2022 lúc 16:02:27 | Được cập nhật: hôm kia lúc 8:04:27 | IP: 100.117.8.155 Kiểu file: DOCX | Lượt xem: 115 | Lượt Download: 1 | File size: 2.166555 Mb

Nội dung tài liệu

Tải xuống
Link tài liệu:
Tải xuống

Các tài liệu liên quan


Có thể bạn quan tâm


Thông tin tài liệu

Bài 1: Giới thiệu

Laravel là một framework PHP mã nguồn mở, mạnh mẽ và dễ hiểu. Nó tuân theo một mẫu thiết kế model-view-controller. Laravel sử dụng lại các thành phần hiện có của các khung khác nhau để giúp tạo ra một ứng dụng web. Do đó, ứng dụng web được thiết kế có cấu trúc và thực dụng hơn.

Laravel cung cấp một tập hợp các chức năng phong phú kết hợp các tính năng cơ bản của các framework PHP như CodeIgniter, Yii và các ngôn ngữ lập trình khác như Ruby on Rails. Laravel có một bộ tính năng rất phong phú sẽ giúp tăng tốc độ phát triển web.

Nếu bạn đã quen thuộc với Core PHPAdvanced PHP, Laravel sẽ giúp công việc của bạn dễ dàng hơn. Nó tiết kiệm rất nhiều thời gian nếu bạn đang có kế hoạch phát triển một trang web từ đầu. Hơn nữa, một trang web được xây dựng trong Laravel là an toàn và ngăn chặn một số cuộc tấn công web.

  • Ưu điểm của Laravel

Khi bạn đang thiết kế một ứng dụng web dựa trên Laravel, nó cung cấp cho bạn những lợi thế sau:

  • Ứng dụng web trở nên có khả năng mở rộng hơn, nhờ vào framework Laravel.

  • Tiết kiệm đáng kể thời gian trong việc thiết kế ứng dụng web, vì Laravel sử dụng lại các thành phần từ framework khác trong việc phát triển ứng dụng web.

  • Nó bao gồm các không gian tên và giao diện, do đó hữu ích trong việc tổ chức và quản lý tài nguyên.

  • Composer

Composer là một công cụ bao gồm tất cả các dependencies và thư viện. Nó cho phép người dùng tạo một dự án liên quan đến framework đã đề cập (ví dụ: những dự án được sử dụng trong cài đặt Laravel). Thư viện của bên thứ ba có thể được cài đặt dễ dàng với sự trợ giúp của composer.

Tất cả các dependencies được ghi chú trong tệp composer.json được đặt trong thư mục nguồn.

  • Artisan

Giao diện dòng lệnh được sử dụng trong Laravel được gọi là Artisan. Nó bao gồm một tập hợp các lệnh hỗ trợ xây dựng một ứng dụng web. Các lệnh này được kết hợp từ framework Symphony..

  • Các tính năng của Laravel

Laravel cung cấp các tính năng chính sau đây giúp nó trở thành một lựa chọn lý tưởng để thiết kế các ứng dụng web:

  • Tính mô đun: Laravel cung cấp 20 thư viện và mô-đun tích hợp giúp tăng cường ứng dụng. Mỗi mô-đun được tích hợp với trình quản lý phụ thuộc Composer giúp dễ dàng cập nhật.

  • Khả năng kiểm tra: Laravel bao gồm các tính năng và trợ giúp giúp kiểm tra thông qua các trường hợp thử nghiệm khác nhau. Tính năng này giúp duy trì mã theo yêu cầu.

  • Định tuyến (Routing): Laravel cung cấp một cách tiếp cận linh hoạt cho người dùng để xác định các routes trong ứng dụng web. Định tuyến giúp mở rộng ứng dụng theo cách tốt hơn và tăng hiệu suất của nó.

  • Quản lý cấu hình: Một ứng dụng web được thiết kế trong Laravel sẽ chạy trên các môi trường khác nhau, điều đó có nghĩa là sẽ có sự thay đổi liên tục trong cấu hình của nó. Laravel cung cấp một cách tiếp cận nhất quán để xử lý cấu hình một cách hiệu quả.

  • Trình tạo truy vấn và ORM: Laravel kết hợp một trình xây dựng truy vấn giúp truy vấn cơ sở dữ liệu bằng các phương thức chuỗi đơn giản khác nhau. Nó cung cấp ORM (Object Relative Mapper) và triển khai ActiveRecord được gọi là Eloquent.

  • Xây dựng lược đồ (Schema Builder): Schema Builder duy trì các định nghĩa và lược đồ cơ sở dữ liệu trong mã PHP. Nó cũng duy trì theo dõi các thay đổi liên quan đến di chuyển cơ sở dữ liệu.

  • Công cụ template: Laravel sử dụng công cụ Blade Template, một ngôn ngữ template được sử dụng để thiết kế các khối và bố cục phân cấp với các khối được xác định trước bao gồm nội dung động.

  • E-mail: Laravel bao gồm một lớp mail giúp gửi thư có nội dung phong phú và tệp đính kèm từ ứng dụng web.

  • Xác thực: Xác thực người dùng là một tính năng phổ biến trong các ứng dụng web. Laravel giảm bớt việc thiết kế xác thực vì nó bao gồm các tính năng như đăng ký, quên mật khẩugửi lời nhắc mật khẩu.

  • Redis: Laravel sử dụng Redis để kết nối với một phiên hiện có và bộ đệm cho mục đích chung. Redis tương tác với phiên trực tiếp.

  • Hàng đợi: Laravel bao gồm các dịch vụ xếp hàng như gửi email số lượng lớn hoặc một công việc Cron được chỉ định. Các hàng đợi này giúp hoàn thành các nhiệm vụ một cách dễ dàng hơn mà không phải chờ đợi nhiệm vụ trước đó được hoàn thành.

  • Event và Command Bus: Laravel 5.1 bao gồm Command Bus giúp thực thi các lệnh và gửi các sự kiện một cách đơn giản. Các lệnh trong Laravel hoạt động theo vòng đời của ứng dụng.

Bài 2: Cài đặt Laravel

Để quản lý các dependencies, Laravel sử dụng composer. Hãy chắc chắn rằng bạn đã cài đặt composer trên hệ thống của mình trước khi cài đặt Laravel. Trong bài này, bạn sẽ được hướng dẫn quá trình cài đặt của Laravel.

Bạn sẽ phải làm theo các bước được đưa ra dưới đây để cài đặt Laravel vào hệ thống:

Bước 1 - Truy cập URL sau và tải xuống trình soạn thảo để cài đặt nó trên hệ thống.

https://getcomposer.org/download/

Bước 2 - Sau khi composer được cài đặt, hãy kiểm tra cài đặt bằng cách nhập lệnh composer trong dấu nhắc lệnh như trong ảnh chụp màn hình sau.

composer

Bước 3 - Bây giờ, chúng ta sẽ tập trung vào việc cài đặt framework hoàn chỉnh. Giả sử chúng ta tạo dự án tên test trong thư mục C:\xampp\htdocs. Tại thư mục htdocs, mở command và nhập lệnh sau:

composer create-project --prefer-dist laravel/laravel test

Đầu ra của lệnh như dưới đây:

cài đặt laravel

Framework Laravel có thể được cài đặt trực tiếp với nhánh phát triển (develop) bao gồm framework mới nhất.

Bước 4 - Lệnh trên sẽ cài đặt Laravel trong thư mục hiện tại. Bắt đầu dịch vụ Laravel bằng cách thực hiện lệnh sau.

php artisan serve

Bước 5 - Sau khi thực hiện lệnh trên, bạn sẽ thấy một màn hình như hình bên dưới:

artisan serve

Bước 6 - Sao chép URL được gạch chân màu xám trong ảnh chụp màn hình ở trên và mở URL đó trong trình duyệt. Nếu bạn thấy màn hình sau, nó có nghĩa là Laravel đã được cài đặt thành công.

laravel đã cài đặt

Bài 3: Cấu trúc ứng dụng Laravel

Cấu trúc ứng dụng trong Laravel về cơ bản là cấu trúc của các thư mục, thư mục con và tệp có trong một dự án. Khi chúng ta tạo một dự án trong Laravel, chúng ta có cấu trúc ứng dụng như trong hình ở đây.

Ảnh chụp nhanh được hiển thị ở đây đề cập đến thư mục gốc của Laravel, cụ thể là dự án laravel. Nó bao gồm các thư mục con và tập tin khác nhau. Việc phân tích các thư mục và tệp, cùng với các chức năng của chúng được đưa ra dưới đây:

Cấu trúc laravel

App

Nó là thư mục ứng dụng (application) và bao gồm toàn bộ mã nguồn của dự án. Nó chứa các sự kiện (events), ngoại lệ (exception) và khai báo phần mềm trung gian (middleware). Thư mục ứng dụng bao gồm các thư mục phụ khác nhau như được giải thích bên dưới:

Console

Console chứa tệp Kernel.php định nghĩa các câu lệnh trên artisan.

console laravel

Exceptions

Thư mục này chứa tất cả các phương thức cần thiết để xử lý các trường hợp ngoại lệ. Nó cũng chứa tập tin handle.php xử lý tất cả các ngoại lệ.

Http

Thư mục http có các thư mục con cho controllers, middleware.

Thư mục con Middleware bao gồm cơ chế phần mềm trung gian, bao gồm cơ chế lọc và giao tiếp giữa response và request.

Thư mục con controllers chứa các controller của project .

Providers

Thư mục này bao gồm tất cả các Providers dịch vụ cần thiết để đăng ký các sự kiện cho các máy chủ core và cấu hình ứng dụng Laravel.

Bootstrap

Thư mục này chứa tất cả các tập lệnh bootstrap của ứng dụng. Nó chứa một thư mục con cụ thể là cache, bao gồm tất cả các tệp được liên kết để lưu trữ ứng dụng web. Bạn cũng có thể tìm thấy tệp app.php, nó khởi tạo các tập lệnh cần thiết cho bootstrap.

Config

Thư mục config bao gồm các cấu hình khác nhau và các tham số liên quan cần thiết cho hoạt động trơn tru của ứng dụng Laravel. Các tập tin khác nhau trong thư mục config được hiển thị trong hình ảnh dưới đây. Các tên file hoạt động theo chức năng liên quan đến chúng.

config laravel

Database

Như tên cho thấy, thư mục này bao gồm các tham số khác nhau cho các chức năng cơ sở dữ liệu. Nó bao gồm ba thư mục con như được đưa ra dưới đây:

  • Seeds - Chứa các lớp được sử dụng để tạo dữ liệu thêm vào CSDL.

  • Migrations - Thư mục này chứa các file tạo và chỉnh sửa dữ liệu.

  • Factories - Thư mục này được sử dụng để tạo số lượng lớn các bản ghi dữ liệu.

Public

Đây là thư mục gốc giúp khởi tạo ứng dụng Laravel. Nó bao gồm các tệp và thư mục sau:

  • .htaccess - Tập tin này cung cấp cấu hình máy chủ.

  • javascript và css - Những tệp này được coi là assets được sử dụng để chứa các file js và css.

  • index.php - Tập tin này là cần thiết để khởi tạo một ứng dụng web.

Resources

Thư mục Resources chứa các tệp giúp cải thiện ứng dụng web. Các thư mục con có trong thư mục này và mục đích của chúng được giải thích bên dưới:

  • js - Thư mục các file javascript cho ứng dụng.

  • scss - Thư mục chứa các file css cho ứng dụng.

  • lang - Thư mục này bao gồm cấu hình vị trí địa lý hoặc ngôn ngữ.

  • views - Views là các tệp HTML hoặc templates tương tác với người dùng và đóng vai trò chính trong kiến ​​trúc MVC.

Quan sát rằng thư mục Resources sẽ được làm phẳng thay vì có một thư mục assets.

resources laravel

routes

Thư mục routes, chứa tất cả các điều khiển route (đường dẫn) trong project. Chứa các file route sẵn có: web.php, channels.php, api.php, và console.php.

routes laravel

api

file api.php, điều khiển các route của ứng dụng, như route của ứng dụng User (đăng ký, đăng nhập, ...).

web

file web.php, điều khiển các route của view, như route của trang top, sản phẩm, ...

Storage

Đây là thư mục lưu trữ tất cả các bản ghi và các tệp cần thiết khi dự án Laravel đang chạy. Các thư mục con có trong thư mục này và mục đích của chúng được đưa ra dưới đây:

  • app - Thư mục này chứa các tệp được gọi liên tiếp.

  • framework - Nó chứa các phiên, bộ đệm và các khung nhìn (views) và được gọi thường xuyên.

  • Logs - Tất cả các trường hợp ngoại lệ và nhật ký lỗi được theo dõi trong thư mục con này.

Tests

Chứa những file tests, như PHPUnit test.

Vendor

Laravel hoàn toàn dựa trên các Composer dependencies , ví dụ để cài đặt thiết lập Laravel hoặc nhúng các thư viện của bên thứ ba, v.v ... Thư mục Vendor nhúng tất cả các composer dependencies.

Ngoài các tệp được đề cập ở trên, Laravel còn bao gồm một số tệp khác đóng vai trò chính trong các chức năng khác nhau như cấu hình GitHub, các gói và các thư viện của bên thứ ba.

Các tập tin trong cấu trúc ứng dụng được hiển thị bên dưới:

vendor laravel

Bài 4: Cấu hình Laravel

Trong bài trước, chúng ta đã biết các tệp cấu hình cơ bản của Laravel được đặt trong thư mục cấu hình. Trong bài này, chúng ta hãy thảo luận về các thể loại có trong cấu hình.

Cấu hình môi trường

Các biến môi trường là những biến cung cấp danh sách các dịch vụ web cho ứng dụng web. Tất cả các biến môi trường được khai báo trong tệp .env bao gồm các tham số cần thiết để khởi tạo cấu hình.

Theo mặc định, tệp .env bao gồm các tham số sau:

APP_ENV = local

APP_DEBUG = true

APP_KEY = base64:ZPt2wmKE/X4eEhrzJU6XX4R93rCwYG8E2f8QUA7kGK8 =

APP_URL = http://localhost

DB_CONNECTION = mysql

DB_HOST = 127.0.0.1

DB_PORT = 3306

DB_DATABASE = homestead

DB_USERNAME = homestead

DB_PASSWORD = secret

CACHE_DRIVER = file

SESSION_DRIVER = file

QUEUE_DRIVER = sync

REDIS_HOST = 127.0.0.1

REDIS_PASSWORD = null

REDIS_PORT = 6379

MAIL_DRIVER = smtp

MAIL_HOST = mailtrap.ioMAIL_PORT = 2525

MAIL_USERNAME = null

MAIL_PASSWORD = null

MAIL_ENCRYPTION = null

Các điểm quan trọng

Trong khi làm việc với các tệp cấu hình cơ bản của Laravel, cần lưu ý các điểm sau:

  • Không nên cố định tệp .env đối với nguồn ứng dụng, vì mỗi nhà phát triển hoặc người dùng có một số cấu hình môi trường riêng cho ứng dụng web.

  • Đối với các tùy chọn sao lưu, nhóm phát triển nên sử dụng tệp .env.example, nó sẽ chứa các cấu hình mặc định.

Truy xuất các biến môi trường

Tất cả các biến môi trường được khai báo trong tệp .env có thể được truy cập bởi các hàm env-helper sẽ gọi tham số tương ứng. Các biến này cũng được liệt kê thành biến toàn cục $ _ENV mỗi khi ứng dụng nhận được yêu cầu từ phía người dùng. Bạn có thể truy cập biến môi trường như hình bên dưới -

'env' => env('APP_ENV', 'production'),

Các hàm env-helper được gọi trong tệp app.php có trong thư mục cấu hình. Ví dụ đã cho ở trên đang gọi tham số cục bộ cơ bản.

Truy cập các giá trị cấu hình

Bạn có thể dễ dàng truy cập các giá trị cấu hình ở bất cứ đâu trong ứng dụng bằng chức năng trợ giúp cấu hình toàn cục. Trong trường hợp nếu các giá trị cấu hình không được khởi tạo, các giá trị mặc định được trả về.

Ví dụ: để đặt múi giờ mặc định, đoạn mã sau được sử dụng -

config(['app.timezone' => 'Asia/Ho_Chi_minh']);

Bộ nhớ đệm của cấu hình

Để tăng hiệu suất và tăng cường ứng dụng web, điều quan trọng là phải lưu trữ tất cả các giá trị cấu hình. Lệnh để lưu trữ các giá trị cấu hình là:

config:cache

Ảnh chụp màn hình sau đây cho thấy bộ nhớ đệm theo cách tiếp cận có hệ thống:

caching laravel

Chế độ bảo trì

Đôi khi bạn có thể cần cập nhật một số giá trị cấu hình hoặc thực hiện bảo trì trên trang web của mình. Trong những trường hợp như vậy, giữ nó trong chế độ bảo trì. Các ứng dụng web như vậy được giữ trong chế độ bảo trì thông qua một ngoại lệ có tên MaintenanceModeException với mã trạng thái 503.

Bạn có thể kích hoạt chế độ bảo trì trên ứng dụng web Laravel của mình bằng lệnh sau:

php artisan down

laravel

Ảnh chụp màn hình sau đây cho thấy ứng dụng web sẽ hiển thị khi nó bị ngừng hoạt động

down laravel

Khi bạn hoàn thành công việc cập nhật và bảo trì khác, bạn có thể tắt chế độ bảo trì trên ứng dụng web của mình bằng lệnh sau

php artisan up

up laravel

Bây giờ, bạn có thể thấy rằng trang web hiển thị đầu ra với chức năng phù hợp và chỉ ra rằng chế độ bảo trì hiện đã bị xóa như hiển thị bên dưới

laravel

Bài 5: Định tuyến (Routing)

Trong Laravel, tất cả các yêu cầu (request) được ánh xạ với sự trợ giúp của các routes. Định tuyến cơ bản định tuyến yêu cầu đến các controller liên quan. Bài này thảo luận về định tuyến trong Laravel.

Định tuyến trong Laravel bao gồm các loại sau:

  • Định tuyến cơ bản

  • Định tuyến các tham số

  • Các định tuyến đặt tên

Định tuyến cơ bản

Tất cả các định tuyến ứng dụng được đăng ký trong tệp routes/web.php. Tệp này thông báo cho Laravel về các URI mà nó sẽ phản hồi và controller được liên kết sẽ cung cấp cho nó một lời gọi cụ thể. Định tuyến mẫu cho trang welcome có thể được hiển thị trong ảnh chụp màn hình được cung cấp bên dưới:

routes laravel

Route::get('/', function () {

return view('welcome');

});

Ví dụ

Quan sát ví dụ sau để hiểu thêm về Routing.

routes/web.php

Route::get('/', function () {

return view('welcome');

});

resources/view/welcome.blade.php

<!DOCTYPE >

< lang="{{ str_replace('_', '-', app()->getLocale()) }}">

<head>

<meta charset="utf-8">

<meta name="viewport" content="width=device-width, initial-scale=1">

<title>Laravel</title>

<!-- Fonts -->

<link href="https://fonts.googleapis.com/css?family=Nunito:200,600" rel="stylesheet">

<!-- Styles -->

<style>

, div {

background-color: #fff;

color: #636b6f;

font-family: 'Nunito', sans-serif;

font-weight: 200;

height: 100vh;

margin: 0;

}

.full-height {

height: 100vh;

}

.flex-center {

align-items: center;

display: flex;

justify-content: center;

}

.content {

text-align: center;

}

.title {

font-size: 84px;

}

.m-b-md {

margin-bottom: 30px;

}

</style>

</head>

<div>

<div class="flex-center position-ref full-height">

<div class="content">

<div class="title m-b-md">

Laravel

</div>

</div>

</div>

</div>

</>

Cơ chế Routing hiển thị như ảnh dưới đây

Cơ chế Routing Laravel

Bây giờ chúng ta cúng tìm hiểu các bước liên quan đến cơ chế định tuyến một cách chi tiết:

Bước 1 - Đầu tiên, chúng ta nên thực thi URL gốc của ứng dụng.

Bước 2 - Bây giờ, URL được thực thi phải khớp với phương thức thích hợp trong tệp web.php. Trong trường hợp hiện tại, nó phải phù hợp với phương thức và URL gốc (’/'). Điều này sẽ thực hiện các chức năng liên quan.

Bước 3 - Hàm gọi file template resources/views/welcome.blade.php. Tiếp theo, hàm gọi hàm view() với đối số ‘welcome', không sử dụng blade.php.

Nó sẽ tạo ra đầu ra HTML như trong hình bên dưới:

laravel

Định tuyến các tham số

Đôi khi trong ứng dụng web, bạn có thể cần phải lấy các tham số được truyền bằng URL. Đối với điều này, bạn nên sửa đổi mã trong tập tin web.php.

Bạn có thể nắm bắt các tham số trong tệp web.php theo hai cách như được thảo luận ở đây:

Các tham số bắt buộc

Các tham số này là những tham số cần được bắt buộc để định tuyến ứng dụng web. Ví dụ: để lấy số nhận dạng (ID) người dùng từ URL có thể được thực hiện bằng cách xác định các tham số định tuyến như dưới đây:

Route::get('ID/{id}',function($id) {

echo 'ID: '.$id;

});

Các tham số tùy chọn

Đôi khi các nhà phát triển có thể tạo ra các tham số là tùy chọn và có thể bao gồm dấu ? sau tên tham số trong URL. Điều quan trọng là giữ giá trị mặc định được đề cập dưới dạng tên tham số. Quan sát ví dụ sau đây cho thấy cách xác định tham số tùy chọn:

Route::get('user/{name?}', function ($name = 'LearnSkill') { return $name;});

Ví dụ trên kiểm tra xem giá trị có khớp với LearnSkill hay không và định tuyến đến URL được xác định.

Các định tuyến đặt tên

Các định tuyến đặt tên cho phép một cách thuận tiện để tạo các routes. Chuỗi các định tuyến có thể được chỉ định bằng cách sử dụng phương thức name vào định nghĩa routes. Đoạn mã sau đây cho thấy một ví dụ để tạo các routes được đặt tên bằng controller.

Route::get('user/profile', 'UserController@showProfile')->name('profile');

UserController sẽ gọi hàm showProfile với tham số là profile. Các tham số sử dụng phương thức name vào định nghĩa routes.

Bài 6: Middleware

Middleware hoạt động như một cầu nối giữa một yêu cầu (request) và một phản hồi (response). Nó là một loại cơ chế lọc. Bài này giải thích cho bạn cơ chế phần mềm trung gian trong Laravel.

Laravel có một middleware để xác minh xem người dùng của ứng dụng có được xác thực hay không. Nếu người dùng được xác thực, nó sẽ chuyển hướng đến trang chủ, nếu không, nó sẽ chuyển hướng đến trang đăng nhập.

Middleware có thể được tạo bằng cách thực hiện lệnh sau:

php artisan make:middleware <tên-middleware>

Thay thế <tên-middleware> bằng tên của middleware của bạn. middleware bạn tạo có thể được nhìn thấy trong thư mục app/Http/Middleware.

Ví dụ

Quan sát ví dụ sau để hiểu cơ chế middleware

Bước 1 - Bây giờ chúng ta hãy tạo AgeMiddleware. Để tạo nó, chúng ta cần thực hiện lệnh sau:

php artisan make:middleware AgeMiddleware

Bước 2 - Sau khi thực hiện thành công lệnh, bạn sẽ nhận được output như sau:

middleware laravel

Bước 3 - AgeMiddleware sẽ được tạo tại app/Http/Middleware. Các tập tin mới được tạo sẽ có mã sau đây đã được tạo cho bạn.

<?php

namespace App\Http\Middleware;

use Closure;

class AgeMiddleware

{

public function handle($request, Closure $next)

{

return $next($request);

}

}

Đăng ký Middleware

Chúng ta cần phải đăng ký Middleware trước khi sử dụng nó. Có hai loại Middleware trong Laravel.

  • Global Middleware

  • Route Middleware

Global Middleware sẽ chạy trên mọi yêu cầu HTTP của ứng dụng, trong khi đó routeMiddleware sẽ được gán cho một route cụ thể. Middleware có thể được đăng ký tại app/Http/Kernel.php. Tệp này chứa hai thuộc tính $middleware$routeMiddleware. Thuộc tính $middleware được sử dụng để đăng ký Global Middleware và thuộc tính $routeMiddleware được sử dụng để đăng ký route cho middleware cụ thể.

Để đăng ký Global Middleware , hãy liệt kê lớp ở cuối thuộc tính $middleware.

protected $middleware = [

\App\Http\Middleware\TrustProxies::class,

\App\Http\Middleware\CheckForMaintenanceMode::class,

\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,

\App\Http\Middleware\TrimStrings::class,

\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,

];

Để đăng ký middleware cụ thể của route, hãy thêm khóa và giá trị vào thuộc tính $routeMiddleware.

protected $routeMiddleware = [

'auth' => \App\Http\Middleware\Authenticate::class,

'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,

'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,

'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,

'can' => \Illuminate\Auth\Middleware\Authorize::class,

'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,

'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,

'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,

'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,

];

Ví dụ

Chúng ta đã tạo AgeMiddleware trong ví dụ trước. Bây giờ chúng ta có thể đăng ký nó trong thuộc tính middleware cụ thể. Mã cho đăng ký đó được hiển thị dưới đây.

Sau đây là mã cho app/Http/Kernel.php

protected $routeMiddleware = [

'auth' => \App\Http\Middleware\Authenticate::class,

'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,

'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,

'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,

'can' => \Illuminate\Auth\Middleware\Authorize::class,

'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,

'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,

'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,

'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,

'Age' => \App\Http\Middleware\AgeMiddleware::class,

];

Các Tham số middleware

Chúng ta cũng có thể truyền tham số với Middleware. Ví dụ: nếu ứng dụng của bạn có các vai trò khác nhau như người dùng, quản trị viên, siêu quản trị viên, v.v. và bạn muốn xác thực hành động dựa trên vai trò, điều này có thể đạt được bằng cách chuyển tham số với middleware. Middleware mà chúng ta tạo chứa hàm sau đây và chúng ta có thể truyền đối số sau đối số $next.

public function handle($request, Closure $next) {

return $next($request);

}

Ví dụ

Bước 1 - Tạo RoleMiddleware bằng cách thực hiện lệnh sau:

php artisan make:middleware RoleMiddleware

Bước 2 - Sau khi thực hiện thành công, bạn sẽ nhận được output sau

middleware

Bước 3 - Thêm mã sau đây vào phương thức xử lý của ứng dụng RoleMiddleware tại app/Http/Middleware/RoleMiddleware.php.

<?php

namespace App\Http\Middleware;

use Closure;

class RoleMiddleware

{

public function handle($request, Closure $next, $role) {

echo "Role: ".$role;

return $next($request);

}

}

Bước 4 - Đăng ký RoleMiddleware trong tệp app/Http/Kernel.php.

protected $routeMiddleware = [

'auth' => \App\Http\Middleware\Authenticate::class,

'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,

'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,

'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,

'can' => \Illuminate\Auth\Middleware\Authorize::class,

'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,

'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,

'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,

'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,

'Age' => \App\Http\Middleware\AgeMiddleware::class,

'Role' => \App\Http\Middleware\RoleMiddleware::class,

];

Bước 5: Thực thi lệnh sau để tạo TestController

php artisan make:controller TestController

Bước 6: Sau khi thực thi thành công bước 5, bạn sẽ nhận được output như sau:

create controller trong laravel

Bước 7: Copy những dòng lệnh sau vào file app/Http/TestController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;

use App\Http\Controllers\Controller;

class TestController extends Controller {

public function index() {

echo "<br>Test Controller.";

}

}

Bước 8: Thêm dòng lệnh sau vào file routes/web.php

Route::get('role',[

'middleware' => 'Role:editor',

'uses' => 'TestController@index',

]);

Bước 9: Mở trình duyệt nhập URL dưới đây và kiểm tra Middleware với các tham số

http://localhost:8000/role

Bước 10: Chương trình sẽ hiển thị như ảnh dưới đây

middleware với tham số

Terminable Middleware

Terminable Middleware có thể thực hiện một số tác vụ sau khi phản hồi đã được gửi tới trình duyệt. Điều này có thể được thực hiện bằng cách tạo ra một Middleware với phương thức terminate trong Middleware . Terminable Middleware nên được đăng ký với Global Middleware. Phương thức terminate sẽ nhận được hai đối số $request$response. Phương thức terminate có thể được tạo như hiển thị trong đoạn mã sau.

Ví dụ

Bước 1 - Tạo TerminatingMiddleware bằng cách thực hiện lệnh bên dưới.

php artisan make:middleware TerminateMiddleware

Bước 2 - Bước 1 sẽ tạo ra output như sau:

terminable middleware

Bước 3: Copy đoạn mã sau vào TerminateMiddleware vừa tạo tại app/Http/Middleware/TerminateMiddleware.php.

<?php

namespace App\Http\Middleware;

use Closure;

class TerminateMiddleware {

public function handle($request, Closure $next) {

echo "Executing statements of handle method of TerminateMiddleware.";

return $next($request);

}

public function terminate($request, $response) {

echo "<br>Executing statements of terminate method of TerminateMiddleware.";

}

}

Bước 4: Đăng ký TerminateMiddleware tại file app\Http\Kernel.php

đăng ký middleware

Bước 5 − Thực thi lệnh sau để tạo ABCController.

php artisan make:controller ABCController

Bước 6 − Sau khi thực thi thành công, bạn sẽ nhận được output như sau:

tạo controller

Bước 7: Copy những dòng lệnh sau vào file app/Http/ABCController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;

use App\Http\Controllers\Controller;

class ABCController extends Controller {

public function index() {

echo "<br>ABC Controller.";

}

}

Bước 8: Thêm dòng lệnh sau vào file routes/web.php

Route::get('terminate',[

'middleware' => 'terminate',

'uses' => 'ABCController@index',

]);

Bước 9: Mở trình duyệt nhập URL dưới đây và kiểm tra Middleware với các tham số

http://localhost:8000/terminate

Bước 10: Chương trình sẽ hiển thị như ảnh dưới đây

terminate middleware

Bài 7: Request trong Laravel

Trong bài này, bạn sẽ tìm hiểu chi tiết về Requests trong Laravel.

Lấy Request URI

Phương thức "path" của người dùng được sử dụng để lấy URI được yêu cầu. Phương thức is được sử dụng để truy xuất URI được yêu cầu khớp với mẫu cụ thể được chỉ định trong đối số của phương thức. Để có được URL đầy đủ, chúng ta có thể sử dụng phương thức url.

Ví dụ

Bước 1 - Thực hiện lệnh dưới đây để tạo controller mới gọi là UriControll.

php artisan make:controller UriController

Bước 2 - Sau khi tạo controller, thêm đoạn mã sau vào tệp app/Http/Controllers/UriController.php.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UriController extends Controller

{

public function index(Request $request) {

// Sử dụng phương thức path

$path = $request->path();

echo 'Path Method: '.$path;

echo '<br>';

// Sử dụng phương thức is

$pattern = $request->is('foo/*');

echo 'is Method: '.$pattern;

echo '<br>';

// Sử dụng phương thức url

$url = $request->url();

echo 'URL method: '.$url;

}

}

Bước 3 - Thêm dòng sau vào file routes/web.php.

Route::get('/foo/bar','UriController@index');

Bước 4 - Truy cập URL sau.

http://localhost:8000/foo/bar

Bước 5 - Đầu ra sẽ xuất hiện như hình ảnh sau đây.

get uri laravel

Lấy dữ liệu đầu vào (input)

Các giá trị đầu vào có thể lấy dễ dàng trong Laravel. Laravel sẽ nhận giá trị đầu vào cho cả hai phương thức "post""get" giống nhau. Có hai cách chúng ta có thể lấy các giá trị đầu vào.

  • Sử dụng phương thức input()

  • Sử dụng các thuộc tính của thể hiện Request

Sử dụng phương thức input()

Phương thức input() nhận một đối số (tên của field trong form). Ví dụ: nếu form chứa field username thì chúng ta có thể truy cập nó theo cách sau.

$name = $request->input('username');

Sử dụng các thuộc tính của thể hiện Request

Giống như phương thức input(), chúng ta có thể lấy thuộc tính username trực tiếp từ thể hiện request.

$request->username

Ví dụ

Quan sát ví dụ sau để hiểu thêm về Request

Bước 1 - Tạo form Đăng ký, nơi người dùng có thể tự đăng ký và lưu trữ form tại resources/views/register.php.

<>

<head>

<title>Ví dụ Form</title>

</head>

<div>

<form action = "/user/register" method = "post">

<input type = "hidden" name = "_token" value = "<?php echo csrf_token() ?>">

<table>

<tr>

<td>Name</td>

<td><input type = "text" name = "name" /></td>

</tr>

<tr>

<td>Username</td>

<td><input type = "text" name = "username" /></td>

</tr>

<tr>

<td>Password</td>

<td><input type = "text" name = "password" /></td>

</tr>

<tr>

<td colspan = "2" align = "center">

<input type = "submit" value = "Register" />

</td>

</tr>

</table>

</form>

</div>

</>

Bước 2 - Thực hiện lệnh dưới đây để tạo controller UserRegistration.

php artisan make:controller UserRegistration

Bước 3 - Sao chép mã sau vào controller app/Http/Controllers/UserRegistration.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UserRegistration extends Controller

{

public function postRegister(Request $request) {

//Nhận field đầu vào name

$name = $request->input('name');

echo 'Name: '.$name;

echo '<br>';

//Nhận field đầu vào username

$username = $request->username;

echo 'Username: '.$username;

echo '<br>';

//Retrieve the password input field

$password = $request->password;

echo 'Password: '.$password;

}

}

Bước 5 - Thêm dòng sau vào tệp routes/web.php.

Route::get('/register',function() {

return view('register');

});

Route::post('/user/register',array('uses'=>'UserRegistration@postRegister'));

Bước 6 - Truy cập URL sau và bạn sẽ thấy form đăng ký như trong hình bên dưới. Nhập chi tiết đăng ký và nhấp vào register, bạn sẽ thấy trên trang thứ hai mà chúng ta đã truy xuất và hiển thị chi tiết thông tin người dùng đăng ký.

http://localhost:8000/register

Bước 7 - Đầu ra sẽ trông giống như được hiển thị đây.

request laravel

Bài 8: Response trong laravel

Ứng dụng web phản hồi (response) yêu cầu của người dùng theo nhiều cách tùy thuộc vào các tham số. Bài này giải thích cho bạn chi tiết về các phản hồi trong các ứng dụng web của Laravel.

Response cơ bản

Laravel cung cấp một số cách khác nhau để trả lời phản hồi. Phản hồi có thể được gửi từ route hoặc từ controller. Response cơ bản có thể được gửi là chuỗi đơn giản như được hiển thị trong code mẫu bên dưới. Chuỗi này sẽ được tự động chuyển đổi thành phản hồi HTTP thích hợp.

Ví dụ

Bước 1 - Thêm mã sau vào file routes/web.php.

Route::get('/basic_response', function () {

return 'Hello World';

});

Bước 2 - Truy cập URL sau để kiểm tra response cơ bản.

http://localhost:8000/basic_response

Bước 3 - Đầu ra sẽ xuất hiện như hình ảnh dưới đây.

basic response laravel

Đính kèm các header

Phản hồi có thể được gắn vào các tiêu đề bằng phương thức header(). Chúng tôi cũng có thể đính kèm loạt header như trong code mẫu bên dưới.

return response($content,$status)

->header('Content-Type', $type)

->header('X-Header-One', 'Header Value')

->header('X-Header-Two', 'Header Value');

Ví dụ

Quan sát ví dụ sau để hiểu thêm về Response

Bước 1 - Thêm mã sau vào tệp routes/web.php.

Route::get('/header',function() {

return response("Hello", 200)->header('Content-Type', 'text/');

});

Bước 2 - Truy cập URL sau để kiểm tra phản hồi cơ bản.

http://localhost:8000/header

Bước 3 - Đầu ra sẽ xuất hiện như trong hình ảnh sau đây.

attach header

Đính kèm Cookies

Phương thức withcookie() được sử dụng để đính kèm cookie. Cookie được tạo bằng phương thức này có thể được đính kèm bằng cách gọi phương thức withcookie() với thể hiện response. Theo mặc định, tất cả các cookie được tạo bởi Laravel đều được mã hóa và ký để client không thể sửa đổi hoặc đọc chúng.

Ví dụ

Quan sát ví dụ sau để hiểu thêm về cách đính kèm cookie:

Bước 1 - Thêm mã sau vào tệp routes/web.php.

Route::get('/cookie',function() {

return response("Hello", 200) -> header('Content-Type', 'text/') -> withcookie('name','hieulv68');

});

Bước 2 - Truy cập URL sau để kiểm tra.

http://localhost:8000/cookie

Bước 3 - Đầu ra sẽ xuất hiện như trong hình ảnh sau đây.

response with cookie

Phản hồi JSON

Phản hồi JSON có thể được gửi bằng phương thức json. Phương thức này sẽ tự động thiết lập Content-Type header thành application/json. Phương thức json sẽ tự động chuyển đổi mảng thành phản hồi json thích hợp.

Ví dụ

Quan sát ví dụ sau để hiểu thêm về Phản hồi JSON

Bước 1 - Thêm dòng sau vào tệp routes/web.php.

Route::get('json',function() {

return response()->json(['name' => 'hieulv68', 'job' => 'Giảng viên CNTT']);

});

Bước 2 - Truy cập URL sau để kiểm tra phản hồi json.

http://localhost:8000/json

Bước 3 - Đầu ra sẽ xuất hiện như trong hình ảnh sau đây.

phản hồi json

Bài 9: Controllers

Trong framework MVC, chữ 'C' là viết tắt của Controller. Nó hoạt động như một trao đổi trực tiếp giữa ViewsModels. Trong bài này, bạn sẽ tìm hiểu về Controller trong Laravel.

Tạo một controller

Mở dấu nhắc lệnh hoặc terminal dựa trên hệ điều hành bạn đang sử dụng và nhập lệnh sau để tạo controller bằng Artisan CLI (Command Line Interface).

php artisan make:controller <controller-name>

Thay thế <controller-name> bằng tên của controller bạn muốn tạo. Hàm tạo đã tạo có thể được nhìn thấy tại app/Http/Controllers.

Bạn sẽ thấy rằng một số code cơ bản đã được thực hiện cho bạn và bạn có thể thêm code tùy chỉnh của mình. Controller được tạo có thể được gọi từ routes/web.php theo cú pháp sau.

Cú pháp

Route::get(‘base URI’,’controller@method’);

Ví dụ

Bước 1 - Thực hiện lệnh sau để tạo UserContoder.

php artisan make:controller UserController

Bước 2 - Sau khi thực hiện thành công, bạn sẽ nhận được output sau.

tạo controller

Bước 3 - Bạn có thể thấy controller được tạo tại app/Http/Controllers/UserControll.php với một số code cơ bản đã được viết cho bạn và bạn có thể thêm code của riêng mình dựa trên nhu cầu của bạn.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UserController extends Controller

{

//

}

Controller Middleware

Chúng ta đã biết về middleware và nó cũng có thể được sử dụng với controller. Middleware cũng có thể được gán tới route của controller hoặc trong constructor của controller. Bạn có thể sử dụng phương thức middleware để gán middleware cho controller. Middleware đã đăng ký cũng có thể được giới hạn trong một số phương thức nhất định của controller.

Chỉ định Middleware cho Route

Route::get('profile', [

'middleware' => 'auth',

'uses' => 'UserController@showProfile'

]);

Ở đây chúng ta đang gán middleware auth cho UserController trong route profile.

Chỉ định Middleware trong hàm tạo của Controller

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;

use App\Http\Controllers\Controller;

class UserController extends Controller {

public function __construct() {

$this->middleware('auth');

}

}

Ở đây chúng ta đang gán middleware auth bằng phương thức middleware trong hàm tạo của UserControll.

Ví dụ

Bước 1 - Thêm các dòng mã sau vào tệp routes/web.php và lưu nó.

web.php

Route::get('/usercontroller/path',[

'middleware' => 'First',

'uses' => 'UserController@showPath'

]);

Bước 2 - Tạo một middleware có tên FirstMiddleware bằng cách thực thi dòng mã sau.

php artisan make:middleware FirstMiddleware

Bước 3 - Thêm mã sau vào phương thức xử lý của FirstMiddleware mới được tạo tại app/Http/Middleware.

FirstMiddleware.php

<?php

namespace App\Http\Middleware;

use Closure;

class FirstMiddleware

{

public function handle($request, Closure $next)

{

echo '<br>First Middleware';

return $next($request);

}

}

Bước 4 - Tạo một middleware có tên là SecondMiddleware bằng cách thực hiện lệnh sau.

php artisan make:middleware SecondMiddleware

Bước 5 - Thêm mã sau vào phương thức xử lý của SecondMiddleware mới được tạo tại app/Http/Middleware.

SecondMiddleware.php

<?php

namespace App\Http\Middleware;

use Closure;

class SecondMiddleware

{

public function handle($request, Closure $next)

{

echo '<br>Second Middleware';

return $next($request);

}

}

Bước 6: Khai báo FirstMiddleware và SecondMiddleware trong app/Http/Kenel.php

Khai báo middleware trong laravel

Bước 7 - Tạo một controller có tên UserContoder bằng cách thực hiện lệnh sau.

php artisan make:controller UserController

Bước 8 - Sau khi thực hiện thành công, bạn sẽ nhận được kết quả output như sau:

tạo controller

Bước 9 - Copy mã lệnh dưới đây vào file app/Http/UserController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;

use App\Http\Controllers\Controller;

class UserController extends Controller {

public function __construct() {

$this->middleware('Second');

}

public function showPath(Request $request) {

$uri = $request->path();

echo '<br>URI: '.$uri;

$url = $request->url();

echo '<br>';

echo 'URL: '.$url;

$method = $request->method();

echo '<br>';

echo 'Method: '.$method;

}

}

Bước 10 - Bây giờ hãy khởi chạy máy chủ web php, bằng cách thực hiện lệnh sau (nếu bạn chưa thực hiện lệnh này).

php artisan serve

Bước 11 - Truy cập URL sau.

http://localhost:8000/usercontroller/path

Bước 12 - Output sẽ xuất hiện như thể hiện trong hình ảnh sau đây.

middleware

Restful Resource Controllers

Thông thường khi tạo một ứng dụng, chúng ta cần thực hiện các thao tác CRUD (Create, Read, Update, Delete). Công việc này dễ dàng trong Laravel. Chỉ cần tạo một controller và Laravel sẽ tự động cung cấp tất cả các phương thức cho các hoạt động CRUD. Bạn cũng có thể đăng ký một route duy nhất cho tất cả các phương thức trong file web.php.

Ví dụ

Bước 1 - Tạo controller có tên MyController bằng cách thực hiện lệnh sau.

php artisan make:controller MyController

Bước 2 - Thêm mã sau vào tập tin app/Http/Controllers/MyController.php.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class MyController extends Controller

{

public function index() {

echo 'index';

}

public function create() {

echo 'create';

}

public function store(Request $request) {

echo 'store';

}

public function show($id) {

echo 'show';

}

public function edit($id) {

echo 'edit';

}

public function update(Request $request, $id) {

echo 'update';

}

public function destroy($id) {

echo 'destroy';

}

}

Bước 3 - Thêm dòng mã sau vào file routes/web.php.

Route::resource('my','MyController');

Bước 4 - Chúng ta hiện đang đăng ký tất cả các phương thức của MyContoder bằng cách đăng ký controller với resource. Dưới đây là bảng hành động được xử lý bởi resource controller.

các phương thức CRUD

Bước 5 - Thử thực thi các URL thể hiện trong bảng sau:

resource route

Bài 10: Models

Model là gì?

Trong framework MVC, ký tự "M" viết tắt của Model. Model có nghĩa là xử lý logic tác nghiệp trong bất kỳ ứng dụng nào dựa trên framework MVC. Trong Laravel, Model là class mô tả cấu trúc logic và mối quan hệ của bảng dữ liệu. Trong Laravel, mỗi bảng CSDL là tương đương một "Model" để cho phép chúng ta tương tác với bảng đó. Các Models giúp bạn truy hồi (select), thêm (insert) và cập nhật (update) thông tin vào bảng dữ liệu. Tất cả các Model của Laravel được lưu trưc trong thư mục chính app.

Tạo Model

Model có thể được tạo đơn giản bằng cách sử dụng lệnh artisan make::model như sau:

php artisan make:model <tên-model>

Thay thế <tên-model> với tên bạn muốn cho model bạn tạo.

Khi lệnh trên được thực thi, một file class model với một số code mode cơ bản sẽ được tạo trong thư mục app.

Ví dụ:

Bước 1: Mở trình gõ lệnh và thực thi lệnh artisan sau:

php artisan make:model Post

Bước 2: Khi lệnh trên được thực thi, một model sẽ được sinh ra với tên là Post tại app/Post.php. Mở file model vừa được sinh ra, tại thời điểm này, model của bạn trông giống như sau:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model

{

//

}

Chú ý rằng mọi model Eloquent chúng ta tạo extends từ class Illuminate\Database\Eloquent\Model.

MẸO: Nếu bạn muốn tất cả model tạo ra tập chung tại một thư mục models để thuận tiện cho quá trình quản lý bạn có thể thêm tên thư mục trước tên model (ví dụ: php artisan make:model Models/Post)

Tên bảng

Quy tắc chung của tên model được sử dụng giống tên bảng, nếu tên model khác tên bảng bạn phải định nghĩa thuộc tính $table như sau:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model

{

protected $table = 'my_post';

}

Khóa chính

Trong Laravel, mỗi bảng model theo mặc định có một khóa chính có tên là id, nó có thể được ghi đè bằng cách sử dụng thuộc tính $primaryKey như sau:

<?php

namespace App; use Illuminate\Database\Eloquent\Model;

class Post extends Model

{

protected $primaryKey = 'id';

}

Timestamp

Trong Laravel, mỗi Eloquent Model được thêm 2 cột (created_atupdated_at) trong tất cả các bảng CSDL, nếu bạn không muốn có những cột này được thêm vào bảng CSDL, thiết lập thuộc tính $timestamps trong model thành false như sau:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model

{

public $timestamps = false;

}

Bài 11: Migrations

Phát triển ứng dụng web là tiến trình lặp đi lặp lại và không thể phủ nhận rằng lược đồ CSDL liên tục thay đổi trong suốt quá trình phát triển. Có những tình huống chúng ta có thể muốn thêm (add) hoặc xóa (drop) bảng, xóa hoặc đổi tên cột, xóa một chỉ mục,... Migrations cung cấp cho bạn một cách để theo dõi các thay đổi chúng ta thực hiện trong lược đồ cơ sở dữ liệu trong quá trình phát triển. Trong môi trường phát triển cộng tác, migrations giúp bạn đồng bộ cơ sở dữ liệu mà không phải xóa bỏ và tạo lại cơ sở dữ liệu mỗi khi có thay đổi.

Chúng ta có thể nghĩ về migrations như một hệ thống kiểm soát phiên bản cho lược đồ cơ sở dữ liệu, nó cho phép chúng ta theo dõi các thay đổi được thực hiện trong lược đồ cơ sở dữ liệu. Bằng cách này, nó đơn giản hóa việc phát triển, triển khai và cập nhật bất kỳ ứng dụng web nào.

Trong Laravel, các file migrations được lưu trữ trong thư mục database/migrations. Các file migration được tạo theo thời gian khi chúng ta xây dựng và thay đổi lược đồ CSDL của ứng dụng. Mỗi file migration chứa tập riêng biệt các thay đổi tới CSDL được liên kết. trong laravel tại bất kỳ thời điểm nào, bạn cũng có thể chuyển đổi hoặc di chuyển sang bất kỳ phiên bản cụ thể nào của mô hình dữ liệu.

Các lệnh Artisan Migration

Laravel có tập các lệnh liên quan đến migration để có thể chạy từ giao diện dòng lệnh artisan.

migrate:install

Lệnh này được sử dụng để tạo bảng migration trong CSDL của ứng dụng, bảng này được sử dụng để theo dõi migrations chắc chắn đã được thực thi.

migrate

Lệnh này được dùng để chạy tất cả các migrations đang chờ.

migrate:make

Lệnh này được sử dụng để tạo một migration mới, migration được tạo mới được lưu trong thư mục database/migrations. Một timestamp (ngày, tháng, năm, giờ,...) sẽ được thêm vào phần đầu của tên file migration, nó cho phép Laravel xác định thứ tự của migrations.

migrare:rollback

Lệnh này được sử dụng để rollback lại migration gần nhất đã được áp dụng.

migrate:reset

Lệnh này được dùng để rollback lại tất cả các migrations đã được áp dụng

migrate:refresh

Lệnh này được dùng để rollback tất cả các migrations CSDL của chúng ta và sau đó tạo lại lược đồ CSDL.

Tạo một Migration cơ sở dữ liệu mới

Bước 1: Trong Laravel, trước khi tạo migration, điều đầu tiên là chạy lệnh sau để tạo bảng migration.

php artisan migrate:install

Khi lệnh thực thi thành công, bạn sẽ được thông báo bảng "migrations" mới đã được tạo trong CSDL.

Bước 2: Chạy lệnh sau để sinh ra một file migration mới. Chúng ta sẽ tạo ra một bảng mới có tên "posts" trong CSDL.

php artisan make:migration create_posts_table --create=posts

Khi lệnh trên thực thi, bạn sẽ thấy file migration mới đã được tạo trong thư mục database/migrations có tên là [timestamp]_create_posts_table.php

Cấu trúc của Migration

Hãy mở file migration mới được sinh ra để xem cấu trúc của nó.

<?php

use Illuminate\Support\Facades\Schema;

use Illuminate\Database\Schema\Blueprint;

use Illuminate\Database\Migrations\Migration;

class CreatePostsTable extends Migration{

/**

* Run the migrations.

*

* @return void

*/

public function up(){

Schema::create('posts', function (Blueprint $table) {

$table->bigIncrements('id');

$table->timestamps();

});

}

/**

* Reverse the migrations.

*

* @return void

*/

public function down(){

Schema::dropIfExists('posts');

}

}

Lưu ý rằng mọi migrations chúng ta đều extends từ class Migration và phải chứa 2 phương thức "up" và "down".

  • up() - Phương thức up() bao gồm tập các thao tác được thực thi khi chạy migration.

  • down() - Phương thức down() gồm tập các thao tác được thực thi khi rollback migration.

Trong ví dụ trên, phương thức up() chứa hàm Schema::create được sử dụng để tạo bảng "posts".

Trong cả hai phương thức trên, chúng ta có thể định nghĩa các thao tác để tạo và thay đổi bảng CSDL sử dụng Laravel schema builder. Trình tạo lược đồ của Laravel cung cấp các hàm để thực hiện mọi thay đổi CSDL mà bạn muốn áp dụng.

Xem đầy đủ hướng dẫn Migration trên hướng dẫn của Laravel

Bước 3: Bổ sung 2 cột titleslug vào bảng posts

<?php

use Illuminate\Support\Facades\Schema;

use Illuminate\Database\Schema\Blueprint;

use Illuminate\Database\Migrations\Migration;

class CreatePostsTable extends Migration

{

/**

* Run the migrations.

*

* @return void

*/

public function up()

{

Schema::create('posts', function (Blueprint $table) {

$table->bigIncrements('id');

$table->string('title');

$table->string('slug');

$table->timestamps();

});

}

/**

* Reverse the migrations.

*

* @return void

*/

public function down()

{

Schema::dropIfExists('posts');

}

}

Bước 4: Cuối cùng, chạy lệnh sau để áp dụng migration vào CSDL

php artisan migrate

Bước 5: Thực thi lệnh thành công, bạn mở CSDL sẽ thấy bảng posts đã được tạo trong CSDL như hình dưới

migration laravel

Bài 12: Views

Trong khung MVC, chữ cái "V" viết tắt của Views. Nó phân tách logic ứng dụng và logic trình bày. Views được lưu trữ trong thư mục resources/views. Nói chung, View chứa HTML, nó sẽ được phục vụ bởi ứng dụng .

Ví dụ

Quan sát ví dụ sau để hiểu thêm về Views:

Bước 1 - Sao chép mã sau đây và lưu nó tại resource/views/test.php

<>

<div>

<h1>Hello, World</h1>

</div>

</>

Bước 2 - Thêm dòng sau vào tệp routes/web.php để đặt routing cho chế độ xem ở trên.

Route::get('/test', function() {

return view('test');

});

Bước 3 - Truy cập URL sau để xem kết quả.

http://localhost:8000/test

Bước 4 - Đầu ra sẽ xuất hiện như trong hình ảnh sau đây.

views laravel

Truyền dữ liệu cho views

Khi xây dựng ứng dụng, có thể phải truyền dữ liệu cho các views. Truyền một mảng đến hàm helper view. Sau khi truyền một mảng, chúng ta có thể sử dụng khóa để lấy giá trị của khóa đó trong tệp HTML.

Ví dụ

Quan sát ví dụ sau để hiểu thêm về việc truyền dữ liệu tới views:

Bước 1 - Sao chép mã sau đây và lưu nó tại resource/views/test.php

<>

<div>

<h1><?php echo $name; ?></h1>

</div>

</>

Bước 2 - Thêm dòng sau vào tệp routes/web.php để đặt routing cho view ở trên.

Route::get('/test', function() {

return view('test',['name'=>'hieulv68']);

});

Bước 3 - Giá trị của tên khóa sẽ được chuyển đến tệp test.php$name sẽ được thay thế bằng giá trị đó.

Bước 4 - Truy cập URL sau để xem kết quả.

http://localhost:8000/test

Bước 5 - Đầu ra sẽ xuất hiện như trong hình ảnh sau đây.

truyền dữ liệu tới view

Chia sẻ dữ liệu với tất cả Views

Chúng ta đã thấy cách chúng ta truyền dữ liệu cho các views nhưng đôi khi cần phải truyền dữ liệu cho tất cả các views. Đối với Laravel điều này là đơn giản. Có một phương thức gọi là share() có thể được sử dụng cho mục đích này. Phương thức share() sẽ lấy hai đối số, khóa và giá trị. Phương thức share() điển hình có thể được gọi từ phương thức boot của service provider. Chúng ta có thể sử dụng bất kỳ service provider nào, AppServiceProvider hoặc service provider riêng của chúng ta.

Ví dụ

Quan sát ví dụ sau để hiểu thêm về việc chia sẻ dữ liệu với tất cả các views

Bước 1 - Thêm dòng sau vào tệp routes/web.php.

Route::get('/test', function() {

return view('test');

});

Route::get('/test2', function() {

return view('test2');

});

Bước 2 - Tạo hai file views - test.phptest2.php với cùng một mã. Đây là hai tập tin sẽ chia sẻ dữ liệu. Sao chép mã sau trong cả hai tập tin. resources/views/test.php & resources/views/test2.php

<>

<div>

<h1><?php echo $name; ?></h1>

</div>

</>

Bước 3 - Thay đổi mã phương thức boot trong app/Providers/AppServiceProvider.php như dưới đây. (Ở đây, chúng ta đã sử dụng phương thức share và dữ liệu mà chúng ta truyền sẽ được chia sẻ với tất cả các views.)

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider

{

/**

* Bootstrap any application services.

*

* @return void

*/

public function boot()

{

view()->share('name', 'hieulv68');

}

/**

* Register any application services.

*

* @return void

*/

public function register()

{

//

}

}

Bước 4 - Truy cập các URL sau.

http://localhost:8000/test

http://localhost:8000/test2

Bước 5 - Đầu ra sẽ xuất hiện như trong hình ảnh sau đây.

truyền dữ liệu tất cả các views trong laravel

Bài 13: Blade Template

Laravel cung cấp concept sử dụng Blade template để cho phép các nhà phát triển tạo và tổ chức các views HTML theo cách rất đơn giản, rõ ràng, nhất quán và thống nhất. Công cụ Blade Template có một tập chỉ thị duy nhất để thiết kế các layout web, nó có thể được include trong các views khác nhau.

Khi so sánh với các công cụ tạo template khác, Blade là tuyệt vời theo các cách sau:

  • Nó không hạn chế nhà phát triển sử dụng mã PHP đơn giản trong các khung nhìn.

  • Các blade views đã thiết kế được biên dịch và được cache cho đến khi chúng bị sửa đổi.

Cấu trúc thư mục đầy đủ của Laravel được hiển thị trong ảnh chụp màn hình được đưa ra ở đây.

blade laravel

Bạn có thể quan sát rằng tất cả các views được lưu trữ trong thư mục resources/views và khung nhìn mặc định cho framework Laravel là welcome.blade.php.

Lưu ý rằng Blade Templates khác cũng được tạo ra tương tự.

Sự khác biệt là trong filename: about.php sẽ được hiển thị bằng PHP engine và about.blade.php sẽ được hiển thị bằng Blade engine. Blade engine là thành phần ngôn ngữ tạo template của Laravel Framework , nó thực thi việc xử lý các HTML views.

Ví dụ

<!– Được lưu trữ trong resources/views/layouts/master.blade.php –>

<>

<head>

<title>App Name – @yield(‘title’)</title>

</head>

<div>

@section(‘sidebar’)

Đây là master sidebar.

@show

<div class=”container”>

@yield(‘content’)

</div>

</div>

</>

Cấu trúc Blade Layout

Tất cả các Blade views trong Laravel được lưu trữ trong thư mục resources/views. Chế độ xem mặc định cho Laravel framework là welcome.blade.php. Các views ứng dụng của Laravel có thể được tổ chức vào các tệp và thư mục:

../resource/view/layout

  • default.blade.php

  • sidebar.blade.php - File này sẽ chứa phần sidebar template HTML.

  • master.blade.php - File này sẽ sử dụng để include các file thành phần ở trên và tạo một master layout template sẽ render trên mỗi yêu cầu của laravel

../resource/view/pages

  • home.blade.php

  • contact.blade.php

../resource/view/includes

  • head.blade.php

  • header.blade.php - File này sẽ chứa phần header HTML template.

  • footer.blade.php - File này sẽ chứa phần footer HTML template.

Các bước để tạo Blade Template Layout & Hiển thị dữ liệu trong Blade views:

Để tạo blade layout mới trong laravel, hãy làm theo các bước dưới đây:

Bước 1 - Định nghĩa một laravel Blade Layout

Giả sử trong trường hợp này, chúng ta sẽ tạo file Master Blade có tên master.blade.php. Tạo một thư mục layouts trong thư mục resources/views. Chúng ta sẽ sử dụng thư mục này để lưu trữ tất cả các layout với nhau.

Đây là file layout Master chứa bố cục chung sẽ được chia sẻ trên tất cả các trang trong ứng dụng.

<!–- Được lưu trữ trong resources/views/layouts/master.blade.php -–>

<>

<head>

<title>App Name – @yield('title')</title>

</head>

<div>

@section('sidebar')

Đây là master sidebar.

@show

<div class="container">

@yield('content')

</div>

</div>

</>

Ở đây, @section@yield là các lệnh (directives) của Laravel Blade template. Lệnh @section xác định một phần của view content, trong khi lệnh @yield được sử dụng để hiển thị nội dung của một phần nhất định. Chúng ta sẽ tìm hiểu sâu hơn về danh sách các lệnh blade được sử dụng khi xác định và sử dụng các views.

Bây giờ chúng ta đã xác định layout cho ứng dụng của mình, hãy để xác định một trang con kế thừa layout.

Bước2 - Sử dụng/Mở rộng Layout Blade

Sau khi xác định layout, bước tiếp theo là xác định layout mà trang con sẽ kế thừa. Mở rộng layout Master sử dụnglệnh @extends của Blade để mở rộng view trong các phần tử con.

MẸO - Các views mở rộng Blade layout có thể đưa nội dung vào các phần của layout bằng cách sử dụng các lệnh @section.

<!–- lưu trữ trong resources/views/child.blade.php -–>

@extends('layouts.master')

@section('title', 'Page Title')

@section('sidebar')

@parent

<p>This is appended to the master sidebar.</p>

@endsection

@section('content')

<p>This is my div content.</p>

@endsection

MẸO - Blade Views mở rộng Blade layout khác (như @extends('layouts.master')) chỉ đơn giản ghi đè các phần từ layout.

Bước 3 - Định nghĩa Routes và trả về Views.

Blade Views có thể được trả về từ routes sử dụng helper view toàn cục:

Route::get('blade', function (){

return view('child');

});

Các lệnh Blade Template

Laravel cung cấp một danh sách các lệnh blade template để xác định layout mới, mở rộng layout, hiển thị dữ liệu trong view, Câu lệnh điều khiển, cấu trúc lặp...

Hiển thị dữ liệu trong blade view

Dữ liệu được chuyển đến blade view từ routes và controller có thể được hiển thị bằng cách sử dụng dấu ngoặc kép {{$biến}}. Ví dụ: routes truyền giá trị của biến name là hieulv68

Route::get('greeting', function () {

return view('welcome', ['name' => 'hieulv68']);

});

Bây giờ, trong file welcome.blade.php, bạn có thể hiển thị nội dung của biến name như sau:

Xin chào, {{ $name }}. Bạn cũng có thể echo kết quả của bất kỳ hàm PHP nào và thậm chí cả đặt code PHP:

timestamp UNIX hiện tại là {{ time() }}.

Bạn cũng có thể hiển thị dữ liệu giống như – Xin chào, {!! $name !!}

Hiển thị dữ liệu JSON trong Blade Views

Đôi khi bạn có thể truyền một mảng vào views với ý định hiển thị nó dưới dạng JSON để khởi tạo một biến JavaScript. Tuy nhiên, thay vì gọi thủ công json_encode, bạn có thể sử dụng lệnh @json Blade:

<script>

var app = @json($array);

</script>

Các lệnh điều khiển Blade

Framework Laravel cung cấp hầu hết tất cả các phím tắt cho các hàm PHP phổ biến, có nghĩa là Blade Template có một tập lệnh rõ ràng và đơn giản giống cấu trúc PHP như câu lệnh điều khiển, vòng lặp, v.v.

Câu lệnh if blade template

Các lệnh if là - Bạn có thể xây dựng các câu lệnh if bằng cách sử dụng các lệnh @if, @elseif, @else và @endif. Các lệnh này hoạt động tương tự như các câu lệnh PHP.

@if (count($records) === 5)

// There are 5 records!

@elseif (count($records) > 1)

// I have multiple records!

@else

// I don’t have any records!

@endif

Câu lệnh switch blade:

Công cụ Laravel Blade cung cấp một tập hợp các câu lệnh Switch đặc biệt có thể được xây dựng bằng cách sử dụng các lệnh @switch, @case, @break, @default và @endswitch:

@switch($i)

@case(1)

First case…

@break

@case(2)

Second case…

@break

@default

Default case…

@endswitch

Xác thực giá trị trước khi hiển thị

Các lệnh @isset()@empty() được sử dụng để kiểm tra biến trước khi hiển thị.

@isset($records)

// $records is defined and is not null…

@endisset

@empty($records)

// $records is “empty”…

@endempty

Lệnh xác thực Blade

Trước khi hiển thị một phần của view, trước tiên chúng ta cần kiểm tra xem người dùng hiện tại có được xác thực hay người dùng khách (không được xác thực). Laravel có lệnh để kiểm tra tương tự. Các lệnh @auth và @guest có thể được sử dụng để nhanh chóng xác định xem người dùng hiện tại có được xác thực hay là khách:

@auth

// The user is authenticated…

@endauth

@guest

// The user is not authenticated…

@endguest

Lệnh @section và @yield

Lệnh @section xác định một phần nội dung, trong khi lệnh @yield được sử dụng để hiển thị nội dung của một phần nhất định.

@section('student.exam.content')

<p>This is an item of type {{ $item->type }}</p>

@endsection

Lệnh @hasSection được sử dụng để kiểm tra xem một phần có nội dung hay không. Nếu phần tồn tại, hiển thị nó nó.

@hasSection('navigation')

<div class="pull-right">

@yield('navigation')

</div>

<div class="clearfix"></div>

@endif

Vòng lặp

Đồng nhất với các câu lệnh lặp PHP, Blade template cũng cung cấp các lệnh vòng lặp rất đơn giản và rõ ràng.

@for ($i = 0; $i < 10; $i++)

The current value is {{ $i }}

@endfor

@foreach ($users as $user)

<p>This is user {{ $user->id }}</p>

@endforeach

@forelse ($users as $user)

<li>{{ $user->name }}</li>

@empty

<p>No users</p>

@endforelse

@while (true)

<p>Endless loop!!</p>

@endwhile

Lệnh @continue và @break

Khi sử dụng các vòng lặp, bạn cũng có thể kết thúc vòng lặp hoặc bỏ qua bước lặp hiện tại:

@foreach ($users as $user)

@if ($user->type == 1)

@continue

@endif

<li>{{ $user->name }}</li>

@if ($user->number == 5)

@break

@endif

@endforeach

Thêm comment Blade:

Giống như comment HTML <-! Đây là comment -> Laravel có một lệnh đặc biệt để thêm comment.

{{- Comment này sẽ không xuất hiện trong render HTML -}}

Thêm các mã PHP đơn giản trong Blade:

Mã PHP có thể được nhúng vào các Blade view bằng cách sử dụng lệnh @php.

@php

//This is PHP code

@endphp

Nhúng các views con sử dụng Blade

Blade view có thể được nhúng trong view khác. Khi kế thừa view, tất cả các biến có sẵn trong view chính cũng sẽ có sẵn trong view con. Lệnh @include cho phép bạn nhúng Blade view từ bên trong view khác.

<div>

@include(‘student.exam’)

<form>

<!– Form Contents –>

</form>

</div>

MẸO - Nếu bạn cố gắng @include một view không tồn tại, Laravel sẽ đưa ra lỗi.

Nếu bạn muốn nhúng một view có thể có hoặc không có, bạn nên sử dụng lệnh @includeif:

Bài 14: Cookie

Cookies đóng vai trò quan trọng trong khi xử lý phiên người dùng trên ứng dụng web. Trong bài này, bạn sẽ tìm hiểu về cách làm việc với cookie trong các ứng dụng web dựa trên Laravel.

Cookie có thể được tạo bởi global cookie helper của Laravel. Đây là một thể hiện của Symfony\Component\HttpFoundation\Cookie. Cookie có thể được đính kèm với phản hồi bằng phương thức withCookie(). Tạo một thể hiện phản hồi của lớp Illuminate\Http\Response để gọi phương thức withCookie(). Cookie được tạo bởi Laravel được mã hóa và ký tên và nó không thể sửa đổi hoặc đọc bởi client.

Đây là một code mẫu kèm theo giải thích.

//Tạo thể hiện response

$response = new Illuminate\Http\Response('Hello World');

//Gọi phương thức withCookie() với phương thức response

$response->withCookie(cookie('name', 'value', $minutes));

//trả về response

return $response;

Phương thức Cookie() sẽ có 3 đối số. Đối số đầu tiên là tên của cookie, đối số thứ hai là giá trị của cookie và đối số thứ ba là thời lượng của cookie mà sau đó cookie sẽ tự động bị xóa.

Cookie có thể được đặt mãi mãi bằng cách sử dụng phương thức forever như được hiển thị trong đoạn mã dưới đây.

$response->withCookie(cookie()->forever('name', 'value'));

Khi chúng ta thiết lập cookie, chúng ta có thể truy xuất cookie bằng phương thức cookie(). Phương thức cookie() này sẽ chỉ lấy một đối số là tên của cookie. Phương thức cookie có thể được gọi bằng cách sử dụng thể hiện của Illuminate\Http\Request.

Đây là code mẫu.

//’name’ là tên của cookie để truy xuất giá trị

$value = $request->cookie('name');

Ví dụ

Quan sát ví dụ sau để hiểu thêm về Cookies:

Bước 1 - Thực hiện lệnh dưới đây để tạo controller trong đó chúng ta sẽ thao tác với cookie.

php artisan make:controller CookieController

Bước 2 - Sao chép mã sau vào file app/Http/Controllers/CookieController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use Illuminate\Http\Response;

use App\Http\Requests;

use App\Http\Controllers\Controller;

class CookieController extends Controller {

public function setCookie(Request $request) {

$minutes = 1;

$response = new Response('Hello World');

$response->withCookie(cookie('name', 'hieulv68', $minutes));

return $response;

}

public function getCookie(Request $request) {

$value = $request->cookie('name');

echo $value;

}

}

Bước 3 - Thêm dòng sau vào file routes/web.php.

Route::get('/cookie/set','CookieController@setCookie');

Route::get('/cookie/get','CookieController@getCookie');

Bước 4 - Truy cập URL sau để thiết lập cookie.

http://localhost:8000/cookie/set

Bước 5 - Đầu ra sẽ xuất hiện như hình dưới đây. Cửa sổ xuất hiện trong ảnh chụp màn hình được lấy từ Chrome nhưng tùy thuộc vào trình duyệt của bạn.

cookie laravel

Bước 6 - Truy cập URL sau để lấy cookie từ URL trên.

http://localhost:8000/cookie/get

Bước 7 - Đầu ra sẽ xuất hiện như hình ảnh dưới đây.

get cookie laravel

Bài 15: Sessions

Trong Laravel, session là một cơ chế truyền tham số, nó cho phép chúng ta lưu trữ dữ liệu thông qua các request. Session cho phép chúng ta lưu vết người dùng thông qua ứng dụng. Laravel sử dụng hệ thống dựa trên trình điều khiển cho quản lý session, mỗi trình điều khiển được sử dụng để định nghĩa nơi dữ liệu session được lưu trữ. Framework Laravel có các trình điều khiển session như sau:

  • file – Dữ liệu session được lưu trữ trong file mã hóa đặt tại storage/framework/session.

  • cookie – Dữ liệu session được lưu trữ trong cookie của người dùng an toàn và được bảo mật.

  • database – Dữ liệu session được lưu trữ trong database của ứng dụng.

  • apc – Dữ liệu session được lưu trữ trong APC.

  • memcached – Dữ liệu session được lưu trữ trong Memcached.

  • redis – Dữ liệu session được lưu trữ trong Redis.

  • array – Dữ liệu session được lưu trữ trong mảng PHP.

File cấu hình session Laravel được đặt tại “app/config/session.php”. Nếu bạn không chỉ định trình điều khiển session thì trình điều khiển file được sử dụng mặc định.

Lưu trữ dữ liệu trong session

Sử dụng phương thức put của thể hiện Request chúng ta có thể lưu trữ dữ liệu trong session. Nó chấp nhận cả hai đối sô “key” và “value”.

Cú pháp:

$request->session()->put('key', 'value');

Ví dụ:

$request->session()->put('name', 'hieulv68');

Truy hồi (lấy) giá trị session

Sử dụng phương thức get của thể hiện Request chúng ta có thể truy hồi giá trị đơn từ session. Nó chấp nhận cả hai đối sô “key_name” và “default_value”.

Cú pháp:

$value = $request->session()->get('key_name');

HOẶC

$value = $request->session()->get('key_name', 'default_name');

Đối số thứ hai của phương thức get là giá trị mặc định, nó sẽ được trả về nếu bạn chỉ định key không tồn tại trong session.

Ví dụ:

$name = $request->session()->get('name' );

Truy hồi tất cả dữ liệu session

Sử dụng phương thức all của thể hiện request chúng ta có thể truy hồi tất cả dữ liệu sẵn có trong session.

$all_data = $request->session()->all();

Kiểm tra sự tồn tại của session

Sử dụng phương thức has bạn có thể kiểm tra một giá trị có tồn tại trong session hay không. Nó trả về true nếu có tồn tại, ngược lại trả về null.

Cú pháp:

if($request->session()->has('key_name')){

//

}

Ví dụ:

if($request->session()->has('name')){

// lệnh thực thi nếu name tồn tại

}

Xóa dữ liệu từ session

Sử dụng phương thức forget bạn có thể loại bỏ item được chỉ định từ session. Nó chấp nhận “key” là đối số.

Cú pháp

$request->session->forget('key');

Nếu bạn muốn truy hồi một giá trị item trước khi xóa nó từ session, bạn có thể sử dụng phương thức pull.

Cú pháp

$value = $request->session->pull('key', 'default');

Nếu bạn muốn xóa tất cả item từ session, bạn có thể thực hiện bằng cách sử dụng phương thức flush.

Cú pháp

$request->session->flush();

Thêm mảng vào session

Nếu bạn muốn thêm mảng vào session, bạn có thể thực hiện bằng cách sử dụng phương thức push như sau:

Cú pháp

$request->session->push('key', $arr_var);

Ví dụ:

$usr = array("name"=>"hieulv68", "email"=>"[email protected]", "ID"=>"123");

$request->session()->push('user_info', $usr);

Sinh ra session ID

Nếu bạn muốn sinh ra session ID, bạn có thể sử dụng phương thức regenerate.

$request->session()->regenerate();

Dữ liệu flash

Nếu bạn muốn lưu trữ các item trong session với mục đích sẽ xuất hiện chỉ cho lần request tiếp theo. Bạn có thể thực hiện nó bằng cách sử dụng phương thức flash, dữ liệu flash là sẵn có chỉ cho request HTTP tiếp theo và sau đó sẽ bị xóa.

Cú pháp:

$request->session()->flash('key', 'value');

Ví dụ:

$request->session()->flash('status', 'Nhiệm vụ đã được thực hiện thành công');

Bài 16: Điều hướng (redirection)

Named route được sử dụng để chỉ định tên cho một route. Tên có thể được gán sử dụng khóa mảng “as”.

Route::get('user/profile', ['as' => 'profile', function () {

//

}]);

Chú ý − Ở đây, chúng ta đã đưa ra một tên profile tới một route user/profile.

Điều hướng tới Named Routes

Quan sát ví dụ sau để hiểu thêm về điều hướng tới named routes:

Bước 1 – Tạo một view đặt tên test.php và lưu nó tại resources/views/test.php.

<>

<div>

<h1>Ví dụ điều hướng tới Named Routes</h1>

</div>

</>

Bước 2 − Trong routes/web.php, chúng ta thiết lập route cho file test.php. Chúng ta đổi tên nó thành testing. Chúng ta cũng thiết lập route khác là redirect, nó sẽ điều hướng request đến named route testing.

Routes/web.php

Route::get('/test', ['as'=>'testing',function() {

return view('test2');

}]);

Route::get('redirect',function() {

return redirect()->route('testing');

});

Bước 3 – Mở trình duyệt, nhập URL để kiểm tra ví dụ named route.

http://localhost:8000/redirect

Bước 4 – Sau khi thực thi URL ở trên, bạn sẽ được điều hướng tới http://localhost:8000/test vì chúng ta đang điều hướng tới named route testing.

Bước 5 – Sau khi thực thi thành công, bạn sẽ nhận được output như sau:

redirection laravel

Điều hướng tới các action của controller

Chúng ta không chỉ điều hướng named route mà cũng có thể điều hướng tới các action của controller. Chúng ta cần truyền controller và tên của action cho phương thức action như hiển thị ở ví dụ bên dưới. Nếu bạn muốn truyền tham số, bạn có thể truyền nó ở đối số thứ hai của phương thức action.

return redirect()-> action(‘Tên_của_Controller@tên_phương_thức’,[các_tham_số]);

Ví dụ

Bước 1 – Thực thi lệnh để tạo một controller có tên RedirectController.

php artisan make:controller RedirectController

Bước 2 − Copy mã lệnh sau vào file app/Http/Controllers/RedirectController.php.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class RedirectController extends Controller

{

public function index() {

echo "Điều hướng tới action của controller.";

}

}

Bước 3 – Thêm dòng mã sau vào routes/web.php.

Route::get('rr','RedirectController@index');

Route::get('/redirectcontroller',function() {

return redirect()->action('RedirectController@index');

});

Bước 5 – Mở trình duyệt và gõ URL sau để kiểm tra ví dụ.

http://localhost:8000/redirectcontroller

Bước 6 – Output sẽ xuất hiện như ảnh sau.

redirect laravel

Bài 17: Làm việc với Cơ sở dữ liệu

Laravel hỗ trợ xử lý với cơ sở dữ liệu rất dễ dàng. Laravel hiện hỗ trợ 4 cơ sở dữ liệu sau:

  • MySQL

  • Postgres

  • SQLite

  • SQL Server

Truy vấn cơ sở dữ liệu có thể được kích hoạt bằng SQL thô, trình xây dựng truy vấn fluent và ORM Eloquent. Để hiểu tất cả các thao tác CRUD (Create, Read, Update, Delete) với Laravel, chúng ta sẽ sử dụng hệ thống quản lý sinh viên đơn giản.

Kết nối với cơ sở dữ liệu

Cấu hình cơ sở dữ liệu trong file config/database.php hoặc .env và tạo cơ sở dữ liệu đại học có cấu trúc trong MySQL như trong bảng sau.

Cơ sở dữ liệu: college

Bảng: student

csdl

Chúng ta sẽ tìm hiểu cách thêm, xóa, cập nhật và truy xuất các bản ghi từ cơ sở dữ liệu bằng cách sử dụng Laravel trong bảng student.

Làm việc với CSDL – Insert

Chúng ta có thể chèn bản ghi bằng cách sử dụng DB facade với phương thức insert.

Cú pháp

bool insert(string $query, array $bindings = array())

Các tham số

  • $query(string) − truy vấn để thực thi trong cơ sở dữ liệu

  • $bindings(array) − các giá trị để bind với các truy vấn

Trả về

bool

Mô tả

Chạy một câu lệnh insert vào cơ sở dữ liệu

Ví dụ

Bước 1: Thực thi lệnh sau để tạo controller có tên StudInsertController

php artisan make:controller StudInsertController

Bước 2: Viết mã sau vào file StudInsertController

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use DB;

class StudInsertController extends Controller

{

public function insertform() {

return view('stud_create');

}

public function insert(Request $request) {

$name = $request->input('stud_name');

DB::insert('insert into student (name) values(?)',[$name]);

echo "Thêm dữ liệu thành công.<br/>";

echo '<a href = "/insert">Nhấp vào đây</a> để quay lại.';

}

}

Bước 3: Tạo file view có tên resources/views/stud_create.php và viết mã lệnh sau:

<>

<head>

<title>Student Management | Add</title>

</head>

<div>

<form action = "/create" method = "post">

<input type = "hidden" name = "_token" value = "<?php echo csrf_token(); ?>">

<table>

<tr>

<td>Tên</td>

<td><input type='text' name='stud_name' /></td>

</tr>

<tr>

<td colspan = '2'>

<input type = 'submit' value = "Thêm sinh viên"/>

</td>

</tr>

</table>

</form>

</div>

</>

Bước 4: Thêm mã lệnh sau vào routes/web.php

Route::get('insert','StudInsertController@insertform');

Route::post('create','StudInsertController@insert');

Bước 5: Mở trình duyệt, nhập URL để insert bản ghi vào CSDL.

http://localhost:8000/insert

Bước 6: Output sẽ xuất hiện như hình dưới đây:

insert laravel

Làm việc với CSDL – Select

Sau khi cấu hình CSDL, chúng ta có thể truy xuất các bản ghi sử dụng DB facade với phương thức select. Cú pháp của phương thức select như sau:

Cú pháp

array select(string $query, array $bindings = array())

Các tham số

  • $query(string) − truy vấn để thực thi trong CSDL.

  • $bindings(array) − các giá trị được bind vào truy vấn

Trả về

Mảng

Mô tả

Chạy câu lệnh select trong CSDL

Ví dụ

Bước 1: Thực thi lệnh sau để tạo controller có tên StudViewController

php artisan make:controller StudViewController

Bước 2: Viết mã lệnh sau vào app/Http/Controllers/StudViewController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use DB;

class StudViewController extends Controller

{

public function index() {

$users = DB::select('select * from student');

return view('stud_view',['users'=>$users]);

}

}

Bước 3: Tạo file view có tên resources/views/stud_view.blade.php và viết mã sau vào file

<>

<head>

<title>Hiển thị danh sách sinh viên</title>

</head>

<div>

<table border = 1>

<tr>

<td>ID</td>

<td>Tên</td>

</tr>

@foreach ($users as $user)

<tr>

<td>{{ $user->id }}</td>

<td>{{ $user->name }}</td>

</tr>

@endforeach

</table>

</div>

</>

Bước 4: Thêm mã sau vào routes/web.php

Route::get('view-records','StudViewController@index');

Bước 5: Mở trình duyệt, nhập URL để xem các bản ghi từ CSDL

http://localhost:8000/view-records

Bước 6: Output sẽ xuất hiện như hiển thị ở ảnh dưới đây.

select laravel

Làm việc với CSDL – Update

Chúng ta có thể cập nhật các bản ghi sử dụng DB facade với phương thức update. Cú pháp của phương thức update như sau:

Cú pháp

int update(string $query, array $bindings = array())

Các tham số

  • $query(string) – truy vấn để thực thi CSDL

  • $bindings(array) – các giá trị để bind vào truy vấn

Trả về

int

Mô tả

Chạy câu lệnh update trong CSDL

Ví dụ

Bước 1: Thực thi lệnh sau để tạo controller có tên StudUpdateController

php artisan make:controller StudUpdateController

Bước 2: Viết mã lệnh sau vào app/Http/Controllers/StudUpdateController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use DB;

class StudUpdateController extends Controller

{

public function index() {

$users = DB::select('select * from student');

return view('stud_edit_view',['users'=>$users]);

}

public function show($id) {

$users = DB::select('select * from student where id = ?',[$id]);

return view('stud_update',['users'=>$users]);

}

public function edit(Request $request,$id) {

$name = $request->input('stud_name');

DB::update('update student set name = ? where id = ?',[$name,$id]);

echo "Cập nhật thành công.<br/>";

echo '<a href = "/edit-records">Nhấp đây</a> để quay lại.';

}

}

Bước 3: Tạo file view có tên resources/views/stud_edit_view.blade.php và viết mã sau vào file

<>

<head>

<title>Danh sách sinh viên</title>

</head>

<div>

<table border = "1">

<tr>

<td>ID</td>

<td>Tên</td>

<td>Sửa</td>

</tr>

@foreach ($users as $user)

<tr>

<td>{{ $user->id }}</td>

<td>{{ $user->name }}</td>

<td><a href = 'edit/{{ $user->id }}'>Sửa</a></td>

</tr>

@endforeach

</table>

</div>

</>

Bước 4: Tạo file view khác có tên resources/views/stud_update.php và viết mã lệnh sau:

<>

<head>

<title>Quản lý sinh viên | Sửa</title>

</head>

<div>

<form action = "/edit/<?php echo $users[0]->id; ?>" method = "post">

<input type = "hidden" name = "_token" value = "<?php echo csrf_token(); ?>">

<table>

<tr>

<td>Tên</td>

<td>

<input type = 'text' name = 'stud_name' value = '<?php echo $users[0]->name; ?>'/>

</td>

</tr>

<tr>

<td colspan = '2'>

<input type = 'submit' value = "Sửa sinh viên" />

</td>

</tr>

</table>

</form>

</div>

</>

Bước 5: Thêm mã sau vào routes/web.php

Route::get('edit-records','StudUpdateController@index');

Route::get('edit/{id}','StudUpdateController@show');

Route::post('edit/{id}','StudUpdateController@edit');

Bước 6: Mở trình duyệt, nhập URL để xem các bản ghi từ CSDL

http://localhost:8000/edit-records

Bước 7: Output sẽ xuất hiện như hiển thị ở ảnh dưới đây.

update laravel

Bước 8: Nhấp vào liên kết sửa và bạn sẽ được điều hướng tới trang sửa sinh viên.

Bước 9: Output sẽ xuất hiện như hình sau:

update laravel

Bước 10: Sau khi sửa bản ghi, bạn sẽ nhận được thông báo hiển thị như ảnh dưới đây.

update laravel

Làm việc với CSDL – Delete

Chúng ta có thể xóa các bản ghi sử dụng DB facade với phương thức delete. Cú pháp của phương thức delete như sau:

Cú pháp

int delete(string $query, array $bindings = array())

Các tham số

  • $query(string) – truy vấn để thực thi CSDL

  • $bindings(array) – các giá trị để bind vào truy vấn

Trả về

int

Mô tả

Chạy câu lệnh delete trong CSDL

Ví dụ

Bước 1: Thực thi lệnh sau để tạo controller có tên StudDeleteController

php artisan make:controller StudDeleteController

Bước 2: Viết mã lệnh sau vào app/Http/Controllers/StudDeleteController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use DB;

class StudDeleteController extends Controller

{

public function index() {

$users = DB::select('select * from student');

return view('stud_delete_view',['users'=>$users]);

}

public function destroy($id) {

DB::delete('delete from student where id = ?',[$id]);

echo "Xóa dữ liệu thành công.<br/>";

echo '<a href = "/delete-records">Nhấp đây</a> để quay lại.';

}

}

Bước 3: Tạo file view có tên resources/views/stud_delete_view.blade.php và viết mã sau vào file

<>

<head>

<title>Danh sách sinh viên</title>

</head>

<div>

<table border = "1">

<tr>

<td>ID</td>

<td>Tên</td>

<td>Hành động</td>

</tr>

@foreach ($users as $user)

<tr>

<td>{{ $user->id }}</td>

<td>{{ $user->name }}</td>

<td><a href = 'delete/{{ $user->id }}'>Xóa</a></td>

</tr>

@endforeach

</table>

</div>

</>

Bước 4: Thêm mã sau vào routes/web.php

Route::get('delete-records','StudDeleteController@index');

Route::get('delete/{id}','StudDeleteController@destroy');

Bước 5: Mở trình duyệt, nhập URL để xem các bản ghi từ CSDL

http://localhost:8000/delete-records

Bước 6: Output sẽ xuất hiện như hiển thị ở ảnh dưới đây.

delete laravel

Bước 7: Nhấp vào liên kết "Xóa" để xóa bản ghi trong CSDL, bạn sẽ được điều hướng tới trang xóa sinh viên. Output sẽ xuất hiện như hình sau:

delete laravel

Bước 8: Nhấp vào liên kết “Nhấp đây”, bạn sẽ được điều hướng về trang danh sách sinh viên.

delete laravel

Bài 18: Form

Laravel cung cấp nhiều thẻ tích hợp khác nhau để xử lý các form HTML một cách dễ dàng và an toàn. Tất cả các phần tử chính của HTML được tạo bằng cách sử dụng Laravel. Để hỗ trợ điều này, chúng ta cần thêm gói HTML vào Laravel bằng composer.

Ví dụ 1

Bước 1: Thực thi lệnh sau để thêm gói HTML

composer require laravelcollective/

Bước 2: Lệnh trên sẽ thêm gói HTML vào Laravel như hiển thị ở hình dưới đây.

laravelcollective-

Bước 3: Bây giờ, chúng ta cần thêm gói trên vào file cấu hình Laravel, nó được lưu trữ tại config/app.php. Mở file này và bạn sẽ thấy danh sách các provider dịch vụ của Laravel như hiển thị ở ảnh bên dưới. Thêm provider dịch vụ HTML như phần đánh dấu trong ảnh dưới.

 package laravel

Bước 4: Thêm các bí danh (alliases) trong cùng file ccho HTML và Form. Chú ý 2 dòng được khoanh vùng trong ảnh dưới.

 package laravel

Bước 5: Bây giờ mọi thứ đã được cài đặt. Hãy xem chúng ta có thể sử dụng các phần tử HTML khác nhau sử dụng các thẻ Laravel.

Mở một Form

{{ Form::open(array('url' => 'foo/bar')) }}

//

{{ Form::close() }}

Tạo một phần tử Label

echo Form::label('email', 'E-Mail Address');

Tạo một Text Input

echo Form::text('username');

Chỉ định giá trị mặc đinh

echo Form::text('email', '[email protected]');

Tạo một Password Input

echo Form::password('password');

Tạo một File Input

echo Form::file('image');

Tạo một Checkbox hoặc Radio Input

echo Form::checkbox('name', 'value');

echo Form::radio('name', 'value');

Tạo một Checkbox hoặc Radio Input đã được check

echo Form::checkbox('name', 'value', true);

echo Form::radio('name', 'value', true);

Tạo một Drop-Down List

echo Form::select('size', array('L' => 'Large', 'S' => 'Small'));

Tạo một nút Submit

echo Form::submit('Click Me!');

Ví dụ 2

Bước 1: Tạo file view có tên resources/views/form.php và viết mã lệnh như sau

<>

<div>

<?php

echo Form::open(array('url' => 'foo/bar'));

echo Form::text('username','Username');

echo '<br/>';

echo Form::text('email', '[email protected]');

echo '<br/>';

echo Form::password('password');

echo '<br/>';

echo Form::checkbox('name', 'value');

echo '<br/>';

echo Form::radio('name', 'value');

echo '<br/>';

echo Form::file('image');

echo '<br/>';

echo Form::select('size', array('L' => 'Large', 'S' => 'Small'));

echo '<br/>';

echo Form::submit('Click Me!');

echo Form::close();

?>

</div>

</>

Bước 2: Thêm mã lệnh sau vào routes/web.php để thêm một route cho view form.php

Route::get('/form',function() {

return view('form');

});

Bước 3: Mở trình duyệt, nhập URL để xem form

http://localhost:8000/form

Bước 4: Output sẽ xuất hiện như ảnh dưới đây

view form

Bài 19: Xác thực dữ liệu (Validation)

Validation là thành phần quan trọng nhất khi thiết kế một ứng dụng. Nó xác nhận dữ liệu đến. Theo mặc định, lớp controller cơ sở sử dụng một đặc điểm của ValidatesRequests, nó cung cấp một phương thức thuận tiện để xác thực các yêu cầu HTTP đến với nhiều quy tắc xác thực mạnh mẽ.

Các quy tắc validation có sẵn trong Laravel

Laravel sẽ luôn kiểm tra các lỗi trong dữ liệu phiên và tự động liên kết chúng với view nếu chúng sẵn có. Vì vậy, điều quan trọng cần lưu ý là biến $error sẽ luôn có sẵn trong tất cả các view của bạn trên mỗi yêu cầu. Bảng sau đây hiển thị tất cả các quy tắc xác thực có sẵn trong Laravel.

Các quy tắc validation có sẵn trong Laravel

validation laravel

Biến $errors sẽ là một thể hiện của Illuminate\Support\MessageBag. Thông báo lỗi có thể được hiển thị trong file view bằng cách thêm mã như dưới đây.

@if (count($errors) > 0)

<div class = "alert alert-danger">

<ul>

@foreach ($errors->all() as $error)

<li>{{ $error }}</li>

@endforeach

<ul>

</div>

@endif

Ví dụ

Bước 1: Tạo một controller có tên ValidationController bằng cách thực thi lệnh sau:

php artisan make:controller ValidationController

Bước 2: Viết mã lệnh sau vào file app/Http/Controllers/ValidationController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class ValidationController extends Controller

{

public function showform() {

return view('login');

}

public function validateform(Request $request) {

print_r($request->all());

$this->validate($request,[

'username'=>'required|max:8',

'password'=>'required'

],

[

'required' => ':attribute không được để trống',

'max' => ':attribute có tối đa :max ký tự'

],

[

'username' => 'Tên đăng nhập',

'password' => 'Mật khẩu'

]);

}

}

Bước 4: Tạo file view có tên resources/views/login.blade.php và viết mã lệnh như sau:

<>

<head>

<title>Login Form</title>

</head>

<div>

@if (count($errors) > 0)

<div style="color: red">

<ul>

@foreach ($errors->all() as $error)

<li>{{ $error }}</li>

@endforeach

</ul>

</div>

@endif

<?php

echo Form::open(array('url'=>'/validation'));

?>

<table border = '1'>

<tr>

<td align = 'center' colspan = '2'>Đăng nhập</td>

</tr>

<tr>

<td>Tên đăng nhập</td>

<td><?php echo Form::text('username'); ?></td>

</tr>

<tr>

<td>Mật khẩu</td>

<td><?php echo Form::password('password'); ?></td>

</tr>

<tr>

<td align = 'center' colspan = '2'>

<?php echo Form::submit('Đăng nhập'); ?>

</td>

</tr>

</table>

<?php

echo Form::close();

?>

</div>

</>

Bước 5: Thêm mã sau vào routes/web.php

Route::get('/validation','ValidationController@showform');

Route::post('/validation','ValidationController@validateform');

Bước 6: Không nhập gì vào 2 ô textbox và nhấp vào nút "Đăng nhập". output sẽ hiển thị như ảnh sau:

login validation laravel

Bài 20: Đa ngôn ngữ (Localization)

Tính năng Localization của Laravel hỗ trợ các ngôn ngữ khác nhau được sử dụng trong ứng dụng. Bạn cần lưu trữ tất cả các chuỗi ngôn ngữ khác nhau trong một file và các file này được lưu trữ trong thư mục resources/lang. Bạn nên tạo một thư mục riêng cho mỗi ngôn ngữ được hỗ trợ. Tất cả các file ngôn ngữ sẽ trả về một mảng các chuỗi khóa như dưới đây.

<?php

return [

'welcome' => 'Welcome to the application'

];

Ví dụ

Bước 1: Tạo 3 file ngôn ngữ Vietnam, English, French. Lưu file Vietnam tại resources/lang/vi/lang.php

<?php

return [

'msg' => 'Ví dụ đa ngôn ngữ Laravel.'

];

?>

Bước 2: Lưu file English tại resources/lang/en/lang.php

<?php

return [

'msg' => 'Laravel Internationalization example.'

];

?>

Bước 2: Lưu file French tại resources/lang/fr/lang.php

<?php

return [

'msg' => 'Exemple Laravel internationalisation.'

];

?>

Bước 4: Tạo controller có tên LocalizationController bằng cách thực thi lệnh sau:

php artisan make:controller LocalizationController

Bước 5: Viết mã lệnh sau vào file app/Http/Controllers/LocalizationController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class LocalizationController extends Controller {

public function index(Request $request,$locale) {

//Thiết lập vị trí của ứng dụng

app()->setLocale($locale);

//Lấy thông điệp đã dịch và hiển thị nó

echo trans('lang.msg');

}

}

Bước 6: Thêm route cho LocalizationController trong file routes/web.php. Chú ý rằng, chúng ta truyền đối số {locale} sau localization/, nó chính là cái chúng ta sẽ sử dụng để thấy output trong ngôn ngữ khác nhau.

Route::get('localization/{locale}','LocalizationController@index');

Bước 7: Bây giờ, hãy mở trình duyệt và nhập các URL khác nhau để xem các ngôn ngữ khác nhau. Đầu tiên chúng ta hiển thị ngôn ngữ tiếng Việt.

http://localhost:8000/localization/vi

Bước 8: Output sẽ xuất hiện như hình sau:

lang-vi

Bước 9: Thực thi URL sau để xem ngôn ngữ tiếng Anh

http://localhost:8000/localization/en

Bước 10: Output sẽ xuất hiện như hình sau:

lang-en

Bước 11: Thực thi URL sau để xem ngôn ngữ tiếng Pháp

http://localhost:8000/localization/fr

Bước 12: Output sẽ xuất hiện như hình sau:

lang-fr

Bài 21: Upload file

Upload file trong Laravel rất dễ dàng. Tất cả những gì chúng ta cần làm là tạo một file view trong đó người dùng có thể chọn một file để upload và một controller để xử lý các file được upload.

Trong file view, chúng ta cần tạo một file input bằng cách thêm mã sau:

Form::file('file_name');

Trong Form::open(), chúng ta cần thêm '/files'=>true như ở dưới. Nó giúp form được upload nhiều phần.

Form::open(array('url' => '/uploadfile','/files'=>'true'));

Ví dụ

Bước 1: Tạo file view có tên resources/views/uploadfile.php và viết mã lệnh dưới đây trong file đó.

<>

<div>

<?php

echo Form::open(array('url' => '/uploadfile','/files'=>'true'));

echo 'Chọn file để upload.';

echo Form::file('image');

echo Form::submit('Upload File');

echo Form::close();

?>

</div>

</>

Bước 2: Tạo controller có tên UploadFileController bằng cách thực thi lệnh sau:

php artisan make:controller UploadFileController

Bước 3: Viết mã sau trong file app/Http/Controllers/UploadFileController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UploadFileController extends Controller {

public function index() {

return view('uploadfile');

}

public function showUploadFile(Request $request) {

$file = $request->file('image');

//Hiển thị tên file

echo 'tên file: '.$file->getClientOriginalName();

echo '<br>';

//Hiển thị đuôi mở rộng của file

echo 'Đuôi mở rộng: '.$file->getClientOriginalExtension();

echo '<br>';

//Hiển thị đường dẫn thực của file

echo 'Đường dẫn thực: '.$file->getRealPath();

echo '<br>';

//Hiển thị kích cỡ file

echo 'Kích cỡ: '.$file->getSize();

echo '<br>';

//Hiển thị Mine Type của file

echo 'File Mime Type: '.$file->getMimeType();

//Di chuyển file đến thư mục uploads

$destinationPath = 'uploads';

$file->move($destinationPath,$file->getClientOriginalName());

}

}

Bước 5: Thêm dòng sau vào routes/web.php

Route::get('/uploadfile','UploadFileController@index');

Route::post('/uploadfile','UploadFileController@showUploadFile');

Bước 6: Nhập URL dưới đây để kiểm tra chức năng upload file

http://localhost:8000/uploadfile

Bước 7: Bạn sẽ nhận được kết quả như ảnh dưới đây.

upload file laravel

Bài 22: Gửi mail

Laravel sử dụng thư viện miễn phí SwiftMailer để gửi email. Sử dụng hàm library, chúng ta có thể dễ dàng gửi email mà không gặp quá nhiều rắc rối. Các templates e-mail được nạp theo cùng một cách với views, có nghĩa là bạn có thể sử dụng cú pháp Blade và đưa dữ liệu vào các templates của mình.

Bảng sau đây chỉ ra cú pháp và thuộc tính của hàm send:

Cú pháp

void send(string|array $view, array $data, Closure|string $callback)

Các tham số

  • $view(string|array) - tên của view chứa thông điệp email

  • $data(array) - Mảng dữ liệu truyền tới view

  • $callback - một callback Closure nhận thể hiện message, cho phép bạn tùy chỉnh người nhận, chủ đề và các thành phần khác của thông điệp mail.

Returns

Không có

Mô tả

Gửi email

Trong đối số thứ ba, $callback nhận thể hiện message và vdới thể hiện đó, chúng ta có thể gọi các hàm sau đây:

Một số phương thức ít phổ biến hơn bao gồm:

Để đính kèm file, bạn có thể sử dụng các phương thức sau:

  • $message → attach('path/to/attachment.txt');

  • $message → embed('path/to/attachment.jpg');

Thư có thể được gửi dưới dạng HTML hoặc văn bản. Bạn có thể chỉ ra loại thư mà bạn muốn gửi trong đối số đầu tiên bằng cách chuyển một mảng như hiển thị bên dưới. Loại mặc định là HTML. Nếu bạn muốn gửi thư văn bản đơn giản thì hãy sử dụng cú pháp sau.

Cú pháp

Mail::send([‘text’=>’text.view’], $data, $callback);

Ví dụ

Bước 1 - Bây giờ chúng tôi sẽ gửi email từ tài khoản Gmail và bạn cần cấu hình tài khoản Gmail của mình trong file môi trường Laravel - file .env. Cho phép xác minh 2 bước trong tài khoản Gmail của bạn và tạo mật khẩu dành riêng cho ứng dụng, sau đó thay đổi các tham số .env như được hiển thị bên dưới.

MAIL_DRIVER = smtp

MAIL_HOST = smtp.gmail.com

MAIL_PORT = 587

MAIL_USERNAME = địa-chỉ-email

MAIL_PASSWORD = mật-khẩu-của-email

MAIL_ENCRYPTION = tls

Bước 2: Sau khi thay đổi file .env, thực thi hai lệnh để xóa cache và khởi động lại server Laravel

php artisan config:cache

Bước 3: Tạo controller có tên MailController bằng cách thực thi lệnh sau:

php artisan make:controller MailController

Bước 4: Gõ mã sau vào file app/Http/Controllers/MailController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use Mail;

class MailController extends Controller

{

public function basic_email() {

$data = array('name'=>"hieulv68");

Mail::send(['text'=>'mail'], $data, function($message) {

$message->to('[email protected]', 'Learn Skill')->subject('Kiểm tra mail cơ bản trong Laravel');

$message->from('[email protected]','hieulv68');

});

echo "Email cơ bản đã được gửi. Kiểm tra inbox của bạn.";

}

public function _email() {

$data = array('name'=>"hieulv68");

Mail::send('mail', $data, function($message) {

$message->to('[email protected]', 'Learn Skill')->subject('Kiểm tra mail HTML trong Laravel');

$message->from('[email protected]','hieulv68');

});

echo "Email HTML đã được gửi. Kiểm tra inbox của bạn.";

}

public function attachment_email() {

$data = array('name'=>"hieulv68");

Mail::send('mail', $data, function($message) {

$message->to('[email protected]', 'Learn Skill')->subject('Kiểm tra mail đính kèm tập tin trong Laravel');

$message->attach(storage_path('app/public/logo.png'));

$message->attach(storage_path('app/public/test.txt'));

$message->from('[email protected]','hieulv68');

});

echo "Email đính kèm tập tin đã được gửi. Kiểm tra inbox của bạn.";

}

}

Bước 6: Tạo file resources/views/mail.blade.php và viết mã lệnh sau

<h1>Hi, {{ $name }}</h1>

<p>Sending Mail from Laravel.</p>

Bước 7: Thêm mã sau vào routes/web.php

Route::get('sendbasicemail','MailController@basic_email');

Route::get('sendemail','MailController@_email');

Route::get('sendattachmentemail','MailController@attachment_email');

Bước 8: Gõ trên URL để kiểm tra 3 loại mail

http://localhost:8000/sendbasicemail

http://localhost:8000/sendemail

http://localhost:8000/sendattachmentemail

Lưu ý: Nếu bạn nhập URL ở bước 8 báo lỗi xác thực của email bạn cấu hình để gửi, bạn cần bật chế độ ON trong "Allow less secure apps" bằng cách truy cập vào link sau:

https://myaccount.google.com/security#connectedapps

Tại phần Less secure app access, nhấp vào liên kết Turn on access chọn ON

Bài 23: AJAX

Ajax (Asynchronous JavaScript and XML - không đồng bộ JavaScript và XML) là tập các kỹ thuật phát triển web tận dụng nhiều công nghệ web được sử dụng ở phía client để tạo các ứng dụng Web không đồng bộ. Import thư viện jquery trong file view của bạn để sử dụng các hàm ajax của jquery, nó sẽ được sử dụng để gửi và nhận dữ liệu bằng cách sử dụng ajax từ máy chủ. Về phía máy chủ, bạn có thể sử dụng hàm response() để gửi phản hồi đến máy khách và phản hồi được gửi với định dạng JSON, bạn có thể xâu chuỗi hàm response bằng hàm json().

Cú pháp hàm json()

json(string|array $data = array(), int $status = 200, array $headers = array(), int $options)

Ví dụ

Bước 1: Tạo file view có tên resources/views/message.php và viết mã sau vào file.

<>

<head>

<title>Ví dụ AJAX</title>

<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>

<script>

function getMessage() {

$.ajax({

type:'POST',

url:'/getmsg',

data:{"_token": $('#token').val()},

success:function(data) {

$("#msg").(data.msg);

}

});

}

</script>

</head>

<div>

<div id = 'msg'>Thông điệp này sẽ được thay thế sử dụng Ajax. Click vào nút để thay thế thông điệp.</div>

<input type="hidden" name="_token" id="token" value="<?php echo csrf_token() ?>">

<button onclick = 'getMessage()'>Thay thế thông điệp</button>

</div>

</>

Bước 2: Tạo controller có tên AjaxController bằng cách thực thi lệnh sau:

php artisan make:controller AjaxController

Bước 3: Viết mã lệnh sau vào file app/Http/Controllers/AjaxController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class AjaxController extends Controller

{

public function index() {

$msg = "Đây là một thông điệp đơn giản.";

return response()->json(array('msg'=> $msg), 200);

}

}

Bước 4: Thêm lệnh sau vào routes/web.php

Route::get('ajax',function() {

return view('message');

});

Route::post('/getmsg','AjaxController@index');

Bước 5: Mở trình duyệt web, gõ URL sau để test chức năng AJAX

http://localhost:8000/ajax

Bài 24: Xử lý lỗi

Hầu hết các ứng dụng web có các cơ chế cụ thể để xử lý lỗi. Sử dụng chúng giúp chúng ta theo dõi các lỗi và ngoại lệ và ghi lại chúng để phân tích hiệu suất. Trong bài này, bạn sẽ học về xử lý lỗi trong các ứng dụng Laravel.

Những điểm quan trọng

Trước khi tiếp tục tìm hiểu chi tiết về xử lý lỗi trong Laravel, hãy lưu ý các điểm quan trọng sau:

  • Đối với bất kỳ dự án mới nào, theo mặc định Laravel ghi lại các lỗi và ngoại lệ trong lớp config\app.php. Sau đó chúng được gửi lại cho người dùng để phân tích.

  • Khi ứng dụng Laravel của bạn được đặt ở chế độ debug, các thông báo lỗi chi tiết sẽ được hiển thị với mọi lỗi xuất hiện trong ứng dụng web.

Xử lý lỗi laravel

  • Theo mặc định, chế độ gỡ lỗi được thiết lập là false và bạn có thể thay đổi thành true. Điều này cho phép người dùng theo dõi tất cả các lỗi.

debug laravel

  • Cấu hình của dự án Laravel bao gồm tùy chọn debug, nó xác định lượng thông tin về lỗi sẽ được hiển thị cho người dùng. Theo mặc định trong một ứng dụng web, tùy chọn được đặt thành giá trị được xác định trong các biến môi trường của tệp .env.

- Giá trị được đặt thành true trong môi trường phát triển local và được đặt thành false trong môi trường production.

- Nếu giá trị được đặt thành true trong môi trường production, nguy cơ chia sẻ thông tin nhạy cảm với người dùng cuối sẽ cao hơn.

Nhật ký lỗi (Error Log)

Ghi nhật ký lỗi trong ứng dụng web giúp theo dõi chúng và lập kế hoạch chiến lược để loại bỏ chúng. Thông tin log có thể được cấu hình trong ứng dụng web trong tệp config/app.php. Hãy lưu ý các điểm sau trong khi xử lý Error Log trong Laravel:

  • Laravel sử dụng thư viện ghi nhật ký PHP độc thoại.

  • Các tham số ghi nhật ký được sử dụng để theo dõi lỗi là đơn, hàng ngày, syslogerrorlog.

  • Ví dụ: nếu bạn muốn ghi thông báo lỗi trong file log, bạn nên thiết lập giá trị log trong cấu hình ứng dụng của mình thành hàng ngày như được hiển thị trong lệnh bên dưới:

'log' => env('APP_LOG',’daily’),

  • Nếu chế độ log daily được lấy làm tham số, theo mặc định, Laravel sẽ ghi nhật ký lỗi trong khoảng thời gian 5 ngày. Nếu bạn muốn thay đổi số lượng tệp nhật ký tối đa, bạn phải đặt tham số của log_max_/files trong tệp cấu hình thành giá trị mong muốn.

‘log_max_/files’ => 25;

Mức độ nghiêm trọng

Vì Laravel sử dụng thư viện ghi nhật ký PHP độc thoại, có nhiều tham số khác nhau được sử dụng để phân tích mức độ nghiêm trọng. Các mức độ nghiêm trọng khác nhau có sẵn là các thông báo lỗi, phán đoán, cảnh báokhẩn cấp. Bạn có thể đặt mức độ nghiêm trọng như trong lệnh bên dưới:

'log_level' => env('APP_LOG_LEVEL', 'error')

Bài 25: Bảo vệ CSRF

CSRF đề cập đến các cuộc tấn công Cross Site Forgery trên các ứng dụng web. Các cuộc tấn công CSRF là các hoạt động trái phép do người dùng được xác thực của hệ thống thực hiện. Do đó, nhiều ứng dụng web dễ bị các cuộc tấn công này.

Laravel cung cấp bảo vệ CSRF theo cách sau:

Laravel nhúng một plug-in CSRF để tạo các token cho mỗi phiên người dùng. Các token này xác minh rằng các hoạt động hoặc yêu cầu được gửi bởi người dùng được xác thực có liên quan.

Thực hiện

Việc thực hiện bảo vệ CSRF ở Laravel được thảo luận chi tiết trong phần này. Các điểm sau đây cần chú ý trước khi tiếp tục bảo vệ CSRF:

CSRF được triển khai trong các form HTML được khai báo bên trong các ứng dụng web. Bạn phải nhúng token CSRF được xác thực ẩn (hidden) trong form để middleware bảo vệ CSRF của Laravel có thể xác thực yêu cầu. Cú pháp được hiển thị dưới đây:

<form method = "POST" action="/profile">

{{ csrf_field() }}

...

</form>

Bạn có thể xây dựng các ứng dụng điều khiển JavaScript sử dụng thư viện JavaScript HTTP, mã trên nhúng token CSRF cho mọi yêu cầu gửi đi.

File có tên resources/assets/js/bootstrap.js đăng ký tất cả các token cho các ứng dụng Laravel, bao gồm thẻ meta, nó lưu trữ csrf-token với thư viện Axios HTTP.

Form không có CSRF token

Hãy xem xét các dòng mã sau đây. Chúng hiển thị một from có hai tham số là đầu vào: emailmessage.

<form>

<label> Email </label>

<input type = "text" name = "email"/> <br/>

<label> Message </label>

<input type="text" name = "message"/>

<input type = "submit" name = "submitButton" value = "submit">

</form>

Kết quả của mã trên là form hiển thị như hình dưới đây.

form laravel

Form hiển thị ở trên sẽ chấp nhận mọi thông tin đầu vào từ người dùng được ủy quyền. Điều này có thể làm cho ứng dụng web dễ bị các cuộc tấn công khác nhau.

Lưu ý rằng nút submit nhúng chức năng trong controller. Hàm postContact được sử dụng trong các controller cho các view liên quan đó. Nó được hiển thị dưới đây:

public function postContact(Request $request) {

return $request-> all();

}

Quan sát thấy rằng form không bao gồm bất kỳ token CSRF nào, vì vậy thông tin nhạy cảm được chia sẻ dưới dạng các tham số đầu vào là dễ bị tấn công.

Form với CSRF token

Các dòng mã sau đây cho bạn thấy form được thiết kế lại bằng cách sử dụng mã thông báo CSRF.

<form method = "post" >

{{ csrf_field() }}

<label> Email </label>

<input type = "text" name = "email"/> <br/>

<label> Message </label>

<input type = "text" name = "message"/>

<input type = "submit" name = "submitButton" value = "submit">

</form>

Khi thực thi sẽ trả về JSON với token như sau:

{

"token": "ghfleifxDSUYEW9WE67877CXNVFJKL",

"email": "[email protected]",

"message": "Học kỹ năng trực tuyến LearnSkill",

}

Đây là token CSRF được tạo khi click vào nút submit.

Chú ý: Đây là ví dụ minh họa ý nghĩa token CSRF. Để chạy được thực tế theo ví dụ trên bạn phải tạo file view là Blade và khai báo route cho view và controller. Bổ sung action trong view với tên bạn thiết lập cho controller trong route.

Bài 26: Xác thực (Authentication)

Xác thực là quá trình xác định thông tin đăng nhập của người dùng. Trong các ứng dụng web, xác thực được quản lý bởi các phiên, nó lấy các tham số đầu vào như email hoặc tên người dùng và mật khẩu để nhận dạng người dùng. Nếu các tham số này khớp thì người dùng được cho là xác thực.

Lệnh

Laravel sử dụng lệnh sau để tạo các form và các controller liên quan để thực hiện xác thực:

php artisan make:auth

Lệnh này giúp tạo scaffold xác thực thành công, như thể hiện trong ảnh chụp màn hình sau:

authentication laravel

Controller

Controller được sử dụng cho tiến trình xác thực là HomeController

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class HomeController extends Controller

{

/**

* Create a new controller instance.

*

* @return void

*/

public function __construct()

{

$this->middleware('auth');

}

/**

* Show the application dashboard.

*

* @return

\Illuminate\Contracts\Support\Renderable

*/

public function index()

{

return view('home');

}

}

Ứng dụng scaffold được tạo sẽ tạo ra trang đăng nhập và trang đăng ký để thực hiện xác thực như được hiển thị dưới đây:

Login

laravel login

Register

laravel register

Xác thực người dùng thủ công

Laravel sử dụng Auth facade giúp xác thực người dùng theo cách thủ công. Nó bao gồm phương thức attempt xác minh email và mật khẩu.

Hãy xem xét các dòng mã sau đây cho LoginController bao gồm tất cả các hàm để xác thực

<?php

// Authentication mechanism

namespace App\Http\Controllers;

use Illuminate\Support\Facades\Auth;

class LoginController extends Controller{

/**

* Handling authentication request

*

* @return Response

*/

public function authenticate() {

if (Auth::attempt(['email' => $email, 'password' => $password])) {

// Authentication passed...

return redirect()->intended('dashboard');

}

}

}

Bài 27: Ủy quyền (Authorization)

Trong bài trước, chúng ta đã nghiên cứu về quy trình xác thực (authentication) trong Laravel. Bài này giải thích cho bạn quá trình ủy quyền (authorization) trong Laravel.

Sự khác biệt giữa Xác thực và Ủy quyền

Trước khi tiếp tục tìm hiểu về quy trình ủy quyền trong Laravel, chúng ta hãy hiểu sự khác biệt giữa xác thực và ủy quyền.

Trong xác thực (authentication), hệ thống hoặc ứng dụng web xác định người dùng của mình thông qua thông tin đăng nhập mà họ cung cấp. Nếu nhận thấy rằng thông tin đăng nhập hợp lệ, chúng được xác thực hoặc nếu không thì không.

Trong ủy quyền (authorization), hệ thống hoặc ứng dụng web sẽ kiểm tra xem người dùng được xác thực có thể truy cập các tài nguyên mà họ đang cố truy cập hoặc đưa ra yêu cầu hay không. Nói cách khác, nó kiểm tra các quyền và quyền của họ đối với các tài nguyên được yêu cầu. Nếu nhận thấy rằng họ có thể truy cập tài nguyên, điều đó có nghĩa là họ được ủy quyền.

Do đó, xác thực liên quan đến việc kiểm tra tính hợp lệ của thông tin đăng nhập của người dùng và ủy quyền liên quan đến việc kiểm tra các quyền và quyền đối với các tài nguyên mà người dùng được xác thực có.

Cơ chế ủy quyền trong Laravel

Laravel cung cấp một cơ chế đơn giản để ủy quyền có hai cách chính là GatesPolicies.

Viết Gates và Policies

Gates được sử dụng để xác định xem người dùng có được phép thực hiện một hành động được chỉ định hay không. Chúng thường được định nghĩa trong App/Providers/AuthServiceProvider.php bằng cách sử dụng Gate facade. Gates cũng là các hàm được khai báo để thực hiện cơ chế ủy quyền.

Các chính sách (Policies) được khai báo trong một mảng và được sử dụng trong các lớp và phương thức sử dụng cơ chế ủy quyền.

Các dòng mã sau đây giải thích cho bạn cách sử dụng Gates và Policies để ủy quyền cho người dùng trong ứng dụng web của Laravel. Lưu ý rằng trong ví dụ này, chức năng boot được sử dụng để ủy quyền cho người dùng.

<?php

namespace App\Providers;

use Illuminate\Contracts\Auth\Access\Gate as GateContract;

use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;

class AuthServiceProvider extends ServiceProvider{

/** * The policy mappings for the application. * * @var array */

protected $policies = [

'App\Model' => 'App\Policies\ModelPolicy',

];

/** * Register any application authentication / authorization services. * * @param \Illuminate\Contracts\Auth\Access\Gate $gate * @return void */

public function boot(GateContract $gate) { $this->registerPolicies($gate);

//

}

}