Theo https://laravel-news.com/laravel-8-release-date thì laravel 8 sẽ được ra mắt vào ngày 8/9 tới đây. Team phát triển của laravel sẽ release bản mới 6 tháng 1 lần với những thay đổi quan trọng. Trong bản update lần này sẽ có rất nhiều thay đổi và cải tiến
Job Batching
Giờ batching job sẽ dễ dàng hơn với Bus::batch()
. Bạn chỉ cần truyền tất cả các job vào trong Bus::batch()
và hãy xem điều kì diệu nhé
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | Bus<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token function">batch</span><span class="token punctuation">(</span><span class="token punctuation">[</span> <span class="token keyword">new</span> <span class="token class-name">Job1</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token keyword">new</span> <span class="token class-name">Job2</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">then</span><span class="token punctuation">(</span><span class="token keyword">function</span> <span class="token punctuation">(</span>Batch <span class="token variable">$batch</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$batch</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">hasFailures</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// die</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">success</span><span class="token punctuation">(</span><span class="token keyword">function</span> <span class="token punctuation">(</span>Batch <span class="token variable">$batch</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token comment">//invoked when all job completed</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">></span><span class="token keyword">catch</span><span class="token punctuation">(</span><span class="token keyword">function</span> <span class="token punctuation">(</span>Batch <span class="token variable">$batch</span><span class="token punctuation">,</span><span class="token variable">$e</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token comment">//invoked when first job failure</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">allowFailures</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">dispatch</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
và đây sẽ là kết quả trả về
Bạn có thể tìm kiếm thông tin của batch bằng Bus::findBatch(batchId)
Thư mục model mới
Giờ trong bản 8, thư mục mặc định của model sẽ là app/Models
chứ không còn được tạo mặc định ở app
nữa
Laravel Jetstream
Đây là một package mới của laravel 8 và nó sẽ mang tới cho bạn khởi đầu tuyệt vời hơn. Nó mang rất nhiều tính năng như: quản lý người dùng, xác thực 2 yếu tố, quản lý các phiên trình duyệt, quản lý api token, … Còn rất nhiều thứ nữa các bạn có thể tìm hiểu thêm ở đây:
https://github.com/laravel/jetstream
Laravel factory
Giờ đây chúng ta có thể seed dữ liệu từ model một cách dễ dàng hơn với sự cải tiến mới của factory.
1 2 3 4 | Route<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'test-factory'</span><span class="token punctuation">,</span><span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token keyword">return</span> User<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token function">factory</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">create</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
1 2 3 4 | Route<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'test-factory'</span><span class="token punctuation">,</span><span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token keyword">return</span> User<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token function">factory</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">times</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">create</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
Migration Squashing
Giờ chúng ta sẽ có câu lệnh mới php artisan schema:dump
. Chắc hẳn trong khi build dự án, việc liên tục tạo ra các file migrations sẽ khiến cho folder đó có vô cùng nhiều file. Và bạn có thể squash
tất cả các file migrations vào 1 file sql.
Nâng cấp rate limiting
Rate limiters được định nghĩa bởi RateLimiter
. Phương thức for
nhận vào tên và Closure
trả về thiết lập được áp dụng cho route
1 2 3 4 5 6 7 | <span class="token keyword">use</span> <span class="token package">Illuminate<span class="token punctuation"></span>Cache<span class="token punctuation"></span>RateLimiting<span class="token punctuation"></span>Limit</span><span class="token punctuation">;</span> <span class="token keyword">use</span> <span class="token package">Illuminate<span class="token punctuation"></span>Support<span class="token punctuation"></span>Facades<span class="token punctuation"></span>RateLimiter</span><span class="token punctuation">;</span> RateLimiter<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token keyword">for</span><span class="token punctuation">(</span><span class="token single-quoted-string string">'global'</span><span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span>Request <span class="token variable">$request</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> Limit<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token function">perMinute</span><span class="token punctuation">(</span><span class="token number">1000</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
Time Testing Helpers
Khi tiến hành test, bạn có thể dễ dàng “du hành thời gian” với tính năng mới này của Laravel
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">testTimeCanBeManipulated</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// Travel into the future...</span> <span class="token variable">$this</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">travel</span><span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">milliseconds</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$this</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">travel</span><span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">seconds</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$this</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">travel</span><span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">minutes</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$this</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">travel</span><span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">hours</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$this</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">travel</span><span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">days</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$this</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">travel</span><span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">weeks</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$this</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">travel</span><span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">years</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// Travel into the past...</span> <span class="token variable">$this</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">travel</span><span class="token punctuation">(</span><span class="token operator">-</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">hours</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// Travel to an explicit time...</span> <span class="token variable">$this</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">travelTo</span><span class="token punctuation">(</span><span class="token function">now</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">subHours</span><span class="token punctuation">(</span><span class="token number">6</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// Return back to the present time...</span> <span class="token variable">$this</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">travelBack</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> |
Dynamic Blade Components
Nếu bạn có nhiều components và mỗi một thời điểm khác nhau bạn cần gọi tới một components khác nhau thì đây sẽ là một tính năng giúp ích cho bạn
1 2 | <span class="token operator"><</span>x<span class="token operator">-</span>dynamic<span class="token operator">-</span>component <span class="token punctuation">:</span>component<span class="token operator">=</span><span class="token double-quoted-string string">"<span class="token interpolation"><span class="token variable">$componentName</span></span>"</span> <span class="token operator">/</span><span class="token operator">></span> |
Nâng cấp Maintenance Mode
Trong các phiên bản trước, khi ở chế độ maintenance thì vẫn có thể truy cập vào app bằng việc thiết lập một danh sách địa chỉ IP được phép truy cấp. Ở bản cập nhập này thì tính năng đó đã được loại bỏ và thay vào đó là sử dụng secret
Khi ở chế độ maintenance, bạn có thể đưa vào 1 bypass token:
1 2 | php artisan down --secret="1630542a-246b-4b66-afa1-dd72a4c43515" |
Và sau đó bạn có thể truy cập vào app bằng cách
1 2 | https://example.com/1630542a-246b-4b66-afa1-dd72a4c43515 |
Bạn cũng có thể đưa vào thêm các options khác
1 2 | php artisan down --redirect=/ --status=200 --secret=1630542a-246b-4b66-afa1-dd72a4c43515 --render="errors::503" |
Đoạn này có ý nghĩa là:
- Đưa app về chế độ maintenance
- Redirect tất cả các routes về
/
- Đặt status code là 200
- Đặt bypass token là
1630542a-246b-4b66-afa1-dd72a4c43515
- Render errors 503
Nâng cấp serve
Trong bản 8, laravel đã support chúng ta restart lại app mỗi khi .env
có sự thay đổi. Việc này sẽ giúp chúng ta không phải chạy lại php artisan serve
mỗi lần thay đổi .env
nữa.
Ở đây mình chỉ nêu ra một số thay đổi, vẫn còn thêm vài thay đổi nữa, bạn có thể tìm đọc thêm ở link dưới nhé