2013-02-26 18 views
6

Tôi bắt đầu phát triển với symfony 2 và nó sử dụng một tiêm phụ thuộc rất nhiều. Tôi muốn biết nếu có cách nào mà làm cho netbeans phát hiện các loại đối tượng dựa trên chuỗi và tự động hoàn thành với phương pháp của họ?Làm thế nào để tự động hoàn thành các phương pháp từ Symfony 2 DI trong netbeans

Ví dụ: $this->container->get('doctrine') trả về phiên bản Doctrine\Bundle\DoctrineBundle\Registry. Trong vùng chứa, khóa doctrine tương ứng với Doctrine\Bundle\DoctrineBundle\Registry.

Giống như vậy, cũng có thể hữu ích cho zendframework 2.

Tôi không muốn tạo các phương thức mới trong bộ điều khiển và cũng không sử dụng/* @var $ var Symfony ... * /, tôi sẽ tự động phát hiện.

Trả lời

4

Theo như tôi biết, không có cách nào để IDE phát hiện loại đối tượng mà vùng chứa của bạn trả về. Giải pháp của tôi là bọc các cuộc gọi đó vào thùng chứa thành các hàm getter riêng. IMHO cũng cải thiện khả năng đọc mã - đặc biệt, nếu bạn thực hiện cuộc gọi này nhiều hơn một lần cho mỗi lớp.

/** 
* @return \Doctrine\Bundle\DoctrineBundle\Registry 
*/ 
private function getDoctrine() 
{ 
    return $this->container->get('doctrine'); 
} 
+0

Vâng Tôi biết giải pháp này nhưng chưa phải là điều tôi đang tìm kiếm. Tôi đã mở một vấn đề cho thấy nó tại http://netbeans.org/bugzilla/show_bug.cgi?id=226725 – dextervip

+1

Đây là những gì tôi làm là tốt, 1 - mặc dù nói chung 'bảo vệ' nên được ưa thích để' riêng' trừ khi có một lý do cụ thể tại sao một lớp con (lý thuyết) không nên sử dụng getter. – halfer

0

IDE "PhpStorm" cho phép đề xuất "sử dụng" khai báo. Và IDE này đề xuất các tính năng cụ thể cho Symfony2 và Drupal!

sửa cuối bởi JetBrains: http://www.jetbrains.com/phpstorm/

Không miễn phí nhưng đầy đủ sức mạnh đủ để giảm thời gian developpement thời gian (và thời gian là tiền bạc ...)

Thưởng thức:)

0

phpStorm:

$foobar= $this->get('foobar'); //returns mixed 
/* @var \MyNamespace\FooBar $foobar*/ 

hoặc

$foobar= $this->get('foobar'); //returns mixed 
/* @var FooBar $foobar*/ 

Bạn có thể làm điều này với nhật thực PDT:

$foobar= $this->get('foobar'); //returns mixed 
/* @var $foobar \MyNamespace\FooBar*/ 
0

(Đi bộ xung quanh) Khi nói đến dịch vụ Symfony:

Thay vì

$doctrine = $this->container->get('doctrine'); 

sử dụng

$doctrine = $this->getDoctrine(); 

Như bạn có thể thấy, Symfony cho phép bạn truy cập hầu hết dịch vụ s trực tiếp từ biến số $this. NetBeans sẽ biết những gì hoàn thành tự động để sử dụng.

Cho phép có một cái nhìn tại sao điều này làm việc (bên trong lớp điều khiển)

enter image description here

Có thể vì nhập khẩu lớp điều khiển Registry lớp với tuyên bố SỬ DỤNG,

use Doctrine\Bundle\DoctrineBundle\Registry; 

và sau đó trong chú thích chú thích phương thức, nó khai báo kiểu đối tượng trả về với

/* 
* @return Registry 
*/ 

Nếu bạn gọi $ this-> container-> get ('doctrine'); trực tiếp sau đó tự động hoàn thành sẽ được bỏ qua và bạn sẽ phải sử dụng những gì dưới đây.

(Trả lời) Không có phép tự động hoàn thành phép thuật nào hoạt động cho đến thời điểm này. Sử dụng Php Storm (nó làm những gì bạn yêu cầu). Đối với những người chọn gắn bó với NetBeans, bạn cần sử dụng chú thích thủ công như ví dụ bên dưới:

Chúng tôi có thể trỏ NetBeans đến lớp mà nó sẽ sử dụng để hoàn thành tự động.

1) Trong thiết bị đầu cuối từ tìm kiếm thư mục dự án cho dịch vụ mà bạn muốn nhập khẩu:

php bin/console debug: container

Nếu bạn biết những gì bạn đang tìm kiếm sử dụng này để thay thế:

php bin/console d: container | grep thuyết

...

thuyết --------------------------------- ----------------------- thuyết \ Bundle \ DoctrineBundle \ Registry

...

2) Nếu đây không phải là một dịch vụ sử dụng get_class() PHP xây dựng trong hàm để lấy tên lớp của đối tượng mà biến cụ thể đó. Hoặc sử dụng lớp phản chiếu. Tuỳ bạn.

3) Một khi bạn biết tên lớp tuyên bố SỬ DỤNG khai báo để có thể đọc tốt hơn

use Doctrine\Bundle\DoctrineBundle\Registry; 

4) Bây giờ wen chúng ta biết tên lớp của trường hợp đối tượng trong biến Đặc biệt chúng tôi đã sẵn sàng để thông báo cho NetBeans về là gì những gì chúng tôi biết bằng cách sử dụng chú thích nhận xét để có thể bật tự động hoàn thành.

/** 
    * @var $doctrine Registry 
    */ 
    $doctrine = $this->container->get('doctrine'); 

Bây giờ hoàn thành tự động được bật. Loại

$doctrine->| 

sau đó nhấn Ctrl + Space.Xem hình ảnh bên dưới:

enter image description here

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