Xin chào mừng bạn đã ghé thăm blog của Nguyễn Văn Tiến!.Chúc bạn sức khỏe, niềm vui và an lành!.

Thứ Năm, 18 tháng 8, 2016

Tổng quan mô hình MVC, So sánh mô hình MVC và mô hình 3 lớp

Model – View – Control

  1. Tổng quan:
Vào những năm 70 của thế kỷ 20, tại phòng thí nghiệm Xerox PARC ở Palo Alto. Sự ra đời của giao diện đồ họa (Graphical User Interface - GUI) và lập trình hướng đối tượng (Object Oriented Programming - OOP) cho phép lập trình viên làm việc với những thành phần đồ họa như những đối tượng đồ họa có thuộc tính và phương thức riêng của nó. Không dừng lại ở đó, những nhà nghiên cứu ở Xerox PARC còn đi xa hơn nữa khi họ cho ra đời cái gọi là kiến trúc MVC (viết tắt của Model – View – Controller).
Kiến trúc này ngày càng được phát triển và hoàn thiện nhằm giải quyết các vấn đề phát sinh cũng như các giải pháp cho quá trình phát triển phần mềm.

  1. Các thành phần trong MVC:
Trong kiến trúc này, hệ thống được chia thành 3 tầng tương ứng đúng với tên gọi của nó (Model – View – Controller). Ở đó nhiệm vụ cụ thể của các tầng được phân chia như sau:
 

  1. Model (Tầng dữ liệu): là một đối tượng hoặc một tập hợp các đối tượng biểu diễn cho phần dữ liệu của chương trình. Nó được giao nhiệm vụ cung cấp dữ liệu cho cơ sở dữ liệu và lưu dữ liệu vào các kho chứa dữ liệu. Tất cả các nghiệp vụ logic được thực thi ở Model. Dữ liệu vào từ người dùng sẽ thông qua View đến Controller và được kiểm tra ở Model trước khi lưu vào cơ sở dữ liệu. Việc truy xuất, xác nhận, và lưu dữ liệu là một phần của Model.
alt
Hình 1: Luồng xử lý của mô hình MVC
  1. View (Tầng giao diện): là phần giao diện với người dùng, bao gồm việc hiện dữ liệu ra màn hình, cung cấp các menu, nút bấm, hộp đối thoại, chọn lựa …, để người dùng có thể thêm, xóa. sửa, tìm kiếm và làm các thao tác khác đối với dữ liệu trong hệ thống.. Thông thường, các thông tin cần hiển thị được lấy từ thành phần Models.
  2. Controller (Tầng điều khiển): là phần điều khiển của ứng dụng, điều hướng các nhiệm vụ (task) đến đúng phương thức (method) có chức năng xử lý nhiệm vụ đó. Nó chịu trách nhiệm xử lý các tác động về mặt giao diện, các thao tác đối với models, và cuối cùng là chọn một view thích hợp để hiển thị ra màn hình.
  1. Ưu điểm & nhược điểm:
  1. Ưu điểm:
Phát triển phần mềm: Có tính chuyên nghiệp hóa, có thể chia cho nhiều nhóm được đào tạo nhiều kỹ năng khác nhau, từ thiết kế mỹ thuật cho đến lập trình đến tổ chức database. Giúp phát triển ứng dụng nhanh, đơn giản, dễ nâng cấp..
Bảo trì: Với các lớp được phân chia theo như đã nói, thì các thành phần của một hệ thống dễ được thay đổi, nhưng sự thay đổi có thể được cô lập trong từng lớp, hoặc chỉ ảnh hưởng đến lớp ngay gần kề của nó, chứ không phát tán náo loạn trong cả chương trình.
Mở rộng: Với các lớp được chia theo ba lớp như đã nói, việc thêm chức năng vào cho từng lớp sẽ dễ dàng hơn là phân chia theo cách khác.
  1. Nhược điểm:
Đối với dự án nhỏ việc áp dụng mô hình MC gây cồng kềnh, tốn thời gian trong quá trình phát triển. Tốn thời gian trung chuyển dữ liệu của các tầng
  1. So sánh mô hình MVC với mô hình 3 lớp:
Hình 2: So sánh mô hình MVC với mô hình 3 lớp
Hình 2: So sánh mô hình MVC với mô hình 3 lớp
  1. Điểm giống:
