教程:创建实时模板
在开发 PHP 应用程序时,一个常见的重复任务是创建 Controller 类及其操作。 本教程描述了如何创建实时模板以实现自动化。
创建一个 Controller 类实时模板
让我们从一个 Controller 类开始。 Controller 类通常命名为类似 BlogController 的名称,并继承一些基本的 Controller 类。
在 设置 对话框(Ctrl+Alt+S )中,选择 。
单击
以创建一个新的实时模板。 为其提供一个缩写,例如
sc(代表 示例 Controller ),一个描述,模板适用的上下文(在本例中为 PHP),以及以下文本:class $Name$Controller extends Controller { $END$ }
生成的模板应如下所示:

您现在可以打开一个 php 文件(或创建一个新文件)并使用创建的 sc 实时模板。 模板代码展开后,提供控制器的类名并按下 Tab 将光标移动到 $END$ 变量的位置。

变量和表达式
到目前为止,您已经使用了一个 $Name$ 自定义变量和由 PhpStorm 提供的特殊 $END$ 变量。 Controller 类通常命名为与其所在的 php 文件完全相同的名称:例如, MyController.php 文件将包含 MyController 控制器类。 通过实时模板,可以让 PhpStorm 根据文件名预填充控制器名称。
在 设置 对话框(Ctrl+Alt+S )中,选择 。 然后,选择之前创建的
sc模板。将
sc模板的文本更改为以下内容:class $Name$ extends Controller { $END$ }单击 编辑变量(E)… ,您会看到 IDE 已将
$Name$识别为一个变量。按如下方式配置
$Name$变量:提供一个默认值和表达式。 在我们的案例中,使用
fileNameWithoutExtension()表达式,该表达式将返回文件名(不包括 .php 扩展名)。选中 如果定义则跳过 复选框,这样当表达式提供一个值时,您在编辑器中使用实时模板时就不需要自己提供值了。

当您应用实时模板时,类现在将继承文件名,并且光标将立即定位在类体内。

在表达式中使用变量
您可以将定义的模板变量用作表达式的参数。 例如,让我们扩展模板以包含一个 __toString 方法定义。
将
sc模板的文本更改为以下内容:class $NAME$ extends Controller { public $$$PROPERTY$; public function __toString() { return $this->$PROPERTY$; } $END$ }请点击 编辑变量(E)…
按如下方式配置
$PROPERTY$变量:提供一个默认值和表达式。 在我们的案例中,使用
decapitalize(NAME)表达式,该表达式将返回小写化的值(如果$NAME$变量,即类名,不包括 .php 扩展名)。选中 如果定义则跳过 复选框,这样当表达式提供一个值时,您在编辑器中使用实时模板时就不需要自己提供值了。

当您应用模板时,创建的类现在将包括一个属性和一个 __toString 方法定义。

创建一个 Controller 操作实时模板
sc 模板足够简单,可以直接从 设置 对话框中创建。 然而,在更复杂的情况下,可能更容易在编辑器中编写代码,然后将其制作成模板。
让我们为一个基本的控制器操作创建一个模板。
在代码编辑器中,像编写应用程序时一样编写一些代码。
class SampleController extends Controller { public function indexAction() { return $this->render(''); } }在编辑器中选择创建的
indexAction方法,然后在主菜单中选择 。在打开的 保存为实时模板(I)… 对话框中,注意到此模板的上下文会根据您在编辑器中处理的文件类型自动设置。

通过更改模板的文本为以下内容来配置模板并添加变量:
public function $Action$Action() { $END$ return $this->render('$Bundle$:$Folder$:$Action$.html.twig'); }单击 编辑变量(E)… ,并为
$Folder$变量指定表达式,为$Bundle$变量指定默认值。 请注意,默认值必须用双引号括起来。
应用更改后,您可以使用 sa 模板生成一个控制器操作。

创建一个环绕模板
在某些情况下,将现有代码“环绕”一个模板可能会很有用。 顾名思义, 环绕模板 让您可以做到这一点。 它们可以以与实时模板完全相同的方式创建,但还涉及使用 $SELECTION$ 变量。
例如,让我们创建一个环绕模板,将选定的代码包装在一个 try/catch 块中并记录异常。
创建一个包含以下文本的实时模板(注意,双美元符号
$$用于转义 PHP 的$美元符号):try { $SELECTION$ } catch ($TYPE$ $$$VARIABLENAME$) { Logger::log($$$VARIABLENAME$); $END$ }模板中使用了以下变量:
$SELECTION$表示在编辑器中选定的代码。
$TYPE$作为异常类型的占位符。
$VARIABLENAME$作为异常变量名的占位符。
$END$指示模板展开后光标的位置。
在 编辑变量(E)… 对话框中,为
$TYPE$提供complete()表达式,这样当您展开模板时,会触发代码补全。 此外,为$TYPE$和$VARIABLENAME$提供用双引号括起来的默认值。
应用更改后,您可以按如下方式使用环绕模板:选择一些代码,按下 Ctrl+Alt+J ,然后选择新创建的模板。
结果是,代码被包装在模板中,异常类型触发了代码补全,异常变量默认命名为 $exception。 您可以选择正确的类型并按下 Tab ,最终进入 catch 主体,正好位于日志语句的下方。
