Làm thế nào để Drupal xử lý tự động tải các lớp?


10

Làm thế nào để Drupal xử lý tự động tải các lớp thông qua các mô-đun? Chẳng hạn, nếu tôi có một mô-đun Sự kiện và tôi khai báo một lớp có tên là Sự kiện, và sau đó trong tệp .info tôi bao gồm tệp lớp, làm thế nào để đăng ký?

Vấn đề là tôi đang cố gắng tự động lấy một mảng chứa tất cả các tên lớp được tải. get_declared_groupes () không trả về tên của tất cả các lớp của tôi được khai báo theo cách này, vì vậy tôi giả sử rằng chúng được tự động tải bằng cách nào đó. Theo các đề xuất từ ​​một câu hỏi tràn ngăn xếp khác, tôi đã thử nhận tất cả chúng với spl_autoload_fifts () , nhưng điều đó cũng không thành công.

Có ý kiến ​​gì không?

Câu trả lời:


13

Tất cả các tệp được liệt kê trong tệp .info được phân tích cú pháp khi các mô-đun được xây dựng lại (Chỉ các tệp đã thay đổi / mới trong danh sách đó, vì lý do hiệu suất).

Thông tin đó sau đó được lưu trữ trong {registry}{registry_files}bảng. Vì vậy, nếu bạn muốn nhận được tất cả các lớp hoặc các lớp theo một mẫu đặt tên nhất định, bạn có thể truy vấn các bảng đó.


7

Drupal duy trì một sổ đăng ký mã và sử dụng nó cho trình tải tự động các lớp của nó. Để điền vào sổ đăng ký này với các lớp của mô-đun, bạn nên thêm tệp của chúng vào mục nhập tệp [] trong tệp .info:

files[] = includes/Foo.inc
files[] = includes/Bar.inc

Tự động tải lớp của PHP sẽ đảm bảo rằng tệp lớp cha cũng được tải.

Tín dụng cho người dùng pier-buyle cho câu trả lời này, xem câu trả lời ban đầu của anh ta ở đây cho cùng một câu hỏi.

Mong rằng sẽ giúp


5

spl_autoload_functions()trả về danh sách các chức năng tự động tải đã được đăng ký spl_autoload_register(). Drupal đăng ký hai hàm tự động tải: một cho các lớp ( drupal_autoload_ class () ) và một cho các giao diện ( drupal_autoload_interface () ).

Cả hai hàm đều sử dụng _registry_check_code () ; bằng cách sử dụng mã của nó, bạn có thể viết một hàm liệt kê tất cả các lớp được thực hiện bởi các mô-đun Drupal 7.


3

Nếu bạn đã thêm một mục vào mảng [] của tệp .info, bạn sẽ phải chuyển đến phần quản trị mô-đun và nhấp vào "lưu cấu hình". Điều này sẽ nhận được drupal để làm mới thông tin .info và các mục mới sẽ được đăng ký.


1

Tôi đã thấy rằng việc khai báo các tệp bao gồm của tôi trong tệp thông tin sẽ không nhận ra chúng khi tôi bắt đầu chạy mô-đun. Nếu tôi có một sự kiện lớp trong tệp event.inc. nhưng đặt một đối tượng trong mô-đun, nó không được công nhận. Tôi thêm dòng

include_once ('CMatArticleHandler.inc');

trước biến $ = sự kiện mới (); hàng. Tôi mới biết điều này vì vậy có thể có nhiều hơn thế này, nhưng nó đã hoạt động cho đến nay.


1
Thực sự đáng tiếc rằng mọi người chỉ đánh giá thấp điều này thay vì giải thích những gì cần làm để tránh cần phải làm điều này. Tôi cũng đang ở trong tình huống tương tự: Trình tải tự động của Drupal không nhận ra sự cần thiết phải tải một tệp để có được một lớp.
chào đón

Người ta cần xóa registry khi thêm các lớp mới. Một cách dễ dàng để thực hiện othis thông qua drush là với lệnh này: drupal.org/project/registry_Vbuild
stefgosselin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.