Tách rời programming core/business logic ra khỏi những phụ thuộc về tài nguyên và môi trường. Presentation Layer (PL) thể hiện giống như chức năng của View và Controller. Business Layer (BL) và Data Access Layer (DL) thể hiện giống như chức năng của Model. Như thế nhìn ở góc độ này, thì MVC tương đương với 3-layer (tất nhiên có chồng chéo như hình vẽ)
  1. Điểm khác:
Trong mô hình 3 lớp, quá trình đi theo chiều dọc, bắt đầu từ PL, sang BL, rồi tới DL, và từ DL, chạy ngược lại BL rồi quay ra lại PL.
Hình 3: Mô hình 3 lớp
Hình 3: Mô hình 3 lớp
Còn trong mô hình MCD, dữ liệu được nhận bởi View, View sẽ chuyển cho Controller cập nhật vào Model, rồi sau đó dữ liệu trong Model sẽ được đưa lại cho View mà không thông qua Controller, do vậy luồng xử lý này có hình tam giác.
alt
Hình 4: Mô hình MCD

Quản lý nguồn nhân lực dự án (Human Resource Management Plan)

Lập kế hoạch quản lý nguồn nhân lực dự án (Plan Human Resource Management )

  • Kế hoạch quản lý nguồn nhân lực dự án là quá trình xác định và tài liệu hóa các vai trò (project roles), trách nhiệm (responsibilities), kỹ năng cần thiết, mối quan hệ giữa các roles và tạo kế hoạch quản lý nhân viên trong một dự án. Lợi ích chính yếu của quá trình này là nó thiết lập được vai trò, trách nhiệm trong dự án cho mỗi cá nhân, sơ đồ tổ chức dự án, và kế hoạch quản lý nhân sự bao gồm việc khi nào thì cần người đổ vào dự án khi nào thì rút người ra. Các input đầu vào, kỹ thuật áp dụng và đầu ra của quá trình này các bạn có thể tham khảo hình bên dưới.
HumanResource_1.png
  • Việc lập kế hoạch quản lý nguồn nhân lực được sử dụng để xác định và nhận biết nguồn nhân lực cùng các kỹ năng cần thiết cho sự thành công của dự án. Ngoài những điểm đã đề cập ở trên như vai trò, trách nhiệm, thời gian load người vào dự án, thời gian release người khỏi dự án thì nó còn chỉ ra nhu cầu đào tạo, chiến lược xây dựng team, kế hoạch công nhận và khen thưởng nhân viên trong dự án, xem xét việc tuân thủ, vấn đề an toàn, và tác động của kế hoạch quản lý nhân sự đối với công ty, tổ chức.
  • Một bản kế hoạch quản lý nguồn nhân lực hiệu quả cần cân nhắc và plan cho sự sẵn có (availability) và sự cạnh tranh cho nguồn nhân lực hạn chế. Vai trò của dự án có thể assign cho cá nhân hoặc cho một Team. Các Team hoặc các team members có thể là nhân viên trong hoặc ngoài công ty. Thường trong một tổ chức chắc chắn sẽ có nhiều dự án khác chạy song song cùng project của bạn và việc cạnh tranh nguồn nhân lực, cạnh tranh về skill set của member. Với những yếu tố đó có thể ảnh hưởng tới chi phí, schedule, rủi ro và chất lượng của dự án. Đó là lý do tại sao một bản kế hoạch quản lý nhân lực hiệu quả cần phải cân nhắc và plan kỹ lưỡng cho tình huống đó.

Đầu vào (Inputs) của kế hoạch quản lý nguồn nhân lực

Như hình bên trên, inputs của việc lập kế hoạch quản lý nguồn nhân lực bao gồm 4 tài liệu
  • Project managemnet plan / Kế hoạch quản lý dự án
  • Activity resource plan / Yêu cầu resource để hoàn thành activity trong project
  • Enterprise environmental factors / Các yếu tố môi trường doanh nghiệp
  • Organizational process assets / Quy trình tài sản của tổ chức

