• Giới thiệu
  • Thư mục gốc (10)
    • Thư mục app
    • Thư mục bootstrap
    • Thư mục config
    • Thư mục database
    • Thư mục public
    • Thư mục resources
    • Thư mục routes
    • Thư mục storage
    • Thư mục tests
    • Thư mục vendor
  • Thư mục App (12)
    • Thư mục Broadcasting
    • Thư mục Console
    • Thư mục Events
    • Thư mục Exceptions
    • Thư mục Http
    • Thư mục Jobs
    • Thư mục Listeners
    • Thư mục Mail
    • Thư mục Notifications
    • Thư mục Policies
    • Thư mục Providers
    • Thư mục Rules

Giới thiệu

Mặc định cấu trúc thư mục ứng dụng Laravel được thiết kế để xây dựng cả ứng dụng nhỏ và ứng dụng lớn. Tất nhiên, bạn có thể hoàn toàn tổ trức lại cấu trúc thư mục theo ý bạn muốn. Laravel hầu như không áp đặt những hạn chế về nơi các class nằm ở thư mục nào – miễn là Composer có thể tự động tải được các class.

Thư mục Models ở đâu?

Khi bắt đầu làm việc với Laravel, rất nhiều developer bị bối rối vì cảm thấy thiếu thiếu một folder models. Tuy nhiên, Laravel đã cố ý không tạo một folder models đó. Chúng ta thấy từ “models” là mơ hồ vì nó có rất nhiều nghĩa khác nhau. Một số developer xem “model” như là toàn bộ logic của ứng dụng, trong khi những số khác thì xem “models” như là các class có thể tương tác với database.

Chính vì lý do đấy, Laravel chọn đặt Eloquent model mặc định ở thư mục app, và cho phép các developer có thể đặt chúng ở nơi khác mà họ muốn.

Thư mục gốc

Thư mục App

Thư mục app, như biết, nó sẽ chứa tất cả các cốt lõi trong ứng dụng của bạn. Chúng ta sẽ khám phá chi tiết về nó sớm thôi; tuy nhiên, hầu hết các class trong ứng dụng của bạn đều ở trong đây.

Thư mục Bootstrap

Thư mục bootstrap chứa những file khởi động của framework và những file cấu hình autoloading. Ngoài ra nó còn có thư mục cache chứa những file mà framework sinh ra để tăng hiệu năng như route và services cache files.

Thư mục Config

Thư mục config, đúng như cái tên của nó, chứa tất cả những file cấu hình. Thật tuyệt vời khi bạn lướt qua tất cả các file của nó với những cấu hình có sẵn cho bạn.

Thư mục Database

Thư mục database chứa những file database migration và seeds. Nếu bạn muốn, bạn cũng có thể sử dụng nó để tổ chức một cơ sử dữ liệu SQLite.

Thư mục Public

Thư mục public chứa file index.php, đó là điểm mấu chốt cho tất cả các request vào ứng dụng của bạn. Ngoài ra nó còn chứa một số tài nguyên như ảnh, JavaScript, và CSS.

Thư mục Resources

Thư mục resources chứa những view và raw, những tài nguyên chưa compiled như LESS, SASS, hoặc JavaScript. Nó còn chứa tất cả các file ngôn ngữ trong ứng dụng của bạn.

Thư mục Routes

Thư mục routes chứa tất cả các định nghĩa route trong ứng dụng của bạn. Mặc định, có ba file route được thêm vào với Laravel: web.php, api.php, và console.php.

File web.php chứa những routes là RouteServiceProvider ở trong web nhóm middleware, Nó cung cấp các trạng thái session, CSRF protection, và cookie encryption. Nếu ứng dụng của bạn không có stateless, RESTful API, thì hầu hết các routes bạn định nghĩa nằm ở file web.php.

File api.php chứa những routes là RouteServiceProvider ở trong api nhóm middleware, nó cung cấp rate limiting. Những routes đã được xác định stateless, vì vậy những request gửi đến ứng dụng của bạn thông qua routes sẽ được xác thực bằng tokens và sẽ không có quyền truy cập trạng thái session.

File console.php là nơi để bạn định nghĩa tất cả các Closure based console commands. Each Closure is bound to a command instance allowing a simple approach to interacting with each command’s IO methods. Mặc dù nó không định nghĩa HTTP routes, nó định nghĩa console based entry points (routes) trong ứng dụng của bạn.

Thư mục Storage

