• About
  • Advertise
  • Privacy & Policy
  • Contact
DevZone
  • Home
  • News
  • Dev
    • All
    • Algorithm
    • Architecture
    • Database
    • Design
    • DevOps
    • IoT
    • Network
    • Test
    • Web
    Phương thức xử lý mảng trong javascript

    Phương thức xử lý mảng trong javascript

    Bảo vệ content, chống copy nội dung web!

    Bảo vệ content, chống copy nội dung web!

    Lưu ý mệnh đề NOT IN trong SQL

    Lưu ý mệnh đề NOT IN trong SQL

    SOLID Principles: Dependency Inversion Principle

    SOLID Principles: Dependency Inversion Principle

    Solid Principles: Interface Segregation Principle

    Solid Principles: Interface Segregation Principle

    Tìm hiểu về composer.json schema (phần 2 – autoload)

    Tìm hiểu về composer.json schema (phần 2 – autoload)

    IPC – Đằng sau sự thành công của Chromium

    IPC – Đằng sau sự thành công của Chromium

    Dựng layout website với CSS Grid Layout

    Dựng layout website với CSS Grid Layout

    Golang cơ bản (p1)

    Golang cơ bản (p1)

    Trending Tags

    • Idea
    • Lifestyle
    No Result
    View All Result
    • Home
    • News
    • Dev
      • All
      • Algorithm
      • Architecture
      • Database
      • Design
      • DevOps
      • IoT
      • Network
      • Test
      • Web
      Phương thức xử lý mảng trong javascript

      Phương thức xử lý mảng trong javascript

      Bảo vệ content, chống copy nội dung web!

      Bảo vệ content, chống copy nội dung web!

      Lưu ý mệnh đề NOT IN trong SQL

      Lưu ý mệnh đề NOT IN trong SQL

      SOLID Principles: Dependency Inversion Principle

      SOLID Principles: Dependency Inversion Principle

      Solid Principles: Interface Segregation Principle

      Solid Principles: Interface Segregation Principle

      Tìm hiểu về composer.json schema (phần 2 – autoload)

      Tìm hiểu về composer.json schema (phần 2 – autoload)

      IPC – Đằng sau sự thành công của Chromium

      IPC – Đằng sau sự thành công của Chromium

      Dựng layout website với CSS Grid Layout

      Dựng layout website với CSS Grid Layout

      Golang cơ bản (p1)

      Golang cơ bản (p1)

      Trending Tags

      • Idea
      • Lifestyle
      No Result
      View All Result
      DEVZONE
      No Result
      View All Result
      Home Dev

      Tìm hiểu về composer.json schema (phần 2 – autoload)

      kimtung by kimtung
      March 31, 2020
      in Dev, Web
      0
      Tìm hiểu về composer.json schema (phần 2 – autoload)

      Để tiếp tục chủ đề tìm hiểu về composer.json và các thành phần bên trong của nó. Tôi xin trình bày bài viết thứ 2 về chủ đề này. Bạn chưa nắm được composer là gì, nó hoạt động ra sao và tại sao composer.json  lại luôn ở thư mục root của các project thì có thể theo dõi phần 1 của bài viết tại đây.

      Như đã nói ở bài trước, autoload là một thành phần bắt buộc và quan trọng không thể thiếu trong cấu trúc file composer.json.

      Nó là thành phần chỉ định việc mapping các class của Package cho php autoloader (bộ nạp mã tự động).

      Composer hỗ trợ 2 chuẩn autoloading là PSR-4 và PSR-0. Nhưng chuẩn PSR-4 được khuyến khích dùng hơn là PSR-0 vì hầu hết các framework php hiện tại đều sử dụng bộ nạp tự động theo chuẩn PSR-4.

      PSR-4:

      Với việc mỗi dự án, mỗi package có một cách nạp class khác nhau, sẽ dẫn tới việc chia sẻ, dùng lại code giữa các framework hay thư viện trở nên phức tạp. Do đó, chuẩn PSR-4 Autoloader được ra đời để thống nhất các quy tắc nạp class cho việc sử dụng.  Các framework như Laravel, Symfony, Phalcon… đều sử dụng chuẩn này. Tiêu chuẩn PSR-4 Autoloader mô tả các quy tắc tổ chức namespace trong class cũng như cách tổ chức các folder, file và tên class tương ứng.

      Quy tắc của chuẩn PSR-4 là bố trí code trong các thư mục sao cho mọi class đều có thể được tham chiếu đến bằng cách viết mã sau:

      \<NamespaceName>(\<SubNamespaceNames>)*\<ClassName>

      Có nghĩa là: mỗi lớp phải xây dựng sao cho được tham chiếu đến bởi 3 thành phần:

      NamespaceName: Tiền tố đầu tiên và bắt buộc phải có – được hiểu là vendor. Tên này được đặt sao cho không xung đột với các thư viện khác.

      SubNamespaceName: các namesapace con (có thể một hoặc nhiều namespace con) và mỗi subnamespace phải tương ứng với một cấp thư mục và tên thư mục phải trùng với tên subnamespace.

      ClassName: Tên class phải bắt buộc trùng với tên file và nó phải nằm trong namespace hoặc subnamespace cuối cùng.

      "autoload": {
           "psr-4": {
               "Megaads\\MultiLanguage\\": "src/"
           }
      }

      Ở đây Megaads\Multilanguage sẽ là tiền tố đầu tiên (NamespaceName) nó sẽ được map với thư mục src/ (base directory).

      Sau đấy, ta có thể định nghĩa các cấp thư mục file con trong src/.

       Ví dụ ta muốn định nghĩa một class MultiLanguagueController.php nằm trong thư mục controllers\ (subnamespace):

      Cấu trúc thư src\controllers\MultiLanguageController.php  sẽ được tham chiếu với đoạn mã như sau  \Megaads\MultiLanguage\Controllers\MultiLanguageController.

      Nếu muốn dùng một tiền tố cho nhiều thư mục, ta có thể cho chúng vào một mảng:

       "autoload": {
            "psr-4": {"Megaads\\MultiLanguage\\": ["src/", “lib/”]
           } 
      }

      Tất cả các tham chiếu được khai báo trong PRS-4, sau khi được install/update sẽ được sinh ra trong một mảng key => value và được tìm thấy trong  vendor/composer/autoload_psr4.php

      PSR-0:

      PSR-0 không có khái niệm NamepaceName prefix nên việc chỉ định maping phải chính xác đường dẫn thư mục.

      "autoload": {
           "psr-0": {
                "Megaads\\MultiLanguage\\Controller\\": "src/",
                "Megaads\\MultiLanguage\\Models\\": "src/",
                "Megaads\\MultiLanguage\\Console\\": "src/"
            }
        }

      Cũng tương tự như psr-4 ta cũng có thể khai báo cho nhiều thư mục sử dụng chung một namespace

      "autoload": {
              "psr-0": {
                   "Megaads\\MultiLanguage\\": ["src/", “lib/”]
              }
        }

      Tất cả các tham chiếu được khai báo trong PRS-0, sau khi được install/update sẽ được sinh ra trong một mảng key=>value và được tìm thấy trong vendor/composer/autoload_namespaces.php

      Ngoài việc hỗ trợ 2 chuẩn PSR-4, PSR-0 thì composer cũng hỗ trợ 2 kiểu mapping nữa đó là classmap và files:

      Classmap:

      "autoload": {
          "classmap": [
              "src/", “lib/”, “Example.php”
          ],
      }

      Cho phép load toàn bộ các class trong thư mục được khai báo.

      Tất cả các class được load sẽ được tìm thấy trong vendor/composer/autoload_classmap.php sau khi install/update.

      Files:

      Nếu muốn chỉ định load một file tường mình thì bạn có thể sử dụng:

      {
       "autoload":{ 
             "files":["src/MyLibrary/functions.php"] 
           }
      }
      

      Điều này hữu ích với các function php không được hỗ trợ tải tự động.

      Ngoài ra, chúng ta cũng có thể loại trừ những file mà không muốn tải tự động bằng exclude-from-classmap. Composer cũng hỗ trợ ta sử dụng * để khớp bất cứ thứ gì trừ dấu gạch chéo và ** để khớp với bất cứ thứ gì.

       {
       "autoload":{ 
           "exclude-from-classmap":["/Tests/","/test/","/tests/"]
           }
      }  

      Trong khuôn khổ bài viết, phần nào đã giới thiệu và giải thích được cách composer mapping và tải tự động các class trong package. Giúp cho việc hiểu rõ hơn về composer.json và hỗ trợ cho việc viết các ứng dụng bằng package theo đúng chuẩn để dễ dàng tích hợp với các framework và thư viện khác.

      Thả tim (5 lượt thả tim)
      Loading...
      Previous Post

      IPC – Đằng sau sự thành công của Chromium

      Next Post

      Solid Principles: Interface Segregation Principle

      kimtung

      kimtung

      Next Post
      Solid Principles: Interface Segregation Principle

      Solid Principles: Interface Segregation Principle

      Leave a Reply Cancel reply

      Your email address will not be published. Required fields are marked *

      Recent News

      Lập trình viên không dùng máy Mac nhiều như người ta đã nghĩ

      Lập trình viên không dùng máy Mac nhiều như người ta đã nghĩ

      July 25, 2020
      Dấu hiệu nhận biết sức khỏe qua liềm móng tay

      Dấu hiệu nhận biết sức khỏe qua liềm móng tay

      June 26, 2020
      Phương thức xử lý mảng trong javascript

      Phương thức xử lý mảng trong javascript

      May 31, 2020
      Lợi ích của việc tập thể dục thường xuyên

      Lợi ích của việc tập thể dục thường xuyên

      May 25, 2020
      DEVZONE

      Browse by Category

      • Algorithm
      • Architecture
      • Database
      • Design
      • Dev
      • DevOps
      • Idea
      • IoT
      • Lifestyle
      • Network
      • News
      • Test
      • Uncategorized
      • Web
      • About
      • Advertise
      • Privacy & Policy
      • Contact

      © 2019 Devzone

      No Result
      View All Result

      © 2019 Devzone