1. Kế hoạch quản lý dự án

  • Kế hoạch quản lý dự án được sử dụng làm đầu vào để phát triển kế hoạch quản lý nguồn nhân lực. Những thông tin thường được sử dụng cho việc lập kế hoạch nhân lực bao gồm những yếu tố dưới đây, nhưng không hạn chế
    • Vòng đời của dự án (project life circle) và quy trình sẽ được áp dụng cho từng giai đoạn (phase) của dự án.
    • Công việc sẽ được làm như thế nào để hoàn thành mục tiêu của dự án
    • Kế hoạch quản trị thay đổi (Change management plan) thể hiện tài liệu thay đổi sẽ được quản lý, kiểm soát như thế nào.
    • Kế hoạch quản lý cấu hình (Configuration management plan) thể hiện việc quản lý cấu hình tài liệu làm như thế nào.
    • Nhu cầu và phương thức communication giữa các stakeholders
    • Đường cơ sở của dự án (Project baselines) được đảm bảo như thế nào.

2. Yêu cầu resource

  • Việc hoạch định nguồn nhân lực sử dụng yêu cầu resource để hoàn thành activity để xác định số nhân lực cần cho dự án. Những yêu cầu sơ bộ về các thành viên trong project team và các kỹ năng, năng lực của họ được xem xét tỉ mỉ là một phần quan trọng trong việc lập kế hoạch quản trị nguồn nhân lực.

3. Các yếu tố môi trường doanh nghiệp

  • Các yếu tố môi trường doanh nghiệp có thể ảnh hưởng tới kế hoạch quản trị nguồn nhân lực bao gồm
    • Văn hóa và cấu trúc doanh nghiệp
    • Nguồn nhân lực hiện có
    • Việc phân tán về mặt địa lý của các thành viên trong nhóm
    • Chính sách quản lý nhân sự
    • Điều kiện thị trường

4. Quy trình tài sản của tổ chức

  • Cũng như các yếu tố môi trường Quy trình, tài sản của tổ chức cũng là nhân tố ảnh hưởng tới kế hoạch quản trị nguồn nhân lực.
    • Quy trình tiêu chuẩn, chính sách và mô tả vai trò của tổ chức
    • Các template cho sơ đồ tổ chức và mô tả vị trí
    • Bài học kinh nghiệm (Lession learn) từ các project trước
    • Các thủ tục để xử lý vấn đề trong dự án và trong team

Công cụ và kỹ thuật (Tool & Techniques) trong lập kế hoạch

1. Sơ đồ tổ chức và Mô tả vị trí

  • Có rất nhiều dạng format để tài liệu hóa vai trò và trách nhiệm của team members. Hầu hết các định dạng rơi vào một trong ba loại sau: phân cấp (hierarchical), ma trận (matrix) và hướng văn bản (text-oriented).
HumanResource_2.png
  • Sơ đồ phân cấp: Đây là sơ đồ cấu trúc tổ chức truyền thống có thể được sử dụng để thể hiện vị trí và mối quan hệ trong dự án qua hình vẽ theo format từ trên xuống dưới. Trong khi WBS thể hiện những deliverables của dự án thì Cấu trúc phân cấp của tổ chức-OBS (Organizational Breakdown Structure) được sắp xếp theo phòng ban, đơn vi, team của tổ chức với các activity của project. Các stakeholders nhìn vào sơ đồ đó có thể hiểu được trách nhiệm của phòng ban trong dự án, mối quan hệ và cách thức communication giữa các bộ phận.
  • Sơ đồ ma trận: Sơ đồ ma trận phân công trách nhiệm (RAM - Responsibility assignment matrix) là một mạng lưới thể hiện nguồn lực của dự án được được assigned cho mỗi gói công việc. Nó được sử dụng để minh họa cho sự kết nối giữa các gói công việc hoặc các activity với mỗi thành viên trong dự án. Trong các dự án lớn thì RAM được phát triển theo nhiều level khác nhau. Ví dụ ở level cao thì gán trách nhiệm cho group nào, team nào phụ trách component hay package nào. Ở level thấp hơn thì RAM được sử dụng trong nhóm để định nghĩa vai trò, trách nhiệm và quyền hạn cho các activity cụ thể.
HumanResource_3.png
  • Format hướng văn bản: Trách nhiệm của team được yêu cầu mô tả chi tiết trong tài liệu theo format định sẵn. Thông thường ở các dạng phác thảo nhằm cung cấp các thông tin cơ bản như trách nhiệm, quyền hạn, năng lực, trình độ.