Thư mục storage chứa các file compiled Blade templates của bạn, file based sessions, file caches, và những file sinh ra từ framework. Bên trong nó bao gồm app, framework, và logs. Thư mục app dùng để chứa những file sinh ra bởi ứng dụng của bạn. Thư mục framework chứa những file sinh ra từ framework và caches. Cuối cùng, thư mục logs chứa những file logs.

Thư mục storage/app/public lưu những file người dùng tạo ra như ảnh đại diện, nó phải được để công khai. Bạn nên tạo một liên kết tại public/storage đến thư mục này bằng cách sử dụng lệnh php artisan storage:link.

Thư mục Tests

Thư mục tests chứa những file tests của bạn. Ví dụ PHPUnit nó cung cấp rất đầy đủ. Mỗi một class test nên chứa hậu tố với từ Test. Bạn có thể chạy class test của bạn bằng lệnh phpunit hoặc php vendor/bin/phpunit.

Thư mục Vendor

The vendor chứa các dependencies của Composer.

Thư mục App

Phần lớn các ứng dụng của bạn đặt ở thư mục app. Mặc định, thư mục này có namespaced là App và được load tự động bởi Composer sử dụng PSR-4 autoloading standard.

Thư mục app chứa một vài thư mục con bên trong như Console, Http, và Providers. Hãy nghĩ về Console và Http là các thư mục cung cấp AP cho phần code lỗi ứng dụng của bạn. Giao thức HTTP và CLI là hai cơ chế tương tác với ứng dụng của bạn, nhưng nó không thật sự chứa logic của ứng dụng. Bạn có thể hiểu, Chúng ta có hay cách để thực thi lệnh đến ứng dụng của bạn. Thư mục Console chứa tất cả các lệnh Artisan của bạn, trong khi thư mục Http chứa controllers, middleware, và requests.

Khi bạn sử dụng lệnh make Artisan thì sẽ có một loạt các thư mục sẽ được tạo ra bên trong thư mục app. Ví dụ, thư mục app/Jobs sẽ không tồn tại cho đến khi bạn thực thi lệnh make:job Artisan sinh ra một class job.

Rất nhiều class được sinh ra bên trong thư mục app bằng lệnh Artisan. Bạn có thể xem lại những lệnh nào đang tồn tại bằng lệnh php artisan list:make trong terminal.

Thư mục Broadcasting

Thư mục Broadcasting chứa tất cả các lớp Broadcasting Channel cho ứng dụng của bạn. Các lớp này được tạo bằng lệnh make:channel. Thư mục này không tồn tại theo mặc định, nhưng sẽ được tạo khi bạn tạo kênh đầu tiên. Để tìm hiểu thêm về các kênh, hãy xem tài liệu về Broadcasting

Thư mục Console

Thư mục Console chứa tất cả những file Artisan commands ứng dụng của bạn. Đó là những lệnh được sinh ra bằng lệnh make:command. Ngoài ra nó còn chứa console kernel của ứng dụng, nó là nơi bạn có thể chỉnh đăng ký Artisan commands và scheduled tasks được định nghĩa.

Thư mục Events

Mặc định thư mục này không tồn tại, nhưng nó sẽ được sinh ra bằng lệnh event:generate và lệnh make:event. Thư mục Events, như bạn mong đợi, nó sẽ chứa các event classes. Events có thể được sử dụng để thông báo các phần khác của ứng dụng của bạn mà hành động đấy nhất định xảy ra, ngoài ra nó khả năng của nó rất linh hoạt và decoupling.

Thư mục Exceptions

Thư mục Exceptions chứa các xử lý exception trong ứng dụng của bạn ngoài ra nó còn là nơi tốt để bắn ra nhiều exception bởi ứng dụng. Nếu bạn muốn tùy chỉnh những exception hoặc rendered, bạn nên chỉnh lại class Handler bên trong thư mục.

Thư mục Http

Thư mục Http chứa các controllers, middleware, và form requests. Tất cả các logic xử lý requests vào ứng dụng của bạn sẽ nằm ở trong thư mục này.

The Jobs Directory

Mặc định thư mục này không tồn tại, nhưng nó sẽ được sinh ra nếu bạn thực thi lệnh make:job Artisan. Thư mục Jobs chứa các queueable jobs ứng dụng của bạn. Jobs có thể được xếp hàng bởi ứng dụng hoặc để chạy đồng bộ bên trong vòng đời request hiện tại. Jobs có thể chạy đồng bộ trong khi request hiện tại là một “commands” khi thực hiện trong command pattern.

Thư mục Listeners

Mặc định thư mục này không tồn tại, nhưng nó sẽ được sinh ra nếu bạn thực thi lệnh event:generate hoặc make:listener Artisan. Thư mục Listeners chứa các class xử lý các events. Event listeners nhận được một thể hiện event và thực hiện logic khi hồi đáp cho sự kiện đã được bắn ra. Ví dụ, một UserRegistered event phải được xử lý bởi một SendWelcomeEmail listener.

