Sơ lược về laravel một trong những framework php tốt nhất hiện nay

04:54 25/10/2017   Giang Hùng Việt

Laravel Framework là một framework mã nguồn mở, toàn bộ code của nó được đặt trên github, bạn có thể dễ dàng pull về và xem cách nó hoạt động như nào? Code của Laravel trong sáng và dễ đọc nó giúp quá trình viết code của bạn trở nên đơn giản và nhanh chóng. Nó vô cùng đáng tin cậy và số lượng lập trình viên làm việc với nó thực sự lớn, nên tìm tài liệu cũng như là thắc mắc những vấn đề về code luôn tìm được cách giải quyết. Sau đây mình sẽ sơ lược qua một số tính năng cơ bản về Framework này

1. Hoạt động theo mô hinh MVC

 

 Tóm tắt lại sơ đồ trên: Khi người dùng gửi một yêu cầu lên hệ thống, hệ thống sẽ gửi về cho Controller xử lý các yêu cầu của người dùng. Trong quá trình làm việc đó, Controller sẽ phải thông qua lớp Model nếu muốn làm việc với Cơ sở dữ liệu (DataBase). Sau khi xử lý xong, Model sẽ đưa dữ liệu về cho Controller, Controller tiếp tục đưa sang View và View hiển thị lại cho người dùng kết quả cuối cùng.

2. MiddleWare

Sơ đồ ở trên sở dĩ mình không đưa MiddleWare vào vì mình muốn nhấn mạnh mô hình MVC, và tách riêng MiddleWare để giải thích cho các bạn dễ hiểu:

Các bạn xem hình sau:

 

Giả sử ta có một vị khách tên là Route đến và muốn đi vào Controller, thì vị khách Route này sẽ phải checkin ở lễ tân MiddleWare. Nếu hợp lệ thì cho Route đi tiếp, còn không thì không cho phép.

Vậy có thể hiểu MiddleWare nó sẽ bảo vệ các Controller của chúng ta.

3. Service Providers

Service Providers nằm trong config/app.php, khi bạn vào app.php này, bạn kéo xuống sẽ thấy Providers là một mảng.

Nó là nơi để bạn đăng ký  tất cả mọi thứ, sau đó Service Providers sẽ cho Laravel biết tất cả về package của bạn

Nói chung Service Providers nghĩa là đăng ký tất cả mọi thứ như nghe sự kiện, trung gian và các tuyến đường….nó là trung tâm để bạn cấu hình khi mà tạo một ứng dụng, một package riêng cho mình.

4.Request và Response

Request và Response là gì, mình sẽ giải thích đơn giản như này, các bạn hãy nhìn vào hình sau:

Khi mà các bạn gửi dữ liệu thông qua các đường dẫn trên route, thì cách đó chỉ có tác dụng với phương thức GET, còn nếu khi cần sử dụng POST, các bạn sẽ không đưa được dữ liệu lên đường dẫn đó được. Chính vì vậy mà Laravel tạo ra một cái gọi là Request, Requet này sẽ quản lý các dữ liệu được gửi lên Route và truyền dữ liệu đó sang bên Controller. Dữ liệu Request có thể là một mảng, một đối tượng hoặc là một JSON

Sau đó Controller sẽ xử lý Request và  tạo ra một lớp Response rồi trả Response đó về máy tính cho chúng ta. Response đảm nhiệm việc chuyển đổi giữa các kiểu dữ liệu Request và gửi về cho người dùng.

5. View (Blade Template )

Blade Template là một Template Engine có tác dụng làm sạch đi các đoạn code PHP nằm trong View để tách biệt Hoàn Toàn giữ người làm Front-End (cắt CSS) và người code PHP. Blade Template  là một engine khá mạnh mẽ nên được Laravel chọn và tích hợp vào sẵn. Nên tất cả các file trong View đều sẽ có phần mở rộng là .blade.php

6.Database

Schema: lớp này cung cấp cho chúng ta các hàm để Tạo bảng, chỉnh sửa bảng, thêm bảng, xóa bảng…. trong laravel

Migrate và Seed: quản lý cơ sở dữ liệu trong laravel, backup hay reset lại cơ sở dữ liệu hay là tạo một bộ cơ sở dữ liệu mẫu để chúng ta làm việc với database một cách dễ dàng hơn

Query Builder: là các câu lệnh truy vấn đến cơ sở dữ liệu trong laravel

Eloquent –Model: là phần Model trong mô hình MVC ở trên đầu

Relationship: liên kết dữ liệu giữa các bảng trong laravel (một nhiều) (nhiều nhiều)

Về Migrate mình có một ví dụ dễ hiểu sau:

Giả sử bạn là người lập trình viên trong hình trên, ngày thứ 2 trong tuần bạn tạo ra một bảng A, thứ 3 tạo bảng B, thứ 4 Sửa bảng A và thứ 5 xóa Bảng B.

Đến thứ 5 sau khi xóa bảng B thì hệ thông của bạn báo lỗi, bạn sẽ làm thế nào, khi này, Laravel sẽ cung cấp cho bạn Migration, lớp Migration này sẽ lưu lại các công việc mà bạn đã làm, từ đây, bạn sẽ có thể quay lại ngày thứ 3 để tiếp tục làm việc với bảng B và tìm hiểu tại sao khi xóa lại bị lỗi.

Migrate nó sẽ lưu lại thứ tự công việc mà bạn làm ở trong bảng Migrations trong database, rất thuận lợi cho chúng ta làm việc nhóm khi mà hôm nay người này tạo bảng, ngày mai người khác tạo bảng khác hay là sửa xóa bảng của bạn.

Các file Migrate sẽ được lưu ở Database>Migrate.