2. Networking

  • Networking là sự tương tác chính thức và không chính thức với những người khác trong một tổ chức, lĩnh vực hoặc môi trường chuyên biệt. Đó là cách để hiểu các yếu tố chính trị và cá nhân ảnh hưởng thế nào đến hiệu quả của các phương thức quản lý nhân sự khác nhau. Lợi ích của việc quản lý nguồn nhân lực có thể thấy từ sự thành công của Networking bằng cách nâng cao kiến thức và tiếp cận với các cơ hội nâng cao chuyên môn, và các cơ hội hợp tác bên ngoài. Nói lý thuyết phần này có thể bạn sẽ hơi khó hiểu, ví dụ nôm na của Networking là các cuộc gặp gỡ ăn trưa, ăn nhậu hay trò chuyện về các sự kiện, hội nghị chuyên đề ...

3. Lý thuyết của tổ chức

  • Lý thuyết của tổ chức cung cấp thông tin liên quan đến cách thức mà mọi người, teams, và đơn vị của tổ chức hành xử với nhau, với vấn đề nào đó (có thể hiểu đại khái là những kiến thức chung mà người trong cùng một tổ chức đều hiểu với nhau). Nếu những vấn đề chung được xác định trong Lý thuyết của tổ chức có thể giúp rút ngắn thời gian, chi phí, và effort cần thiết để lập kế hoạch quản lý nguồn nhân lực.

4. Phán xét chuyên môn

  • Khi xây dựng kế hoạch quản trị nguồn nhân lực thì phán xét chuyên môn được sử dụng để
    • Liệt kê yêu cầu sơ bộ cho các kỹ năng cần thiết
    • Đánh giá các role cần thiết cho dự án dựa trên mô tả role tiêu chuẩn trong tổ chức (ví dụ ở Framgia có mô tả Dev rank mấy phải có tiêu chuẩn gì, QA rank mấy ...)
    • Xác đinh sơ bộ số effort và số nhân sự để đạt được objectives của dự án
    • Cung cấp guideline về thời gian cần thiết để chuẩn bị nhân lực dựa trên bài học từ các dự án trước
    • Xác định rủi ro liên quan đến việc thu nhận, giữ và release nhân sự

5. Meetings

  • Khi lập kế hoạch quản lý nguồn nhân lực của dự án, đội ngũ quản lý dự án sẽ tổ chức các cuộc họp để lên kế hoạch. Những cuộc họp này sử dụng kết hợp các công cụ và kỹ thuật khác nhau để tất cả các thành viên trong nhóm quản lý dự án đạt được sự đồng thuận về kế hoạch quản lý nguồn nhân lực.

Output của kế hoạch quản lý nguồn nhân lực

  • Như trên hình process ở phần đầu thì output của quá trình này chính là Bản kế hoạch quản lý nguồn nhân lực (Human resource Management Plan ). Nó là một phần của kế hoạch quản lý dự án (Project Management Plan), cung cấp hướng dẫn về cách thức nguồn nhân lực của dự án cần được xác định, tuyển dụng, quản lý, và cuối cùng là release.
  • Một bản kế hoạch quản lý nguồn nhân lực sẽ bao gồm các mục sau, có thể có hoặc không tùy tổ chức
    • Vai trò và trách nhiệm
      • Vai trò của từng cá nhân: PM, BA, Comtor, BrSE, Dev, Tester ..
      • Quyền hạn truy cập vào resource của dự án, quyền ra quyết định, approve ...
      • Trách nhiệm được giao, các activity phải hoàn thành
      • Năng lực: skills và khả năng cần thiết
    • Sơ đồ tổ chức dự án
    • Kê hoạch quản lý nhân viên
      • Tiếp nhận nhân viên, khi nào thì nhận người vào dự án .. một số role khác nhau thì thời điểm join vào dự án cũng khác nhau nên cần phải có plan cho việc này
      • Resource calendar: lên lịch làm việc cho các members trong dự án dựa vào avaiability của resource
      • Training plan: một số dự án đòi hỏi phải training về nghiệp vụ, tools hoặc process thì cần plan cho việc ai học cái gì và thời gian như thế nào.
      • Ghi nhận và khen thưởng
      • Lên chiến lược cho việc tuân thủ rules, hợp đồng, chính sách ..
      • Bảo đảm an toàn cho nhân viên (khi tiếp xúc với thiết bị có thể gây hại)
      • Kế hoạch release: nhân lực chính là tiền vì vậy release lúc nào để đảm bảo tiến độ và tiết kiệm chi phí cần phải cân nhắc kỹ.

Thứ Hai, 15 tháng 8, 2016

Những tính năng mới trong Laravel 5.3

