một số sự thay đổi dễ nhận biết khi chuyển từ laravel 4.2 lên 5.1
Bài đăng này đã không được cập nhật trong 3 năm
Giới thiệu
- laravel 5.1 là một bản update rất lớn so với các bản laravel 4.x.chính vì thế đối với lập trình viên đang sử dụng laravel 4.2 khi bắt đầu update lên laravel 5.1 sẽ không tránh khỏi một thoáng ngỡ ngàng.
Một số thay đổi của laravel 5.1 so với laravel 4.x
Cấu trúc thư mục
- điều dễ nhận biết nhất khi bắt đầu sử dụng là sự thay đổi cấu gần như toàn diện về cấu trúc thư mục của laravel
Việc đã quá quen với cấu trúc thư mục của laravel 4.2 nên khi update lên laravel 5.1 có vẻ khó làm quen vì nó được phân cấp nhiều hơn và có vẻ khá phức tạp.
Không thấy class Input
-
- Khi mới sử dụng laravel 5.x. Sau khi submit một form nếu ta lấy dữ liệu đầu vào giống như laravel 4.2
Input::get('aaa)
,Input::all()
hayInput::only()
thì kết quả thật sự đáng buồn: hệ thống không hiểu ta đang làm gì.
- Khi mới sử dụng laravel 5.x. Sau khi submit một form nếu ta lấy dữ liệu đầu vào giống như laravel 4.2
-
- Nguyên nhân do trong laravel 5.x trở lên đã chuyển sang sử dụng class
Request
- Nguyên nhân do trong laravel 5.x trở lên đã chuyển sang sử dụng class
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
class UserController extends Controller
{
public function update(Request $request, $id)
{
//
}
}
Cú pháp trên view thay đổi
- Trong laravel 4.2 để hiển thị dữ liệu trên view ta có thể dùng 2 cách
{{ $data }}
hoặc{{{ $data }}}
. tuy nhiên trên laravel 5.0 trở lên đã thống nhất chỉ sử dụng một kiểu gọi{!! $data !!}
Sử dụng form
Do trong laravel 5.x chưa tích hợp sẵn nên ta cần phải cài thêm gói ServiceHtmlProvider mới có thể sử dụng form bình thường
cú pháp
composer require illuminate/html
Sau khi cài xong ServiceHtmlProvider cần mở file config/app.php thêm các dòng sau
'providers' => [
.......
Illuminate\View\ViewServiceProvider::class,
];
'aliases' => [
.......
'Form' => 'Illuminate\Html\FormFacade',
'View' => 'Illuminate\Html\HtmlFacade',
]
Namespace
- Trong laravel 4.2 sau khi khai báo một class ta có thể sử dụng nó một cách tự do trên toàn poroject một cách thoải mái. tuy nhiên trong laravel 5.x sau khi tao ra một class bất kỳ. nếu muốn sử dụng nó đều cần phải sử dụng namespace.
Ví dụ :
- Trên laravel 4.2 khi tạo ra một class model và dử dụng nó trên controller hết sức đơn giản:
-
class User extends BaseModel{
......
}
class UsersController extends BaseController
{
public function __construct()
{
parent::__construct();
}
public function index()
{
$users= User::all();
}
}
- Tuy nhiên trên laravel 5.x mọi chuyện lại không đơn giản như vậy. Ta phải khai báo và gọi namespace nếu muốn sử dụng nó.
-
namespace App\Models;
class User extends BaseModel{
......
}
use App\Models\User;
class UsersController extends BaseController
{
public function __construct()
{
parent::__construct();
}
public function index()
{
$users= User::all();
}
}
- ** Tại sao lại có sự thay đổi này? **
-
- Thực ra trong các bản laravel cũ của laravel cũng đã có thể sử dụng namespace chỉ cần hệ thống hiện có cài đặt php 5.4 trở lên. Tuy nhiên trong các bản laravel 5.x họ đã bắt buộc người dùng sử dụng namespace.
-
- Với namespace ta có thể tạo ra nhiều class tên giống nhau trong cùng một project. Nó thực sử hữu ích khi ta có nhiều pakage cùng incluss vào một project.
-
- Với các project nhỏ thì việc bắt buộc phải sử dụng namespace đôi khi gây ra phiền toái. Tuy nhiên khi tạo ra một hệ thống lớn hoặc một team có nhiều thành cùng phát triển thì nó thực sự cần thiết.
Nhiều lệnh command mới
- Trong laravel 5.1 đã được bổ sung rất nhiều lệnh giúp cho việc lập trình trở lên thuận tiện hơn
Hàm mới:
make:command — Tạo mới một class Command
make:console — Tạo mới một Artisan command
make:controller — Tạo mới một controller
make:event — Tạo mới một class event
make:middleware — Tạo mới một class middleware
make:migration — Tạo mới một file migration
make:model — Tạo mới một class Eloquent model
make:provider — Tạo mới một class service provider
make:request — Tạo mới một class form request
event:generate — Tự động sinh các missing events và handlers
Một số pakage mới
Laravel 5 còn cung cấp một số pakage mới rất hữu ích như:
- middleware : chức năng tự như filter trên laravel 4. middleware cung cấp cơ chế tiện lợi hơn cho bộ lọc định tuyến của laravel
- Socialize : cung cấp phương thức đơn giản cho việc xác định thông tin đăng nhập thông qua các social. Socialize hộ trợ bốn social lớn là: facebook, google, twitter và github
- Laravel Elixir : kết hợp với node js giúp dễ dàng tạo ra các file minify css, js, html, scss giúp cho việc load web nhanh hơn.
Tổng kết
Ngoài những sự thay đổi dễ nhận biết như trên. laravel 5 còn có rất nhiều thay đổi hữu ích khác rất đáng để trải nghiệm.
All rights reserved