Seed là gì? Nó là bộ dữ liệu mẫu, giúp chúng ta insert dữ liệu mẫu vào bảng đó.

Seed được lưu ở Database>Seeds

Dữ liệu mẫu mà ta thêm vào có thể thêm được nhiều bằng cách truyền vào với dạng mảng như sau:

 

Query Builder: là các lệnh truy vấn trong laravel, nó có tác dụng thay thế cho các câu lệnh truy vấn thông thường  bằng các phương thức trong lớp DB.

Mình ví dụ: Nếu bạn muốn lấy toàn bộ dữ liệu trong một bảng có tên là Products, thì bình thường dùng PHP thuần bạn sẽ làm như sau:

Select * from products

Trong laravel thì khác, cũng có yêu cầu như thế, nhưng câu lệnh sẽ là:

DB::table(‘products’)->get();

Eloquent ORM Model : một phần mà mình thấy rất là hay

Model trong laravel có thể lưu ở bất kỳ đâu để nạp tự động tùy theo file composer.js nhưng thông thường mặc định tất cả model sẽ được lưu trong thư mục app/

Thì Eloquent ORM  nó cung cấp cho chúng ta cách thức  chuyển đổi cơ sở dữ liệu quan hệ sang mô hình hướng đối tượng.

Eloquent ORM làm việc trên cơ sở Active Record. Mỗi Bảng cơ sở dữ liệu của chúng ta sẽ được “ánh xạ” thành một file Model tương ứng, và chính Model này chúng ta sẽ sử dụng nó để tương tác với bảng.

Ví  dụ ta có một bảng Product  trong database, ta tạo model bằng câu lệnh:

php artisan make:model Product

Ta sẽ có một file Product.php trong thư mục app, bên trong file Product.php này ta có thể viết các câu lệnh truy vấn, các hàm hoặc các ràng buộc relationship cho bảng Product trong database của bạn

Relationship: là các kiểu quan hệ ràng buộc trong laravel: cụ thể mình có một danh sách như sau: nhìn qua là các bạn hiểu ngay thôi:

-Một-Một: liên kết từ bảng cha tới bảng con: câu lệnh: ->hasOne();

-Một-Một: liên kết từ bảng con tới bảng cha: câu lệnh: ->belongsTo();

-Một-Nhiều: câu lệnh: ->hasMany();

-Nhiều-Nhiều: câu lệnh: ->belongsToMany();

-Liên kết qua trung gian->hasManyThrough();

7. Authenticate

Authenticate viết tắt là Auth, là một lớp hỗ trợ cho chúng ta trong việc quản lý việc đăng nhập, đăng xuất, kiểm tra xem người dùng đã đăng nhập hay chưa, kiểm tra thông tin đăng nhập của người dùng.

Ví dụ như hình trên, bạn cần kiểm tra login của một tài khoản, thì cột bên trái sử dụng php thuần, bạn sẽ phải khởi tạo biến, sau đó viết câu lệnh truy vấn với điều kiện, rồi thực thi nó, rồi lại kiểm tra nó…

Cột bên phải là sử dụng Auth trong laravel, các bạn chỉ việc đưa thông tin đăng nhập của người dùng vào và Auth này sẽ trả lại kết quả cho chúng ta.

8.Session

 Session trong laravel thì định nghĩa cũng giống như Session trong PHP thuần, nó là một phiên làm việc giúp chúng ta lưu trữ các thông tin cần thiết như là Login hay là giỏ hàng chẳng hạn

Cấu hình session trong laravel sẽ ở Config/session.php

‘lifetime’: thời gian tồn tại của session, tính theo phút

‘expire_on_close’: true là mất khi đóng trình duyệt, false thì ngược lại không mất

‘driver’=>env(‘SESSION_DRIVER’, ‘file’) : chọn nơi sẽ lưu trữ session

-Cách sử dụng Session: Session::put(‘key’, ‘value’);

-Đặt một giá trị vào trong một giá trị session của mảng: Session::push(‘user.teams’, ‘developers’);

-Truy vấn tới Session được lưu trữ: $value = Session::get(‘key’);

9. Cache

Cache là một bộ nhớ đệm, được hiểu là một tầng ở giữa cơ sở dữ liệu và website trong ứng dụng mà bạn xây dựng.

Tất cả dữ liệu trong cache đó là kết quả của những tiến trình mà bạn xử lý trước đó hoặc bản copy dữ liệu đã được lưu trữ ở nơi khác.

Cache được sử dụng để giải quyết việc các truy vấn tới cơ sở dữ liệu bị chậm khi mà có nhiều người truy cập vào trang web cùng lúc

Cache hoạt động như là một tầng trung gian để lưu trữ những dữ liệu không thay đổi giữa các request và việc lấy các thông tin từ bộ nhớ cache sẽ nhanh hơn là bạn phải truy vấn lại đến cơ sở dữ liệu một lần nữa.

Vậy Cache trong laravel cũng như vậy thôi, Laravel cung cấp các API thống nhất cho những hệ thống bộ nhớ cache khác nhau, các câu hình cache đặt ở file config/cache.php

Hiện nay Laravel hỗ trợ nhiều loại bộ nhớ đệm phổ biến, và thông dụng là 2 loại Memcached và Redis

Phương thức GET trong facache cache được sử dụng để lấy dữ liệu từ bộ nhớ Cache. Nếu dữ liệu ta yêu cầu không có trong bộ nhớ cache thì phương thức GET này sẽ trả về giá trị null. Bạn cũng có thể đưa vào một tham số thứ hai tới phương thức get để xác địch giá trị mặc định trả về trong trường hợp cache không có dữ liệu và bạn không muốn nó trả về null

(Facache cache: là cách để laravel sử dụng các chức năng được cung cấp từ các class được sử dụng thông qua các Service Provider)