Tôi đang sử dụng PHP Storm làm IDE của mình, nhưng tôi tin rằng các IDE khác như Netbeans sẽ có cùng vấn đề như tôi sẽ giải thích bên dưới.Bảo toàn khả năng tự động hoàn thành với Symfony2 Dependency Injection
Khi sử dụng một khung công tác như Symfony2, chúng tôi có thêm thế giới tuyệt vời về Dependency Injection. Vì vậy, các đối tượng có thể được khởi tạo đơn giản bằng cách sử dụng mã như đoạn mã sau:
$myThingy = $this->get('some_cool_service');
Điều này rất tiện dụng vì các đối tượng đã được định cấu hình trước đó. Một vấn đề là, tự động hoàn thành phá vỡ hoàn toàn về cơ bản bất kỳ IDE PHP nào, vì IDE không biết kiểu get() đang trả về.
Có cách nào để bảo vệ hoàn thành tự động không? Việc tạo ra ví dụ như một phần mở rộng của Controller có phải là câu trả lời không? Ví dụ:
class MyController extends Controller {
/**
* @return \MyNamespace\CoolService
*/
public getSomeCoolService() {
return new CoolService();
}
}
và sau đó cho bộ điều khiển ứng dụng, hãy chỉ định MyController làm lớp cơ sở thay vì Bộ điều khiển?
Điều gì về việc sử dụng lớp Nhà máy hoặc bất kỳ phương pháp khả thi nào khác?
Có phải vấn đề mà nó không biết đó là một đối tượng hay không biết đó là đối tượng của một lớp cụ thể không? Nếu đó là trước đây, bạn không thể bỏ $ myThingy làm đối tượng? '$ myThingy = (đối tượng) $ this-> get ('some_cool_service');' – DaveRandom
Đúng, nhưng thậm chí việc truyền tới một đối tượng vẫn sẽ để nguyên IDE không biết gì về kiểu lớp thể hiện, nghĩa là ... vẫn không tự động - hoàn thành thật đáng buồn. :( –
Những thứ tương tự như tôi đã có: http://stackoverflow.com/questions/21936380/best-practise-including-code-completion-in-zf2, cùng một giải pháp nhưng tất cả đều cần thêm công việc – Gizzmo