2014-09-02 14 views
15

Các vấn đề sau đây: Tôi đã xác định một classmap trong composer.json tôi:Composer classmap autoload không tải file mới trong thư mục

"autoload": { 
    "classmap": [ 
     "app/controllers", 
     "app/models", 
     "app/helper.php" 
    ] 
} 

Tuy nhiên, khi tôi tạo một file mới trong "điều khiển" hay " mô hình "thư mục, nó sẽ không tải chúng và tôi luôn luôn phải thực hiện một composer dump-autoload.

Đây có phải là hành vi đúng không? Tôi nghĩ rằng các autoloader từ nhà soạn nhạc theo dõi các thư mục cho các tập tin mới sau đó?

Trả lời

16

Vâng, đây là hành vi đúng. Nếu bạn muốn tự động nạp các lớp mới, bạn phải sử dụng tính năng tự động tải PSR-0 hoặc PSR-4.

Tạo sơ đồ lớp yêu cầu Composer biết tên tệp có chứa một lớp nhất định. Điều này chỉ có thể được thực hiện bằng cách phân tích cú pháp toàn bộ mã nguồn trong thư mục và quét các lớp, giao diện và các định nghĩa đặc điểm.

Đây thường là nhiệm vụ chuyên sâu của CPU và I/O, vì vậy nó chỉ được thực hiện khi Composer cài đặt/cập nhật hoặc (theo yêu cầu) đổ bộ nạp tự động, nó không được thực hiện với mọi require "vendor/autoload.php";.

Lưu ý rằng tự động tải lớp bản đồ chỉ đơn giản là ở đó cho các hệ thống mã kế thừa cũ không triển khai ít nhất PSR-0. Nó không dành cho mã mới - trừ khi bạn muốn trả giá để đổ tự động tải lại trong quá trình phát triển.

+0

Ok ... cảm ơn rất nhiều! – pyxl

+0

"Lưu ý rằng tự động tải lớp bản đồ chỉ đơn giản là ở đó cho các hệ thống mã kế thừa cũ không triển khai ít nhất PSR-0". Không hoàn toàn đúng.Xem tài liệu về tự động tải: "--tối ưu hóa (-o): Tự động tải PSR-0/4 thành bản đồ lớp để có trình nạp tự động nhanh hơn. Điều này được khuyến nghị đặc biệt cho sản xuất, nhưng có thể mất một chút thời gian để chạy vì vậy nó hiện không được thực hiện theo mặc định. " – spekary

+0

Tối ưu hóa trình nạp tự động không giống như xác định lược đồ tự động tải. Nếu một phiên bản tương lai của PHP cung cấp hỗ trợ cấp độ động cơ cho PSR-4, Composer có khả năng sẽ từ bỏ classmap khi tối ưu hóa cho một phiên bản như vậy, nhưng phải giữ cho classmap nếu classmap đó là cách tự động nạp được định nghĩa. – Sven

6

Chuyển tới thư mục gốc của máy chủ của bạn bằng SSH. Bây giờ, hãy làm như sau:

  1. Chạy ls để liệt kê tất cả các tệp.
  2. Bạn sẽ thấy composer.lock tệp; xóa tệp bằng lệnh rm composer.lock.
  3. Bây giờ, hãy chạy lệnh php composer update.

Tùy thuộc vào loại linux của bạn, bạn có thể phải chạy php-cli composer update.

Bước 3 sẽ tạo tệp composer.lock mới và tất cả các lớp học của bạn sẽ được tải lại. Làm điều này bất cứ lúc nào bạn thêm các lớp mới.

hay:

  1. Run composer dump-autoload lệnh.
+1

cảm ơn Sven đã chỉnh sửa –

-2

Puedes Leer este bưu điện, Justo estaba buscando lo MISMO que vos y logre encontrar la respuesta en este bài:

http://phpenthusiast.com/blog/how-to-autoload-with-composer


Bạn có thể đọc bài này, tôi chỉ tìm kiếm giống như bạn và quản lý để tìm câu trả lời trong bài đăng này:

http://phpenthusiast.com/blog/how-to-autoload-with-composer

+3

Vui lòng thêm nhiều câu trả lời của bạn hơn là chỉ một liên kết. Đôi khi các liên kết bị hỏng và câu trả lời sẽ không còn tốt nữa. Ngoài ra, tại sao bạn đặt câu trả lời bằng hai lần bằng hai ngôn ngữ khác nhau? – Chillie

Các vấn đề liên quan