Thứ Sáu, 23 tháng 10, 2015

Tìm Hiểu Khái Niệm Route Trong Laravel 5.1


Trong bài hướng dẫn này tôi sẽ hướng dẫn các 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 5.1 . Có thế nói đây là thế mạnh tuyệt vời của Laravel , giúp cho người sử dụng có thêm nhiều lựa chọn trong việc viết ứng dụng. Nếu các bạn đã từng làm việc với các framework chắc không còn lạ lẫm với khái niệm 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.



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ápclosure quen thuộc trong javascript để thực thi điều đó.
Một ví dụ nhỏ để các bạn hiểu thêm về nó.

Bạn thấy đấy, khi người dũng gõ từ đường dẫn cụ thể. Ví dụ: localhost/laravel/public/abc thì nội dung hiển thị ra bên ngoài sẽ là "Tự Học Lập Trình Laravel 5.1 Tại Tutlaravel.blogpost.com" phải không nào.

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.

Vậy để thực thi được nó, ta cần đi từ sự cơ bản nhất nào. Nếu bạn chưa thực sự cài đặt được laravel, xin hãy dành thời gian xem lại bài Bắt Đầu Với Laravel : Cài Đặt Laravel Framework 5.1.


Để 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:

1
2
3
Route::method('Tên định danh', Tham số );

Method trong laravel xây dựng dựa trên Restful vì thế, nếu có dịp tôi sẽ đề cập về nó cho bạn hiểu rõ trong những bài sau. Nhưng cơ bản là nó có các cơ chế: post, get, put, delete, any.

Với post: dành cho các thao tác lấy từ form như thêm record.

Với 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.

Với put: dành cho thao tác lấy từ form nhưng là cập nhật record.

Với delete: dành cho các thao tác thực thi hành động xóa bỏ.

Với any: là sự tổng hợp của các thao tác ở trên.

Tuy là có 5 method nhưng chúng ta chỉ quan tâm đến 2 method chính là get và post mà thôi. Ngoài ra còn có method macth dùng để kết hợp sử dụng cùng lúc nhiều method khác nhau đã nêu ở trên.

Tên định danh nghĩa là chúng ta chỉ ra đường link mong muốn trong ứng dụng.

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,...

Tới đây, chúng ta thấy với sự đa dạng trong tham số, ta hoàn toàn có thể kết hợp để tạo ra những mong muốn tùy thích dễ dàng phải không nào.

Việc cấu hình router đều nằm tại file  app/Http/routes.php
Route::get('/', function () {
    return 'Hello World';
});

Route::post('foo/bar', function () {
    return 'Hello World';
});

Route::put('foo/bar', function () {
    //
});

Route::delete('foo/bar', function () {
    //
});

Route::match(['get', 'post'], '/', function () {
    return 'Hello World';
});
Route::any('foo', function () {
    return 'Hello World';
});
Kết hợp controller vào router.
Route::get('user/profile','UserController@showProfile');
Có nghĩa là khi truy cập link localhost/laravel-5-1/public/user/profile nó sẽ gọi controller UserController với action showProfile.
Nếu bạn mong muốn gởi kèm một tham số thì sao ?. Chuyện đó không khó, 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::get('user/{id}', function ($id) {
    return 'User '.$id;
});
Bạn cũng có thể gởi kèm nhiều tham số:
Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) {
    //
});
Nhiều bạn sẽ thắc mắc, lỡ như tham số của chúng ta không phải lúc nào cũng có thì sao ?. Laravel đã tính dùm bạn rồi, nếu bạn không chắc việc tồn tại của đối số đó bạn hãy khai báo thêm dấu ? trong route và thiết lập nó trong function cho hợp lý.
Route::get('user/{name?}', function ($name = null) {
    return $name;
});

Route::get('user/{name?}', function ($name = 'John') {
    return $name;
});
Như thế là xong thôi, đơn giản phải không nào.

Hãy cẩn thận với việc tiếp nhận đối số, vì đối số cũng là 1 trong những thứ hacker dùng để khai thác website của bạn. Vì thế, bạn cũng nên có sự kiểm soát đối số cho phù hợp với mong muốn trước khi dùng nó cho công việc nào đó của bạn.

Laravel giúp bạn làm điều đó như sau:
Route::get('user/{name}', function ($name) {
    //
})
->where('name', '[A-Za-z]+');

Route::get('user/{id}', function ($id) {
    //
})
->where('id', '[0-9]+');

Route::get('user/{id}/{name}', function ($id, $name) {
    //
})
->where(['id' => '[0-9]+', 'name' => '[a-z]+']);
Bạn thấy đấy, ta kết hợp thêm phương thức where() để yêu cầu dữ liệu phải là số thì mới có thể được thực thi. Điều đó sẽ đảm bảo cho bạn an toàn hơn trước những kế hoạch quậy phá của hacker.

Routing trong laravel là một chủ đề dài, và trong 1 vài bài viết tôi khó có thể chia sẻ hết cho bạn. Vì Route trải rộng trên hầu hết các vấn đề trong laravel, do vậy nếu nói trước trong thời điểm mới này sẽ khiến các bạn rơi vào trạng thái ngán ngẩm. Nên tôi sẽ chọn những thời điểm thích hợp để nói về route cho các bạn đỡ cảm thấy chán ngán với nó. Còn vấn đề tiếp theo của chúng ta lúc này là nên nói về view. Một trong những thành phần mà đi đâu ta cũng dùng, làm gì thì cũng phải đụng tới nó.


Cảm ơn các bạn đã theo dõi bài viết, mọi thắc mắc hay góp ý các bạn cứ để lại đánh giá bên dưới. Chào thân ái và quyết thắng !

Không có nhận xét nào:

Đăng nhận xét