CƠ SỞ LÝ THUYẾT
Cấu trúc thư mục của Laravel
Một dự án web viết bằng Laravel có cấu trúc thư mục như sau:
Hình 2.1: Thư mục Laravel Framework
Thư mục /app đóng vai trò quan trọng nhất trong ứng dụng, vì đây là nguồn gốc chính của nó Do đó, việc tìm hiểu sâu về các thư mục này là rất cần thiết để hiểu rõ cấu trúc và chức năng của ứng dụng.
Hình 2.3: Chức năng cụ thể của các thư mục con trong app
Cài đặt Laravel
To install Laravel, you first need to have Composer installed on your system Since I am using Windows, I downloaded the Windows installer for Composer You can download Composer from the official Laravel installation page at http://laravel.com/docs/4.2/installation.
Các bạn hãy tải về và cài đặt như bình thường, lưu ý chọn đúng đường dẫn đến file php.exe trong thư mục php của XAMPP (xampp/php/php.exe).
Bản Laravel mới nhất hiện tại là 4.2, yêu cầu PHP phiên bản 5.4 trở lên Hiện tại, tôi đang sử dụng XAMPP 5.6.3, vì vậy tôi có thể cài đặt bản Laravel mới nhất Để cài đặt, bạn chỉ cần sử dụng lệnh: composer create-project laravel/laravel tên-thư-mục-laravel-của-bạn.
Còn muốn nếu install các bản thấp hơn thì dùng: composer create-project laravel/laravel tên-thư-mục-laravel-của-bạn 4.0.*
Sau khi cài đặt Laravel, chúng ta sẽ có cấu trúc thư mục như hình 2.1 Để kiểm tra xem việc cài đặt có thành công hay không, hãy mở trình duyệt và nhập địa chỉ: http://localhost/laravel_demo/public/ Nếu thành công, một giao diện sẽ hiển thị như hình dưới đây.
Hình 2.4: Cài đặt Laravel thành công
Cấu hình cơ bản cho ứng dụng
Các bạn truy cập vào app/config/app.php và chỉnh sửa lại những thông tin cơ bản sau:
+ Chỉnh lại URL,các bạn tìm tới key url và chỉnh lại cho phù hợp với dự án của mình nhé:
Để tăng cường tính bảo mật cho cookie và session trên website, bạn cần cấu hình key Bạn có thể tìm đến dòng có cấu hình key hoặc sử dụng lệnh CMD bằng cách chỉ đường dẫn đến thư mục làm việc của bạn Ví dụ, nếu bạn sử dụng thư mục kienthuc24h, hãy chạy lệnh sau: php artisan key:generate.
Chạy ứng dụng đầu tiên với Laravel
- Các bạn truy cập vào file app/route.php và thêm nội dung sao vào cuối file:
Route::get(‘/dang-nhap’,function(){ echo ‘Đây là trang đăng nhập’;
Để truy cập trang đăng nhập, bạn hãy gõ đường link sau vào trình duyệt: http://localhost/kienthuc24h/public/dang-nhap Kết quả hiển thị sẽ là nội dung "Đây là trang đăng nhập".
Route trong Laravel Framework
Router trong Laravel có vai trò định tuyến đến các controller cụ thể từ yêu cầu của người dùng Khác với nhiều framework khác, nơi người dùng thường cần tạo controller để xử lý công việc, Laravel cho phép xử lý dữ liệu trực tiếp trong phần Router Đây là một trong những điểm mạnh và sự khác biệt nổi bật của Laravel so với các framework khác.
- Các định tuyến trong Laravel đều được viết trong app/route.php Cú pháp đơn giản nhất của 1 định tuyến đó là:
Route::method(‘URI’,’Function call back’)
+ URI là dạng link trên url.
+ Function callback: Hàm sẽ gọi tới link URI phía trên được chạy, đây chính là nơi các bạn có thể xử lý dữ liệu.
+ Method chính là các dạng phương thức cơ bản: post, get, put, delete, any.
- POST Route: Các thao tác lấy từ form như thêm dữ liệu.
- GET Route: Dành cho các thao tác truy cập thông thường tương đương với request cơ bản trong PHP Ví dụ chạy 1 link trên url.
- PUT Route: Dành cho thao tác lấy từ form nhưng là cập nhật dữ liệu.
- DELETE Route: Dành cho thao tác hành động xóa dữ liệu.
- ANY Route: là sự tổng hợp các thao tác ở trên.
Trong đó thì 2 dạng POST và GET sẽ được sử dụng nhiều nhất.
Các bạn mở file app/route.php và viết dòng code sau:
Route::get(‘/san-pham’, function(){ echo ‘Trang sản phẩm’;
Truy cập vào đường link localhost/kienthuc24h/san-pham, trong đó "kienthuc24h" là thư mục của dự án Khi bạn mở link này, Route sẽ tự động kiểm tra và gọi hàm callback tương ứng Sau khi trang được tải, bạn sẽ nhận được thông báo như mong muốn.
- Ngoài ra các bạn còn có thể tùy chỉnh rất nhiều trong phần Route này theo cú pháp:
Route::method(‘Tên định danh’,’Tham số’);
Route::get(“san-pham”,”ProductController@list”);
Khi chúng ta truy cập vào liên kết sản phẩm, bộ điều hướng sẽ gọi đến controller có tên là ProductController và thực hiện phương thức (action) là list.
Nếu bạn muốn gửi kèm tham số cho bộ định tuyến, hãy khai báo theo định dạng {Tên tham số} Trong hàm callback, bạn có thể coi tham số này như một tham số thông thường trong hàm.
Route::get(‘/san-pham/{name}/{id}’, function($name,$id){ echo ‘Bạn đang xem sản phẩm’.$name.’có ID = ’.&id;
Tiếp theo bạn truy cập vào đường link localhost/kienthuc24h/san- pham/nokia520/1 và kết quả sẽ là:
Bạn đang xem sản phẩm nokia520 có ID = 1
- Ngoài ra các bạn hoàn toàn có thể kiểm tra dữ liệu của tham số truyền vào bằng cách sử dụng thêm phương thức where().
Đoạn mã trên sử dụng Route::get để định nghĩa một tuyến đường trong ứng dụng, cho phép người dùng truy cập sản phẩm qua URL với định dạng '/san-pham/{name}/{id}' Trong đó, biến $name đại diện cho tên sản phẩm và $id là ID của sản phẩm Điều kiện kiểm tra cho thấy tên sản phẩm chỉ chấp nhận các ký tự thường từ a-z, trong khi ID phải là các số tự nhiên từ 0-9 Khi truy cập vào tuyến đường này, hệ thống sẽ hiển thị thông báo "Bạn đang xem sản phẩm" kèm theo tên và ID sản phẩm.
Bộ lọc định tuyến cho phép kiểm tra trạng thái đăng nhập trước khi cập nhật vào đường dẫn (URI), đảm bảo người dùng có quyền truy cập vào trang một cách an toàn.
- Filter chia ra 2 loại là before và after.
+ Before: Nghĩa là request trước khi tới routing.
+ After: Nghĩa là request sau khi tới routing.
Trên thực tế thì Before thường được sử dụng nhiều hơn.
Route::filter(“tên filter”, function(){
Route:: filter(“checklogin”, function(){ if(session::get(‘login’)!=1){ return Redirect::to(“/dang-nhap”);
Đoạn code trên tạo một Filter có tên là checklogin để kiểm tra biến session login có giá trị bằng 1, nhằm xác định trạng thái đăng nhập Nếu người dùng chưa đăng nhập, hệ thống sẽ tự động chuyển hướng về trang đăng nhập.
Tiếp theo ta có đoạn code:
Route::get(‘/them-san-pham’, array(“before”=>”checklogin”,”uses”=> ”ProductController@store”));
In the provided code, I have implemented a 'before' key to invoke the checklogin filter, which we established earlier This filter is directed to the ProductController, specifically the store action, utilizing the 'uses' key for routing.
- Như vậy, khi các bạn truy cập vào link them-san-pham thì lúc này nó sẽ kiểm tra Filter checklogin trước.
- Với bất kỳ link nào đó mà bạn muốn kiểm tra đăng nhập thì chỉ cần sử dụng “before”=>”checklogin” là được.
- Filter trong Laravel Framework còn cho phép chúng ta truyền giá trị vào dựa vào cú pháp sau:
Route::filter(‘Tên filter’, function($route, $request,$value){
// code xử lý, kiểm tra dữ liệu
+ Như các bạn thấy tham số thứ 3 $value chính là giá trị mà chúng ta sẽ truyền vào, ví dụ:
Route::filter(“checkId”, function($route, $request,$value){
// Xử lý dữ liệu if($value”checkId:-1”,”uses”=>” DemoController@checkid“));
Khi bạn chạy link check-id, hệ thống sẽ gọi đến Filter checkId để thực hiện kiểm tra, với giá trị gửi sang Filter là -1 (checkId: -1).
Những ví dụ trên cho thấy rõ ràng ý nghĩa và sức mạnh của filter trong thực tế Việc sử dụng filter giúp tối giản hóa code một cách hiệu quả và dễ dàng tái sử dụng.
- Đặt tên cho các Route nhằm sử dụng linh hoạt cho ứng dụng Dễ dàng lấy được thông tin của Route thông qua tên này.
Route::get(‘/san-pham/{name}/{id}’, array(‘as’=>’product’,’uses’=>Produ ctController@view));
$url= URL::route(“product”,array(‘nokia520’,’1’)); echo “Chi tiết sản phẩm”;
+ as: Là tên của route (product).
+ uses: Route này sẽ sử dụng controller (ProductController) nào và action (view) nào.
+ Thư viện URL, sử dụng phương thức route với cú pháp sau:
URL::route(“tên route”, array(‘chứa đối số’));
Sau khi chạy đoạn code trên chúng ta sẽ có $url=/san-pham/nokia520/1.
- Tiếp đến ta xây dựng 1 controller với nội dung sau: