6

我开始使用 symfony 2 进行开发,它使用了很多依赖注入。我想知道是否有任何方法可以让 netbeans 根据字符串检测对象的类型并使用他们的方法自动完成?

例如,$this->container->get('doctrine')返回一个Doctrine\Bundle\DoctrineBundle\Registry实例。在容器中,键doctrine对应于Doctrine\Bundle\DoctrineBundle\Registry

类似的东西,也可能对 zendframework 2 有用。

我不想在控制器中创建新方法,也不想使用 /* @var $var Symfony...*/,我会自动检测。

4

4 回答 4

4

据我所知,IDE 无法检测容器返回的对象的类型。我的解决方案是将这些对容器的调用包装到私有 getter 函数中。恕我直言,这也提高了代码的可读性——特别是如果你在每个类中多次调用。

/**
 * @return \Doctrine\Bundle\DoctrineBundle\Registry
 */
private function getDoctrine()
{
    return $this->container->get('doctrine');
}
于 2013-02-26T17:57:52.963 回答
0

php风暴:

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

或者

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

您可以使用 Eclipse PDT 执行此操作:

$foobar= $this->get('foobar'); //returns mixed
/* @var $foobar \MyNamespace\FooBar*/
于 2014-05-27T20:54:26.853 回答
0

IDE“PhpStorm”允许建议“使用”声明。这个 IDE 为 Symfony2 和 Drupal 提出了特定的功能!

JetBrains 编辑:http: //www.jetbrains.com/phpstorm/

不是免费的,但功能足够强大,可以减少开发时间(时间就是金钱……)

享受 : )

于 2013-02-27T11:51:42.033 回答
0

(四处走走)谈到 Symfony 服务时:

代替

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

利用

$doctrine = $this->getDoctrine();

如您所见,Symfony 允许您直接从 $this变量访问它的大部分服务。NetBeans 将知道使用什么自动完成。

让我们看看为什么会这样(在 Controller 类中)

在此处输入图像描述

可能是因为 Controller 类使用 USE 语句导入 Registry 类,

use Doctrine\Bundle\DoctrineBundle\Registry;

然后在方法注释注释中声明返回的对象类型

/*
* @return Registry
*/

如果你调用 $this->container->get('doctrine'); 直接然后自动完成将被省略,您将不得不使用下面的内容。

(答案)到目前为止,还没有神奇的自动完成功能。使用 Php Storm(它可以满足您的要求)。对于那些选择坚持使用 NetBeans 的人,您需要使用手动注释,如下例所示:

我们可以将 NetBeans 指向一个应该用于自动完成的类。

1)在项目目录的终端中搜索您要导入的服务:

php bin/控制台调试:容器

如果您知道要查找的内容,请改用:

php bin/console d:container | grep 学说

...

学说------------------------------------------------ -------- Doctrine\Bundle\DoctrineBundle\Registry

...

2) 如果这不是服务,请使用get_class() PHP 内置函数来获取对象的类名,它是特定变量。或者使用反射类。由你决定。

3) 一旦你知道了类名,为了更好的可读性声明 USE 语句

use Doctrine\Bundle\DoctrineBundle\Registry;

4) 现在我们知道了特定变量中对象实例的类名是什么,我们准备通过使用注释注释通知 NetBeans 我们知道的内容,以便它可以启用自动完成。

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

现在启用了自动完成。类型

    $doctrine->|

然后按Ctrl+Space。见下图:

在此处输入图像描述

于 2017-05-21T03:21:24.787 回答