Tôi đang cố gắng sử dụng Trình quản lý Dịch vụ trên lớp tổ chức của mình nhưng tôi không biết cách tốt nhất để làm điều đó.Cách tốt nhất để sử dụng ServiceManager trong Lớp Mô hình là gì?
Thật dễ dàng trên bộ điều khiển vì chúng tôi có thể gọi cho người quản lý dịch vụ bằng: $ this-> getServiceLocator();
Nhưng, trong lớp thực thể của tôi, ngay cả khi tôi thực hiện ServiceLocatorAwareInterface tôi có thể retieve ServiceManager vì lớp thực thể của tôi không được gọi với người quản lý dịch vụ:
Vì vậy, cách tốt nhất là gì:
1 - Vượt qua serviceManager trong lớp thực thể của tôi từ bộ điều khiển của tôi 2 - Sử dụng ServiceManager để xây dựng lớp thực thể của tôi 3 - ...?
Để hiểu tốt nhất vấn đề của tôi, đó là mã của tôi mà không làm việc:
My tổ chức lớp:
class Demande extends ArraySerializable implements InputFilterAwareInterface {
/../
public function getUserTable() {
if (! $this->userTable) {
$sm = $this->getServiceLocator();//<== doesn't work !
$this->userTable = $sm->get ('Application\Model\UserTable');
}
return $this->userTable;
}
Câu trả lời rất hữu ích! Một lý do khác để không tiêm ServiceManager vào mô hình là bằng cách này, chúng tôi không thể tuần tự hóa đối tượng của chúng tôi (vì đóng cửa trên ServiceManager). Và vì vậy chúng tôi không thể lưu mô hình trên phiên. –
Điều duy nhất cần được thêm vào tôi cảm thấy là bạn không nên sử dụng quá nhiều 'Closure' quá nhiều. Thay vào đó, hãy viết các lớp nhà máy. Điều này sẽ thúc đẩy hiệu suất tổng thể, vì các lớp học sẽ chỉ được khởi tạo theo yêu cầu. Tất cả các đóng cửa sẽ được khởi tạo trên mỗi yêu cầu duy nhất. – Sam
Một điều nữa: Nếu một số phụ thuộc là hoàn toàn ** bắt buộc ** được khuyến khích sử dụng '__construct()' hoặc tiêm thay vì Setter-Injection – Sam