TÌM HIỂU LARAVEL FRAMEWORK 4.X
Bài đăng này đã không được cập nhật trong 3 năm
Laravel ra mắt vào cuối tháng 04-2011 nhưng đã gây được sự chú ý lớn đối với cộng đồng PHP framework. Laravel được tạo ra bởi Taylor Otwell. Nó là 1 framework khá mới mẻ nhưng bù lại nó có “hướng dẫn sử dụng” ( Document ) khá đầy đủ, rõ ràng và dễ hiểu và nhiều ưu điểm hấp dẫn. Nếu bạn đã từng làm việc với các framework khác hoặc chỉ là người mới bắt đầu tìm hiểu php framework thì việc tiếp cận laravel framework không phải là vấn đề khó khăn gì. Laravel Frameword vẫn sử dụng cấu trúc MVC và trên nền tảng lập trình hướng đối tượng OOP đồng thời kế thừa được sức mạnh của các đàn anh và đem đến những tính năng mới của PHP 5.3 trở lên. Chúng ta hãy điểm qua một số tính năng mạnh mẽ của Laravel .
** 1/ Route trong Laravel thật sự khác biệt, mới mẻ và đầy mạnh mẻ.**
** 2/ Master layout được tích hợp sẵn cùng Blade template giúp code của chúng ta trên nên gọn gàng và tiện dụng.**
**3/ Migration quản lý database thật dễ dàng khi làm việc đội nhóm. **
** 4/ Eloquent class đầy mạnh mẽ nổi bật khi xử lý cơ sở dữ liệu quan hệ 1 – N và N – N.**
5/ Composer quản lý và tích hợp các thư viện khác thật hay và không lo lắng khi thư viện đó bị thay đổi.
6/ Document dễ đọc và dễ hiểu.
7/ Eloquent ORM: đây là một ORM tuyệt vời với khả năng migration data và làm việc tốt với MySQL, Postgres, SQL Server và SQLite.
Và còn nhiều những chức năng khác…
Laravel là một PHP Framework. Nó giảm bớt các tác vụ thường gặp của các trang web như authentication, routing, sessions, và caching. Nó ra đời vào tháng 04/2011, có lẽ là khá mới mẻ, nhưng cũng chính vì ra đời muộn màng như thế đã buộc nó phải học hỏi cái hay từ các PHP Framework đàn anh đi trước. Không những là các PHP Framework, nó còn học cái hay từ Ruby on Rails, ASP.NET MVC, và Sinatra.
Tham khảo best PHP frameworks 2014 http://www.sitepoint.com/best-php-frameworks-2014/, ta thấy Laravel đang được cộng đồng đánh giá cao: chart1-1024x853
I. Hướng dẫn cài đặt và chạy ví dụ đầu tiên với Laravel Framwork 4.x ( yêu cầu php 5.5 )
- Đầu tiên, các bạn tải bộ thư mục gốc của Laravel 4 tại đây! Sau đó giải nén, vào copy vào thư mục “htdocs” của Xampp .
2.Thứ 2 là tải composer, bạn vào địa chỉ này, vào mục Download và tải“Latest Snapshot” , bạn sẽ tải về 1 file là “composer.phar“. Copy file này vào thư mục gốc của Laravel 4 mà bạn vừa copy vào thư mục “htdocs” ở trên. (lưu ý: để cài được composer trước tiên các bạn phải chắc chắn là đã bật** php_openssl.dll trong php.ini** )
composer cho phép chúng ta quản lý dưới dạng gói. Và khi chúng ta quản lý dưới dạng gói như vậy , chúng ta có thể dễ dàng tích hợp, quản lý , sử dụng tất cả cách thư viện từ bên ngoài vào trong Framwork hiện hành của chúng ta.
Bây giờ để install được nó 1 cách chọn vẹn. chúng ta cần sử dụng command line.
Chúng ta di chuyển đến thư mục Laravel-master. sau đó gõ câu lệnh cài đặt composer.phar. do download trực tiếp từ website, nên cài bước này sẽ hơi lâu.
Sau khi download xong, chúng ta kiểm tra trong thư mục htdocss-> laravel-master ta sẽ thấy thư mục vender mới xuất hiện. Đây là thư mục chứa các thư viện của bên thứ 3.
Laravel 4 cũng có sự tích hợp của một phần trong thư viện symfony và áp dụng triệt để mô hình ORM với khái niệm liên quan đến Eloquent class. Đồng thời, nó cũng giải quyết được những vấn đề mà các framework khác đang mắc phải. Chẳng hạn như master layout, mô hình xử lý với ORM, event model,….
Tiếp theo chúng ta chạy thử xem đã cài đặt thành công chưa. nếu hiện thị như hình bên dưới đây, thì coi như chúng ta đã cài đặt thành công rồi nhé.
II. Tìm hiểu khái niệm Route
Nguồn tham khảo: http://laravel.com/docs/4.2/routing . Doc của Lavarel viết rất rõ và dễ hiểu, các bạn có thể vào đó để đọc và thực hành theo.
Trong phần này, Mình sẽ hướng dẫn bạn thao tác làm việc với Router và các khái niệm view cơ bản trong laravel framework. Có thể nói đây là thế mạnh tuyệt vời của Laravel, nó giúp người sử dụng có thêm nhiều tùy chọn trong việc viết ứng dụng. Nếu các bạn đã từng làm việc qua với các framework khác thì hẳn sẽ không còn xa lạ gì với khái niệm về Router. Mục đích của router là định tuyến đến những controller cụ thể nào từ phía request của người sử dụng. Đây cũng là điều dễ thấy trong các PHP Framework phổ biến hiện nay.
Nhưng với laravel framework, chúng ta có thể thấy được sự khác biệt rõ ràng với route. Bạn có thể không cần thiết phải tạo ra controller mà thực thi những công việc mong muốn 1 cách trực tiếp tại route dễ dàng. Bởi kết hợp theo phương pháp closure quen thuộc trong javascript để thực thi điều đó.
Mở file app/routes.php.
A. Routing bacsic: Ví dụ:
Route::get('/framgia', function()
{
return 'Hello Framgia';
});
run : localhost/laravelmaster/public/framgia thì nội dung hiển thị sẽ là “Hello Framgia”. Chúng ta, có thể tùy biến lên cao nhất với route một cách dễ dàng trong laravel framework. Đây là điều mà các PHP Framework hiện nay vẫn chưa thể làm được một cách hoàn hảo như Laravel. Để làm việc được với route trước hết ta tiếp xúc chúng với công thức cơ bản như sau:
Route::method('Tên định danh',Tham số)
Method: là get, post, any, put, Any( các bạn tham khảo chi tiết tại đây http://laravel.com/docs/4.2/routing)
Post: dành cho các thao tác lấy từ form như thêm record.
Get: 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.
Put: dành cho thao tác lấy từ form nhưng là cập nhật record.
Any: là sự tổng hợp của các thao tác ở trên.
Tham số: Những thao tác mà chúng ta mong muốn với định danh trên. Tham số có thể là hàm xử lý, có thể là array() chứa các thông tin xử lý khác, có thể là sự ám chỉ cụ thể 1 controller nào đó cho định danh.
Route::get("/home","HomeController@showWelcome");
khi truy cập đường link: localhost/laravelmaster/public/home nó sẽ gọi controller Home với action là showWelcome.
Route theo kiểu post , được sử dụng khi ta đẩy dữ liệu lên server, ví dụ: khi ta đăng ký user mới
Route::post('foo/bar', function()
{
return 'Hello World';
});
Khi chúng ta muốn sử dụng cả hay phương thức trên thì chúng ta có thể sử dụng như sau:
Route::any('foo', function()
{
return 'Hello World';
});
Nếu bạn muốn gởi kèm một tham số , trong laravel ta định danh tham số dựa vào ký tự sau:** {tên}**. Và ở function thiết lập ta xem nó như đối số trong hàm.
//route có tham số
Route::get('user/{id}', function($id)
{
return 'User '.$id;
});
//route có tham số mặc định
Route::get('user/{name?}', function($name = 'John')
{
return $name;
});
//Route ràng buộc bởi biểu thức.
Route::get('user/{name}', function($name)
{
//
})
->where('name', '[A-Za-z]+');
Route::get('user/{id}', function($id)
{
//
})
->where('id', '[0-9]+');
//truyền một mảng
Route::get('user/{id}/{name}', function($id, $name)
{
//
})
->where(array('id' => '[0-9]+', 'name' => '[a-z]+'))
B: Route có filters Route có filter là cái cách ta tạo ra khi muốn giới hạn quyền truy cập tời route nào, việc này rất hữu ích khi chúng ta phần quyền cho một user nào đó, hay khi truy cập nào một trang nào đó thì cần phải chức thực. Và filter được khai báo tại app/filters.php.
Route::filter('old', function()
{
if (Input::get('age') < 200)
{
return Redirect::to('home');
}
});
//Việc sử dụng filter cho route bằng cách như sau:
Route::get('user', array('before' => 'old', function()
{
return 'You are over 200 years old!';
}));
//áp dụng tới controller như sau
Route::get('user', array('before' => 'old', 'uses' => 'UserController@showProfile'));
//Có thể sử dụng nhiều filter trong một route
Route::get('user', array('before' => 'auth|old', function()
{
return 'You are authenticated and over 200 years old!';
}));
//Route theo tên:
Route::get('user/profile', array('as' => 'profile', function()
{
//
}));
//Bạn cũng có thể chỉ tới action controller
Route::get('user/profile', array('as' => 'profile', 'uses' => 'UserController@showProfile'));
//Bạn cũng có thể sử dụng để gen ra một route hay route trực tiếp
$url = URL::route('profile');
$redirect = Redirect::route('profile');
//truy cập tới route đang chạy bằng phương thức
$name = Route::currentRouteName();
//Đôi khi bạn cần filters tới một nhóm của route, thay vì chỉ định tới từng filter của route thì ta sử dụng route theo nhóm
Route::group(array('before' => 'auth'), function()
{
Route::get('/', function()
{
// Has Auth Filter
});
Route::get('user/profile', function()
{
// Has Auth Filter
});
});
C: Sub-Domain Routing
Route::group(array('domain' => '{account}.myapp.com'), function()
{
Route::get('user/{id}', function($account, $id)
{
//
});
});
D: Route theo tiền tố Một nhóm của route có thể được sử dụng trong một tiền tố nào đó
Route::group(array('prefix'=>'admin'),function()
{
Route::get('user',function()
{
//
});
});
Các bạn có thể vào địa chỉ http://laravel.com/docs/4.2/routing để tham khảo thêm về Route
III. View trong laravel (app/views – tham khảo http://laravel.com/docs/4.2/responses)
Để sử dụng view ta có thể sử dụng như sau.
return View::make("Tên",Đối số nếu có);
Ví dụ: trong app/route.php ta có đường dẫn sau
Route::get("name",function(){
return View::make("hoten"); // gọi file view có tên là: app/views/hoten.php
});
<!-- View stored in app/views/hoten.php -->
<html>
<body>
<h1>Hello, <?php echo $name; ?></h1>
</body>
</html>
sau đó ta tạo file app/views/hoten.php với nội dung là ” Tên tôi là tuấn” . khi chạy thử đường link http://localhost/lararel/laravelmaster/public/name thì ta sẽ thấy kết quả.
Vậy nếu ta muốn truyền đối số cho view thì sao. Bạn có nhiều cách để làm điều đó.
Cách 1: Sử dụng đối số
Route::get("name2",function(){
$data['name']= "Vu Huy Tuan";
return View::make("hoten",$data);
});
Với cách này bạn đang truyền sang view hoten.php một đối số có tên là $name mang. Do vậy tại hoten.php bạn có thể dùng nó như sau:
echo "Họ tên của bạn là: $name";
Cách 2: truyền qua 1 phương thức tên with().
Route::get("name3",function(){
return View::make('hoten')->with('name', 'Steve');
});
Và ở view hoten.php ta hoàn toàn có thể sử dụng $name dễ dàng. Nhưng với cách này, bạn sẽ rất khó để truyền nhiều giá trị cho view.
Cách 3: Sử dụng hàm compact() trong PHP.
Route::get("name4",function(){
$name = "Framgia";
return View::make("hoten",compact("name"));
});
và ở view abcd.php bạn chỉ việc sử dụng $id một cách dễ dàng.
Trong trường hợp bạn muốn thao đặt view trong thực mục cho gọn gàng. Bạn có thể sử dụng phân cách, thay vì là dấu / thì bạn sẽ dùng dấu .
Route::get("name",function(){
return View::make("demo.hoten");
});
Tổng kết:
Qua bài này, chúng ta đã hiểu được cách cài đặt, tìm hiểu router và view . Bài tiếp theo Chúng ta sẽ tìm hiểu thêm về Controller và xây dựng demo nhỏ để có thể hiểu được chi tiết về nó.
Source code https://github.com/vuhuytuan89/laravelmaster
All rights reserved