ME6tgVZNTAmfdTb5H0GG_laravel-5-3-new-features-updates.png
Hội nghị Laracon US 2016 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 đã được diễn ra (từ 27 đến 29-07-2016). Với mục tiêu chính là giới thiệu và released phiên bản Laravel 5.3.
Ở bài viết này chúng ta sẽ cùng nhau điểm qua những tính năng mới được giới thiệu trong Laravel 5.3:
  1. Giới thiệu Laravel Echo
  2. Biến $loop mới
  3. Thêm tham số mới cho hàm FirstOrCreate
  4. Global helper cache()
  5. Thêm phương thức truy vấn với JSON-column cho where() và update()
  6. Những thực thi nâng cao với Collection::where
  7. Validation kích thước ảnh
  8. Tùy biến templates phân trang
  9. Thay đổi route
  10. Giới thiệu Laravel Scout
  11. Giới thiệu Laravel Passport (updating)
  12. Elixir 6: webpack, rollup, scripts, and more (updating)
  13. Giới thiệu hệ thống Notification (updating)
  14. Thay đổi cấu trúc thư mục "app" (updating)
  15. Giới thiệu Mailables (updating)
  16. Auth scaffold sử dụng mã biên soạn sẵn --bao gồm Vuejs-- (updating)
  17. Định nghĩa console commands qua closure (updating)
  18. Cập nhật queue workers (updating)

1. Giới thiệu Laravel Echo

Tháng 5-2016, Taylor Otwell đã giới thiệu về Laravel Echo trên Laracast, demo một ứng dụng thời gian thực sử dụng Vue.js, Laravel Spark và Laravel Echo.
Vậy Laravel Echo là gì? Về cơ bản nó là 1 công cụ hỗ trợ bạn tạo ra một ứng dụng thời gian thực với WebSockets.
Laravel Echo được chia làm hai phần: các cải tiến cho Laravel Event broadcasting và một package JavaScript:
  • Các thành phần backend của Laravel Echo sẽ được mặc định thêm vào Laravel core ở phiên bản 5.3. Có thể sử dụng phần backend này với bất kì JavaScript frontend nào, không bắt buộc là thư viện Echo JavaScript, nhưng với Echo JavaScript thì hỗ trợ tốt hơn.
  • Thư viện Echo JavaScript có thể import qua NPM. Hoạt động với Pusher JS hoặc Socket.io.
Laravel Echo vẫn đang được phát triển. Hiện tại chưa có tài liệu nào về Laravel Echo nên chúng ta sẽ tìm hiểu kĩ hơn về Laravel Echo khi có phiên bản chính thức. Trước đó, bạn có thể xem cách tạo ra một ứng dụng thời gian thực với Laravel Echo qua video của Taylor Otwell hoặc bài viết của Matt Stauffer.

2. Biến $loop mới

Laravel blade cung cấp các chỉ thị điều khiển các cấu trúc lặp, điều kiện được mở đầu bằng @. Các chỉ thị quen thuộc như @if@for@foeach.
PHP
@foreach($posts as $post)
    <li>{!! $post->name !!}<li>
@endforeach
Laravel 5.3 sẽ có một biến $loop có sãn trong mỗi vòng lặp, $loop là một object chưa thông tin về vòng lặp hiện tại:
  • index: chỉ mục của vòng lặp hiện tại. Trả về 1 ở vòng lặp đầu tiên.
  • remaining: số lần lặp còn lại. Nếu đang ở vòng lặp thứ i của n vòng lặp thì trả về n - i.
  • count: số lượng items trong vòng lặp.
  • first: giá trị boolean, kiểm tra vòng lặp hiện tại là vòng lặp đầu tiên.
  • last: giá trị boolean, kiểm tra vòng lặp hiện tại là vòng lặp cuối cùng.
  • depth: giá trị integer, trả về chiều sâu của vòng lặp. Ví dụ: trả ra 1 với một vòng lặp, trả ra 2 với một vòng lặp nằm trong một vòng lặp khác...
  • parent: nếu vòng lặp hiện tại ở trong một vòng lặp khác thì trả về một tham chiếu đến biến $loop ở vòng lặp cha, nếu không thì trả về null.
Biến $loop này sẽ hỗ trợ chúng ta làm một số việc như:
PHP
@foreach($pages as $page)
    // Kiểm tra trang hiện tại
    <li class="@if($loop->first) first-page @elseif($loop->last) last-page @endif">
        // Hiển thị trang hiện tại trên tổng số trang
        {{ $page->title }} ({{ $loop->index }} / {{ $loop->count }})
    </li>
