12/08/2018, 13:39

Những tính năng đáng được mong đợi trong Laravel 5.3

Hội nghị Laracon US 2016 sạch vé Hội nghị Laracon US 2016 là một trong những hội nghị lớn được mong chờ nhất trong năm 2016 đối với cộng đồng Laravel nói riêng và PHP nói chung. Nó diễn ra trong 3 ngày từ ngày 27 đến 29 tháng 7 năm 2016 và mục tiêu là released bản Laravel 5.3. Hội nghị ...

Hội nghị Laracon US 2016 sạch vé

Laracon is sold out!

Hội nghị Laracon US 2016 là một trong những hội nghị lớn được mong chờ nhất trong năm 2016 đối với cộng đồng Laravel nói riêng và PHP nói chung. Nó diễn ra trong 3 ngày từ ngày 27 đến 29 tháng 7 năm 2016 và mục tiêu là released bản Laravel 5.3.

Hội nghị lần quy tụ đầy đủ những nhân vật quan trọng làm nên tên tuổi của Laravel, các nhân vật sẽ trình bày những nội dung quan trọng trong lần release lần này.

Bài viết này chúng ta sẽ có những cái nhìn sớm và đáng mong đợi về laravel 5.3

Giới thiệu về Laravel Echo

Trong tháng 5 năm 2016, Taylor Otwell trình bày trên Laracasts giới thiệu Laravel Echo sử dụng Laravel Spark là một trong những điểm mới trong Laravel 5.3.

Laravel Echo về cơ bản làm cho nó dễ dàng hơn để làm việc với các web sockets bằng cách loại bỏ tất cả những phức tạp liên quan trong việc đưa ra các ứng dụng web thời gian thực trực quan. Không có tài liệu nào về Laravel Echo vì vậy tôi sẽ không đi sâu vào cách tạo một mẫu ứng dụng thời gian thực. Bạn có thể sửa đổi với Laravel Echo theo một trong các cách sau đây:

  1. Xem screencast video của Taylor Otwell về làm thế nào để tạo ra một ứng dụng thời gian thực cần làm đơn giản với Vue.js, Laravel Spark và Laravel Echo
  2. Hãy xem Matt Stauffer's blogpost về cách bắt đầu với Laravel tiếng vang trong việc tạo ra một ứng dụng chat đơn giản.

Giới thiệu về biến $loop

Laravel's blade cung cấp các chi phối thuận tiện cho làm việc với các cấu trúc lặp và điều khiển của PHP.

Nhìn vào cấu trúc vòng lặp, Laravel cho phép chúng ta lặp qua các dữ liệu một cách dễ dàng.

<ul>
@for($i = 0; $i < 10; $i++)
  <li>{{ $i }}</li>
@endfor
</ul>

@foreach($users as $user)
  <p>{{ $user->name }}</p>
@endforeach

Laravel 5.3 sẽ được giới thiệu một biến $loop mới sẽ có sẵn cho mỗi lần lặp trong vòng lặp @foreach. Biến vòng lặp sẽ có một số tính chất sau đây:

  1. first giá trị Boolean để đánh giá đúng về phiên đầu tiên.
  2. last giá trị Boolean để đánh giá đúng trên lặp cuối cùng.
  3. index có giá trị là 1 ở vòng lặp đầu tiên
  4. count số lượng của các item trong toàn bộ vòng lặp
  5. remaining Số lượng các hạng mục còn lại trong vòng lặp. Đối với n các mục trong một vòng lặp với vị trí hiện tại là 4, giá trị này sẽ được n-4
  6. depth Giá trị số nguyên của chiều sâu của vòng lặp.
  7. parent Trả về một tham chiếu đến các biến cha của $loop cho một vòng lặp foreach với độ sâu lớn hơn 1, nếu không, null cho một vòng lặp với độ sâu 1.

Điều này có nghĩa là bạn sẽ có thể làm những điều lý thú như:

// show tên và vị trí của cầu thủ trong đội hình
@foreach($leaderboard as $player)
  <p>{{ $player->name }} - {{ $loop->index }} of {{ $loop->count }}</p>
@endforeach

// Thêm một số hiệu ứng đặc biệt cho các hạng mục đầu tiên và cuối cùng trong vòng lặp
@foreach($leaderboard as $player)

  @if($loop->first)
    <p class="winner">{{ player->name }}</p>
    @continue
  endif

  @if($loop->last)
    <p class="loser">{{ player->name }}</p>
    @continue
  endif

  <p>{{ $player->name }}</p>

@endforeach

Giới thiệu các truy vấn cột trong Json và phương thức cập nhật

Trong khi trả lại dữ liệu từ một database model trả về dữ liệu JSON, điều này đã chỉ đơn thuần là một mảng có thể được chuyển đổi sang định dạng JSON.

Trong Laravel 5.3, bây giờ bạn có thể mong đợi một cách mới của truy vấn và cập nhật dữ liệu dựa trên các thuộc tính JSON.

Điều này có ý nghĩa gì với bạn?

Tôi lấy một ví dụ ta có bảng players, bảng players được thiết kế như sau:

