Chương 1 giới thiệu tổng quát về Framework Laravel 5.*, cài đặt laravel và chạy thử chương trình đầu tiên. -6- Chương 2: PHÁT TRIỂN WEBSITE TRÊN NỀN TẢNG FRAMEWORK LARAVEL 2. Tổng quan về mô hình MVC Mô hình MVC (Models, View, Controller) là một kiến trúc phần mền hay mô hình thiết kế được sử dụng trong kỹ thuật phần mền, nó giúp cho các lập trình viên tách ứng dụng của họ ra 3 thành phần khác nhau Models, View, Controller. Mỗi thành phần có một nhiệm vụ riêng biệt và độc lập với các thành phần khác.
Mô hình MVC trong Framework Laravel Hình 2.1: Mô hình MVC 2. Controller Giữ nhiệm vụ nhận, điều hướng các yêu cầu từ người dùng và gọi đúng những phương thức mà người dùng gửi lên để xử lý chúng. View View có nhiệm vụ tiếp nhận dữ liệu từ controller gửi sang và hiển thị các thông tin đó sang các đoạn mã HTML. Model Có nhiệm vụ thao tác đến cơ sở dữ liệu, nghĩa là nó sẽ chứa tất cả các hàm, các phương thức truy vấn trực tiếp với dữ liệu và controller sẽ thông qua các hàm, phương thức đó để lấy dữ liểu trả về cho View.
Framework Laravel trong xây dựng website với mô hình MVC 2. Cách sử dụng Route trong Laravel Mục đích của việc sử dụng router là định tuyến đến những Controller cụ thể từ phía request của người sử dụng. Một số cách khai báo Route: Route basic (điều khiển căn bản): Các định tuyến trong Laravel Framework được viết trong file app/routes.php ta khai báo như sau: Route::method('uri', 'function callback'); Giải thích: uri: là dạng link trên url. function callback: là hàm sẽ được gọi khi link uri phía trên được chạy, đậy là nơi có thể xử lý dữ liệu.
method: là các phương thức như GET, POST, PUT, DELETE. Ví dụ: Route::get('demo', function (){ return “demo project laravel”; }); Route parameters (sử dụng tham số trong bộ định tuyến): Trong trường hợp muốn gửi kèm các tham số cho bộ định tuyến thì ta chỉ cần khai báo theo dạng {tên tham số} Ví dụ: Route::get('parameters-demo/{name}/{age}',function($name,$age){ echo “xin chào, tôi là: ”.”tuổi”; }); Route filters (Bộ lọc định tuyến): Đây chính là bộ lọc định tuyến, nó có thể cho phép chúng ta kiểm tra trước khi truy cập vào đường dẫn đó. Filters có hai loại là before và after. before nghĩa là kiểm tra trước khi -8- request chạy vào route đó, ngược lại after sẽ kiểm tra khi request chạy vào route đó.
Cú pháp để khai báo filters: Route::filter('tên filter', function (){ //code xử lý }); Route groups (gộp nhóm bộ định tuyến): Route groups sẽ giúp chúng ta nhóm các route lại một cách dễ dàng với cách khai báo như sau: Route::group(['prefix' => 'admin', function(){ Route::get('user', function (){ echo “đây là page user”; }); Route::get('products', function (){ echo “đây là page products”; }); }]); 2. Cách sử dụng View, Model và Controller trong Laravel 2. View Trong Framework Laravel để tạo view ta vào thư mục resources/view. Model Trong các PHP Framework khi nói đến Model thì dường như nó sẽ gắng liền thao tác với cơ sở dữ liệu.
Trong Framework Laravel thì nó hỗ trợ cho chúng ta tạo model đơn giản bằng lệnh artisan là: php artisan make:model Models/name + Trong đó, name là tên model mình cần tạo. + Sau khi lệnh artisan được chạy xong thì ta vào thư mục app/Http/Models và mở file model vừa tạo lên và làm việc. -9- Ví dụ: <?php class Product extends Eloquent { protected $table='products'; protected $fillable= ['name', 'price', .]; } ?> Giải thích: $table: là tên của bảng trong database. $fillable: là tên các thuộc tính của bảng trong database.
Controller Trong Laravel Framework có hỗ trợ cho chúng ta tạo Controller bằng lệnh artisan một cách đơn giản như sau: php artisan make:controller NameController. + trong đó NameController là tên Controller mà chúng ta muốn tạo. Ví dụ: php artisan make:controller ProductController Sau khi chạy xong lệnh ta vào thư mục app/Http/controllers và mở file ProductController và làm việc. <?php class ProductController extends BaseController { public function test(){ return “đây là controller”; } } ?> Để có thể gọi được Controller với function test trong Laravel thì ta phải truy cập đến file routes trong thư mục app/routes.php và thêm nội dung sau: Route::get('test-controller', 'ProductController@test'); - 10 - 2.
Sử dụng Blade Templates engine trong Laravel Templates engine có tác dụng giúp dọn sạch đi những code PHP nằm trong view nên tách biệt hoàn toàn giữa người cắt CSS và người code PHP. Hiện nay có khá nhiều template engine như Smarty, Xitemplate. Templates engine này được tích hợp sẵn bên trong Laravel và tất cả các blade template engine đều có phần mở rộng là. Để tạo template engine ta vào thư mục resource/view vào tạo file với đuôi mở rộng là .php Các cú pháp sử dụng trong blade template engine: + Sử dụng cặp dấu {{ }} hoặc {!! !!} thay cho từ khóa echo trong php Ví dụ: <?php $name='Nguyễn Văn A'; echo $name; ?> Thay vì viết vậy balde template hỗ trợ câu lệnh ngắn gọn hơn cho chúng ta là: {{ $name }} + Sử dụng vòng lặp điều kiện: để sử dụng vòng lặp hoặc câu điều kiện if thì ta chỉ việc thêm @ ngay trước câu lệnh và kết thúc bằng @end + tên hàm Ví dụ: @php $i=5; @endphp @if($i<6) biến i nhỏ hơn 6; @else biến i lớn hơn 6 @endif @for($j=0; $j<=$i; $j++) giá trị của j là: {{ $j }} @endfor + Chèn sub-view trong blade template engine: - 11 - Để chèn sub-view ta dùng cú pháp: @include($uri_view_name).
Giải thích: $uri_view_name: là đường dẫn tới phần cần chèn sub-view. + Mở rộng và ghi đè trong blade template engine: Đây là phần khá quan trọng và rất hay, để có thể hiểu rõ hơn về phần này ta có thể xem ví dụ sau đây: Ví dụ: Tạo file resource/view/layout/master.php <!DOCTYPE html> <html lang="vi"> <head> <meta charset="UTF-8"> <title> @yield('title') </title> </head> <body> <div class="container"> @yield('content') </div> </body> </html> Tiếp theo tạo file resource/view/home.php @extends('layout.master') @section('title', 'đây là title của trang home') @section('content') <p>đây là nội dung content ở page home</p> @stop Khi chạy trang home trên trình duyệt kết quả sẽ là: - 12 - <!DOCTYPE html> <html lang="vi"> <head> <meta charset="UTF-8"> <title>đây là title của trang home</title> </head> <body> <div class="container"> <p>đây là nội dung content ở page home.</p> </div> </body> </html> Như vậy ở file home.php dùng @extends('layout.master') để chọn file master.php trong folder layout sau đó dùng @section('content') và @section('title') để thiết lập nội dung bên trong đó cho vị trí @yield('content') và @yield('title'). Làm việc với database bằng lệnh trong Laravel Thông thường khi muốn tạo ra một cơ sở dữ liệu và các bảng dữ liệu thì phải vào trong hệ quản trị cơ sở dữ liệu phpMyadmin để tạo bằng phương pháp thủ công, nhưng đối với cách này thì làm mất khá nhiều thời gian trong việc tạo cơ sở dữ liệu hay chỉnh sửa cơ sở dữ liệu. Chính vì vậy Laravel cung cấp cho chúng ta một giải pháp rất tuyệt vời đó chính là Migrations và Schema Buider để thực hiện thiết kế và quản lý cơ sở dữ liệu.
Sử dụng Query Builder trong Laravel Query Buider trong Laravel giúp chúng ta trong việc thao tác đến cơ sở dữ liệu một cách thuận lợi hơn, với những câu lệnh truy vấn từ cơ sở dữ liệu. Nó thường được sử dụng để thực hiện hầu hết những thao tác về cơ sở dữ liệu trong ứng dụng, và làm việc với tất cả cơ sở dữ liệu được hỗ trợ. a) Truy vấn dữ liệu bằng QueryBuider trong laravel - 13 - Lấy tất cả dữ liệu trong bảng sử dụng câu lệnh: DB::table('tên bảng') -> get(); Ví dụ: $user=DB::table('users')->get(); print_r($user); Kết quả trả về là: Array( [0] => stdClass Object ( [id] => 1, [name] => Nguyễn văn A ), [1] => stdClass Object ( [id] => 2, [name] => Nguyễn văn B ) ) Lấy một dòng dữ liệu từ CSDL sử dụng câu lệnh: DB::table('tên bảng')->where('tên cột', 'điều kiện')->first(); Sử dụng mệnh đề select : DB::table('tên bảng')->select('tên cột 1', 'tên cột 2',.)->get(); Sử dụng mệnh đề where thêm điều kiện: DB::table('tên bảng')->where('tên cột', 'diều kiện', giá trị so sánh) ->get(); Sử dụng mệnh đề or where: DB::table('tên bảng')->where('tên cột', giá trị') ->orWhere('tên cột', giá trị)->get(); Sử dụng mệnh đề where between: DB::table('tên bảng')->whereBetween('tên cột', - 14 - [giá trị bắt đầu,giá trị kết thúc])->get(); Sử dụng OrderBy, GroupBy và Having: DB::table('tên bảng')->orderBy('tên cột cần order','DESC') ->groupBy('trường cần gộp') ->having('tên cột', 'điều kiện', 'giá trị só sánh') ->get(); Sử dụng limit: DB::table('tên bảng')->skip('giá trị bắt đầu cần lấy') ->take('số lượng record cần lấy')->get(); Join bảng dữ liệu: DB::table('tên bảng1') ->join( 'tên bảng 2', 'tên bảng 1.khóa chính', '=','tên bảng 2.khóa ngoại' )->get(); Left join: DB::table('tên bảng 1') ->leftJoin( 'tên bảng 2', 'tên bảng 1. khóa chính','=', 'tên bảng 2.khóa ngoại' )->get(); Sử dụng hàm: DB::table('tên bảng')->count(); DB::table('tên bảng')->max('cột cần lấy giá trị max'); DB::table('tên bảng')->min('cột cần lấy giá trị min'); DB::table('tên bảng')->avg('cột cần avg'); DB::table('tên bảng')->sum('tên cột cần sum'); Chèn dữ liệu vào bảng: DB::table('tên bảng')->insert( ['tên cột 1' => 'giá trị', 'tên cột 2' => 'giá trị'] ); Update dữ liệu: - 15 - DB::table('tên bảng')->where('tên cột', 'giá trị')->update( [ 'tên cột 1' => 'giá trị cần update', 'tên cột 2' => 'giá trị cần update' ] ); Delete dữ liệu: DB::table('tên bảng')->where('tên cột', 'điều kiện', 'giá trị') ->delete(); b) Sử dụng Eloquent ORM trong laravel Eloquent trong Laravel chính là một ORM(Object-relational mapping) cung cấp các activeRecord đơn giản nhưng vô cùng chuyên nghiệp giúp chúng ta làm việc với cơ sở dữ liệu thuận tiện hơn.
Để sử dụng được eloquent ORM trong Laravel trước tiên ta phải tạo model bằng cách ở trên. Ví dụ: class User extends Eloquent{ protected $table = 'users'; } + Khi model được định nghĩa là chúng ta có thể thao tác trên nó, và lớp model đều phải kế thừa từ lớp Eloquent. + Thuộc tính $table sẽ khai báo bảng dữ liệu mà ta sẽ thao tác. Lấy dữ liệu bằng eloquent ORM trong laravel Lấy tất cả dữ liệu của bảng: $data= App\Models\Tên model::all(); Lấy một dữ liệu theo khóa chính: $data= App\Models\Tên model :: find(giá trị); Truy vấn sử dụng Eloquent ORM: $data= App\Models\Tên model :: where ( - 16 - 'tên cột', 'điều kiện', giá trị )->take(giá trị records cần lấy)->get(); Sử dụng hàm trong Eloquent ORM: $count = App\Models\Tên model :: where( 'tên cột', 'điều kiện', giá trị )->count(); Thêm dữ liệu (Insert) bằng Eloquent ORM: $insert = new tên model (); $insert → tên cột của bảng = giá trị; $insert → save(); hoặc $tên model :: create( [ 'tên cột 1' => 'giá trị', 'tên cột 2' => 'giá trị' ] ); Cập nhật dữ liệu (Update) bằng Eloquent ORM: $update = $ tên model :: find('id record cần cập nhật'); $update → tên cột cần cập nhật = giá trị cập nhật; $update → save(); Xóa dữ liệu (Delete) bằng Eloquent ORM: $delete= $ tên model :: find(id record cần xóa'); $delete->delete(); hoặc $delete = $tên model :: detroy(['id record cần xóa']); Xóa nhiều reocords $delete = $tên model :: detroy( ['id record 1', 'id record 2' ,'id record 3'] ); - 17 - 2.