@endforeach
// Trường hợp item có các item con
@foreach ($pages as $page)
    <li>{{ $loop->index }}: {{ $page->title }}
        @if ($page->hasChildren())
            <ul>
                @foreach ($page->children() as $child)
                    <li>
                        {{ $loop->parent->index }}.{{ $loop->index }}:
                        {{ $child->title }}
                    </li>
                @endforeach
            </ul>
        @endif
    </li>
@endforeach

3. Thêm tham số mới cho hàm FirstOrCreate

Trong phiên bản 5.3 chúng ta có thể truyền thêm 1 array giá trị cho function firstOrCreate. Array này mang những giá trị mà ta muốn gán cho đối tượng. Một ví dụ đơn giản về sự thay đổi này:
PHP
// Trước đây  
$tag = Tag::firstOrCreate(['slug' => 'laravel-5.3']);
$tag->fill(['label' => 'Laravel 5.3'])->save();
// Bây giờ
$tag = Tag::firstOrCreate(
    ['slug' => 'laravel-5.3'],
    ['label' => 'Laravel 5.3']
);
// Code ít hơn một chút rồi 

4.Global helper cache()

Phiên bản 5.3 thêm cache() vào global helper. Cũng giống như session() hay cookie()cache() có 3 phương thức chính get set hoặc trả về thể hiện của backing service:
  • cache('abc', null) lấy ra giá trị đã được cache với tên abc hoặc trả về null nếu không tồn tại.
  • cache(['abc' => 'def'], 5) gán giá trị của abc cho def trong thời gian 5 phút
  • cache() trả về một thể hiện của CacheManager.

5. Thêm phương thức truy vấn với JSON-column cho where() và update()

Trước đây chúng ta vẫn có thể lưu dữ liệu kiểu JSON nhưng thực tế là lưu dưới dạng text. Trong phiên bản 5.7, MySQL đã giới thiệu về kiểu dữ liệu JSON. Laravel 5.3 cung cấp cho chung ta một cú pháp đơn giản để thao tác dựa trên keys trong một cột dữ liệu JSON. Cùng tìm hiểu về sự thay đổi này qua ví dụ sau:
Chúng ta có một table contacts
PHP
...
class CreateContactsTable extends Migration
{
    public function up()
    {
        Schema::create('contacts', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->json('meta'); // Kiểu dữ liệu JSON
            $table->timestamps();
        });
    }
}
Giả sử trường dữ liệu meta có dạng:
PHP
{
    "id": 1,
    "name": "Akira",
    "meta": {
        "wants_newsletter": true,
        "favorite_color": "black"
    }
}
Để tham chiếu đến thuộc tính trong trường JSON, chúng ta bắt đầu bằng tên trường với mũi tên -> tới thuộc tính cần tham chiếu.
Tìm kiếm trong cột JSON với where()
PHP
$users = DB::table('users')
    ->where('meta->favorite_color', 'black')
    ->get();
Câu lệnh này sẽ tìm kiếm user có meta chứa favorite_color là black.
Update dữ liệu cột JSON với update()
PHP
DB::table('users')
    ->where('id', 1)
    ->update(['meta->wants_newsletter' => false]);
Trường hợp meta chưa có thuộc tính wants_newsletter trước đó thì vẫn có thể update được.
Hiện tại MariaDB chưa có JSON columns, và PostgreSQL có JSON columns nhưng tính năng này dường như không hoạt động được. Nên hiện tại có thể coi đây là một tính năng cho MySQL 5.7+.

6. Những thực thi nâng cao với Collection::where

Trước đây để thực hiện việc tìm kiếm trong Collection chúng ta có thể sử dụng filter()reject(),where() nhưng where() chỉ thực hiện phép so sánh nhất quán ===.
Ở phiên bản 5.3 chúng ta có thể sử dụng nhiều toán tử hơn với where() như = == === != !== <= >= < ><>.

7. Validation kích thước ảnh

Trong phiên bản 5.3 chúng ta có thể validation kích thước ảnh khi upload, được gọi qua từ khóa dimensions. Validation này nhận các tham số:
  • min_width: chiều rộng tối thiểu
  • max_width: chiều rộng tối đa
  • min_height: chiều cao tối thiểu
  • max_height: chiều cao tối đa
  • width: chiều rộng cố định
  • height: chiều cao cố định
  • ratio: tỉ lệ ảnh (width/height)