Schema::create('players', function (Blueprint $table) {
    $table->increments('id');
    $table->string('name');
    $table->date('dob');
    $table->string('phone_number');
    $table->string('email');
    $table->json('stats');
    $table->timestamps();
});

Lấy một bộ dữ liệu mẫu như bên dưới đây ta có thể truy vấn và update dữ liệu dựa trên số liệu thống kê của mỗi một người chơi sử dụng dấu mũi tên như sau:

{
  "id": 1,
  "name": "John Kariuki",
  "dob": "2016-06-07",
  "phone_number": "XXXXXXXXXX",
  "email": "player@example.com",
  "stats": {
    "goals": 20,
    "red_cards": 2,
    "yellow_cards": 3,
    "benched": false
  }
}

Query Json Data sử dụng phương thức where()

Để có được một danh sách của tất cả các cầu thủ với 20 bàn thắng, chúng tôi sẽ thực hiện một truy vấn where() có hai tham số. Đầu tiên là tên trường json với một ký hiệu mũi tên ứng với tên thuộc tính, và phần thứ hai là giá trị tương ứng của thuộc tính đó.

DB::table('players')
    ->where('stats->goals', 20)
    ->get();

Update dữ liệu Json sử dụng phương thức update

Chúng ta có thể cập nhật dữ liệu trường Json bằng một điều kiện nào đó

DB::table('players')
    ->where('stats->red_cars', '>', 3)
    ->update(['stats->benched' => true]);

Mặc dù khá tiện dụng nhưng Laravel 5.3 muốn sử dụng được truy vấn, cập nhật Json Data thì bắt buộc môi trường phải có MySQL 5.7 and PostgreSQL 9.5

Cho phép thêm giá trị để hệ thống pass qua hàm firstOrCreat

Hàm firstOrCreate cho phép thêm tham số để tiện cho code ngắn gọn dễ hiểu. Một ví dụ đơn giản để bạn hiểu:

// Trước đây việc viết code sử dụng hàm firstOrNew ta phải phải làm các bước như thế này
$site = Site::firstOrNew(['user_name', 'viblo']);

if (! $site->exists) {
    $site->fill(['website' => 'https://viblo.asia'])->save();
}

// Bây giờ chúng ta có thể viết một cách ngắn gọn thế này

return Site::firstOrCreate(
    ['user_name', 'viblo'],
    ['website' => 'https://viblo.asia']
);

return $site;

Giới thiệu toán tử trong Collection::where()

Như các bạn đã biết thì trong phiên bản Laravel 5.2 sử dụng where với cặp key value nhất thống, nghĩa là chỉ sử dụng với câu điều kiện dạng so sánh nhất quán. Sang đến phiên bản 5.3 collection với where thêm nhiều tham số toán tử hơn cho phép bạn query với điều kiện chính xác hơn. Qua ví dụ sau ta sẽ hiểu rõ hơn

$players = collect([
    ['name' => 'John', 'age' => 20],
    ['name' => 'Jane', 'age' => 21],
    ['name' => 'June', 'age' => 22],
    ['name' => 'Alex', 'age' => 23],
    ['name' => 'Jude', 'age' => 24],
    ['name' => 'Luke', 'age' => '24'],
]);

$players->where('age', 23);
///['name' => 'Alex', 'age' => 23]

$players->where('age', '==', 24);
/*
    ['name' => 'Jude', 'age' => 24],
    ['name' => 'Luke', 'age' => '24']
 */

$players->where('age', '===', 24);
//['name' => 'Jude', 'age' => 24]

$players->where('age', '<=', 22);
/*
    ['name' => 'John', 'age' => 20],
    ['name' => 'Jane', 'age' => 21],
    ['name' => 'June', 'age' => 22]
 */

Tổng hợp toàn bộ tham số toán tử có thể dùng được với where trong laravel 5.3: = == === != !== <= >= < > <> .

Query Builder trả về một Collection

Trong Laravel 5.2, những người xây dựng truy vấn cơ sở dữ liệu trả về một mảng nơi mỗi kết quả là một instancce của đối tượng PHP stdClass.

Trong Laravel 5.3 chúng ta sẽ có kết quả của query builder là một collection, điều này khá thuận tiện cho chúng ta tiếp tục sử dụng eloquent trong truy vấn và thao tác với dữ liệu

Các tiện ích mới trong migration

Hỗ trợ nhiều đường dẫn migration

Laravel 5.3 hỗ trợ nhiều đường dẫn migration thông qua service provider

$this->loadMigrationsFrom('path/to/your/migrations/folder')

Bằng cách này chúng ta khá dễ dàng migration dữ liệu ngay trong project và tiện lợi như php artisan migrate

ROLLBACK BACK MIGRATIONS

Laravel 5.3 được thiết lập để cung cấp một tùy chọn mới để cho phép bạn rollback với một tham số truyền số bước rollback

php artisan migrate:rollback --step=1

Kết luận

Rất có thể Laravel 5.3 hỗ trợ cả PHP 5.6, PHP 7 và HHVM, những gì thay đổi trong 5.3 có thể không nhiều nhưng những cập nhật này hết sức thú vị, chúng ta cùng chờ một vài ngày nữa xem bản chính thức sẽ như thế nào nhé.

0