Thư mục Mail

Mặc định thư mục này không tồn tại, nhưng nó sẽ được sinh ra nếu bạn thực thi lệnh make:mail Artisan. Thư mục Mail chứa tất cả các class đại diện cho mail được gửi bởi ứng dụng của bạn. Mail objects cho phép bạn đóng gói tất cả các logic thành một, một class có thể được gửi bởi lệnh Mail::send.

Thư mục Notifications

Mặc định thư mục này không tồn tại, nhưng nó sẽ được sinh ra nếu bạn thực thi lệnh make:notification Artisan. Thư mục Notifications chứa tất cả các “giao dịch” thông báo đã gửi bởi ứng dụng, ví dụ đơn giải là thông báo về event xảy ra trong ứng dụng của bạn. Ngoài ra notifications của Laravel còn có thể thông báo cho email, Slack, SMS, hoặc lưu trong database.

Thư mục Policies

Mặc định thư mục này không tồn tại, nhưng nó sẽ được sinh ra nếu bạn thực thi lệnh make:policy Artisan. Thư mục Policies chứa các lớp quy ước cấp quyền ứng dụng của bạn. Các quy ước được dùng để quyết định user có thể thực hiện hành động đối với một tài nguyên nào đó. Để xem chi tiếp, bạn có thể xem tại authorization documentation.

Thư mục Providers

Thư mục Providers chứa tất cả các service providers ứng dụng của bạn. Service providers khởi động ứng dụng của bạn bằng các services trong service container, đăng ký events, hoặc thực hiện bất kỳ một công việc khác để chuẩn bị cho request đến ứng dụng của bạn.

Khi bạn mới cài xong project, thư mục đã chứa một số providers. Bạn có thể thoải mái thêm providers của bạn vào nếu cần.

Thư mục Rules

Thư mục này không tồn tại theo mặc định, nhưng sẽ được tạo cho bạn nếu bạn thực hiện lệnh Artisan make:rule . Thư mục Rules chứa các đối tượng quy tắc xác thực tùy chỉnh cho ứng dụng của bạn. Các quy tắc được sử dụng để đóng gói logic xác thực phức tạp trong một đối tượng đơn giản. Để biết thêm thông tin, hãy xem tài liệu sau.

composer.json và composer.lock

Đây là 2 file rất quan trọng trong một package composer.

composer.json là nơi ta khai báo những dependencies dùng trong project, những thông tin về tên, phiên bản, licenses, source … Nội dung được viết theo JSON format.

Chẳng hạn như ta có một ví dụ sau:

{
    "name": "wataridori/bphalcon",
    "type": "project",
    "description": "A small library which implement some features to phalcon",
    "license": "GPL-3.0",
    "authors": [
        {
            "name": "Tran Duc Thang",
            "email": "[email protected]"
        }
    ],
    "require": {
        "php": ">=5.4"
    }
}

composer.lock là nơi lưu trữ thông tin về dependencies đã được cài đặt. Ví dụ khi bạn dùng lệnh install để cài đặt lần đầu thì composer sẽ đọc thông tin về dependencies ở trong file composer.json, sau đó cài đặt và tạo ra file composer.lock để lưu thông tin cụ thể về những dependencies đó. Giả sử bạn commit cả 2 file composer.json và composer.lock vào version control của mình, rồi bất cứ người nào tải code về thì dù có cài đặt vào thời điểm khác nhau đi chăng nữa thì vẫn sẽ nhận được những dependencies với những version giống nhau, do nó được đọc từ file composer.lock, chứ không phải file composer.json.

Hãy đi vào một trường hợp cụ thể hơn. Trong file composer.json có ghi yêu cầu là package/A có version >= 3.4.5, và khi bạn cài lần đầu, version mới nhất của nó là 3.4.5 thì package/A với version 3.4.5 sẽ được cài đặt và thông tin được lưu vào file composer.lock. Sau đó người khác tải code về, và cài đặt dependencies thì mặc dù lúc đó package/A có ra version 3.4.6 đi chăng nữa thì composer vẫn sẽ chỉ cài đặt bản 3.4.5 mà thôi, do thông tin này đã được lưu trong composer.lock.

Nguồn: https://laravel.com/docs/5.8/structure

Tìm hiểu cấu trúc thư mục | Laravel
5 (100%) 1 vote[s]

Bình luận bên dưới !

avatar
255
  Subscribe  
Notify of