创建辅助函数
Symfony 插件根据它们与 Symfony 类和函数的使用情况提供参数类型和返回类型推断。这使您可以创建自己的辅助函数来获取或返回模板、服务、实体、翻译、路由、表单或事件。
例如,让我们创建一个redirectToRoute
可以在控制器中使用的函数。此函数将结合Controller
类redirect
和generateUrl
函数,以便您可以轻松地将用户重定向到我们应用程序中的已知路由。代码如下所示:
当我们调用这个函数时,我们将获得 and 的代码完成Ctrl+Space,$route
以及导航到相应声明的能力Ctrl+B。
$response
返回实例的代码完成和导航也可用。
这两项工作的原因是 Symfony 插件$route
通过分析已知函数的调用和返回类型来推断 's 类型。这种类型分析适用于大多数 Symfony 组件(模板、服务、实体、翻译、路由、表单或事件),但在某些情况下它不会按原样工作。
每当我们自己创建或从第三方库使用的辅助函数的完成和导航似乎不起作用时,Symfony 插件提供了一个解决方案:它通过方法参数和签名类型项目设置提供对其某些内部的访问.
方法参数
考虑以下函数,它不使用任何 Symfony 特定的函数:
在这种情况下,Symfony 插件将无法确定$route
字符串参数应该包含一个路由名称并为其提供完成和导航。我们可以使用以下任何技术来解决此问题:
方法参考
要告诉 Symfony 插件我们的方法,在Settings/Preferences对话框 ( Ctrl+Alt+S) 中,导航到 。然后,点击添加新的方法参数注册。
提供以下内容:
CallTo
\
:包含函数的类的 FQN(带前导)。方法:函数名称。
Index:我们想要完成和导航的参数的索引。
Provider:潜在数据的提供者。这是我们为函数参数选择要接受的 Symfony 组件的地方。
Contributor:(可选)如果我们的函数参数是一个数组,并且我们希望在数组键或值中完成,我们可以使用这些选项指定。
ContributorData:(可选)如果我们想要完成数组值,在这里我们可以输入提供完成和导航的键。
一旦我们应用更改,我们的辅助函数参数的完整完成和导航支持将可用。由于这是一个项目级别的设置,您可以与您的团队共享它。
虽然这种技术很强大,但在大多数情况下使用带有哈希的提示可能更容易使用,并且不需要与团队成员共享您的项目设置。
哈希
除了在设置中配置方法参数,我们可以使用提示,类似于我们使用PHPDoc为 PhpStorm 提供类型提示的方式。
通过在函数的 PHPDoc 块中添加以下任何内容,我们可以指定给定参数将采用的数据类型:
#Entity
#Service
#FormType
#Template
#Route
#Class
#TranslationKey
#TranslationDomain
#FormOption
#Interface
添加了提示的示例函数如下所示。请注意#Route
$route 参数的描述中的 。
Symfony 插件现在将正确地索引函数并为参数提供完成和导航$route
。
签名类型
考虑一个测试类,我们将在testIndex
函数中编写一个测试。该类带有一个辅助函数,可以模拟向我们的 Symfony Web 应用程序注册的服务。
由于我们已将#Service
类型提示添加到函数的$service
参数中getMockService
,因此我们现在在调用它时可以获得完成和导航。
不幸的是,我们的模拟服务没有完成:只有 PHPUnitPHPUnit_Framework_MockObject
类的完成是可用的。
理想情况下,在实例上调用完成$mock
将产生服务的所有公共成员,在这种情况下是filesystem
服务。getMockService
当使用服务名称调用时mailer
,我们希望它提供基于服务的公共成员的完成mailer
。
为此,在设置/首选项对话框 ( Ctrl+Alt+S) 中,导航到 。然后,选中启用自定义签名类型复选框并单击以添加有关该getMockService
函数的信息。
提供以下内容:
CallTo
\
:包含函数的类的 FQN(带前导)。方法:函数名称。
Index:决定返回类型的参数的索引。
Provider:潜在数据的提供者。这是我们选择函数返回的 Symfony 组件类型的地方。
一旦我们应用更改,我们的变量的代码完成$mock
将可用。