PHP
// ImageController
    public function postImage(Request $request)
    {
        $this->validate($request, [
             'avatar' => 'dimensions:max_width=600,max_height=400,ratio:3/2'
        ]);
    }

8. Tùy biến templates phân trang

Ở phiên bản 5.3 có 2 cách để tùy biến templates phân trang:

#Publish build-in

Là cách đơn giản nhất, chạy php artisan vendor:publish để pulish template vào thư mục vendor/paginationvà chỉnh sửa nó ở đây. Nếu cần tùy biến ở một số trường hợp nhất định thì có thể sử dụng cách thứ 2.

#Chọn file template thủ công

Tạo một view ví dụ resources/views/partials/pagination.blade.php và đăng ký trong function boot() của service provider \Illuminate\Pagination\LengthAwarePaginator::defaultView('partials.paginator').
Trường hợp chỉ muốn tùy biến phân trang cho một trang nhất định nào đó có thể truyền trực tiếp view vào function link() như sau:
PHP
{{ $users->links('partials.paginator') }}

9. Thay đổi route

Ở phiên bản 5.2, ban đầu chúng ta thấy file route.php được chia làm 2 group web và api, nhưng sau đó đã được loại bỏ. Thay vào đó là multiple middleware groups, một cho web và một cho api.
Group web chứa mọi thứ mà user bình thường cần: sessions, cookies, CSRF protection, etc. Group api thì "nhẹ hơn" nó chỉ chứa middleware "throttle", quản lý những trường hợp stateless REST API.
Ở phiên bản 5.3 app/Http/routes.php được chuyển về thư mục gốc routes/ và được chia làm 2 file web.phpvà api.php. Và có thể đoán, web.php được bao bởi web middleware và api.php được bao bởi apimiddleware.
Có một số lợi ích trong việc này:
  • Đầu tiên, chúng ta có được sự gợi ý và dễ dàng thực hiện việc phân biệt giữa web route và api route.
  • Thứ hai, với việc có nhiều file route sẽ giúp cho các developers trong dự án tự do điều chỉnh file route của mình.
  • Thứ ba, việc dời routes ra khỏi thư mục app/ khiến người mới dễ dàng tiếp cận hơn, đồng thời khiến app/hoàn toàn trở thành thư mục chuẩn PSR-4-autoloaded.
Nếu muốn tùy biến file route hoặc thêm file route của riêng mình, bạn có thể kiểm tra tạiApp\Providers\RouteServiceProvider:
PHP
...
    public function map()
    {
        $this->mapWebRoutes();
        $this->mapApiRoutes();
        //
    }
    protected function mapWebRoutes()
    {
        Route::group([
            'namespace' => $this->namespace, 'middleware' => 'web',
        ], function ($router) {
            require base_path('routes/web.php');
        });
    }
    protected function mapApiRoutes()
    {
        Route::group([
            'middleware' => ['api', 'auth:api'],
            'namespace' => $this->namespace,
            'prefix' => 'api',
        ], function ($router) {
            require base_path('routes/api.php');
        });
    }

10. Giới thiệu Laravel Scout

Laravel Scout là full-text search dựa trên driver cho Eloquent. Scout hỗ trợ việc đánh index và tìm kiếm nội dung trong Eloquent models. Hiện tại Scout làm việc được với Algolia, nhưng Taylor Otwell đang tham khảo ý kiến cộng đồng về những dịch vụ full-text search khác như ElasticSearch.
Scout là một Laravel package riêng biệt, giống như Cashier, bạn cần phải cài đặt nó với Composer. Cần phải thêm trait s của Scoute vào model để báo cho nó biết cần phải lắng nghe những sự kiện khi một thể hiện của model được sửa đổi và cập nhật search index.
Sau khi cài đặt scout chúng ta có thể thực hiện những thao tác như:
PHP
Review::search('Llew')->get();
Review::search('Llew')->paginate(20);
Review::search('Llew')->where('account_id', 2)->get();
Chúng ta sẽ tìm hiểu kĩ hơn về Laravel Scout trong một bài viết khác. Các bạn cũng có thể tham khảo bài viết của Matt Stauffer.
(Updating...)

Tài liệu tham khảo

Bài mới

Bài đăng nổi bật