教程:创建实时模板
在开发 PHP 应用程序时,一个经常重复的任务是在其中创建控制器类和操作。在本教程中,我们将创建几个实时模板来自动执行此操作。
创建控制器类实时模板
让我们从一个Controller类开始。控制器类通常命名为BlogController
,并扩展了一些基本Controller
类。
在Settings/Preferences对话框 ( Ctrl+Alt+S) 中,选择 。
单击以创建新的实时模板。为其提供缩写,例如
sc
(代表Sample Controller)、描述、模板应用的上下文(在本例中为 PHP)以及以下文本:类 $Name$Controller 扩展控制器 { $END$ }
生成的模板应如下所示:
我们现在可以打开一个php文件(或创建一个新文件)并使用创建的sc
Live Template。展开模板代码后,我们可以提供控制器的类名并按下Tab以将插入符号移动到$END$
变量的位置。
由于每个控制器类通常驻留在自己的文件中,因此此示例控制器模板也可以实现为文件模板。
变量和表达式
到目前为止,我们已经使用了我们自己的单个变量和PhpStorm 提供$Name$
的特殊变量。$END$
控制器类的命名通常与它们所在的php文件完全相同:例如,MyController.php文件将包含MyController
控制器类。使用 Live Templates,可以让 PhpStorm 根据文件名预填充控制器名称。
在Settings/Preferences对话框 ( Ctrl+Alt+S) 中,选择 。然后,选择我们之前创建的sc模板。
将sc模板的文本更改为以下内容:
类 $Name$ 扩展控制器 { $END$ }单击编辑变量,可以看到 IDE 已将其识别
$Name$
为变量。配置
$Name$
变量如下:提供默认值和表达式。对于我们的例子,我们将使用
fileNameWithoutExtension()
表达式,它将返回不带.php扩展名的文件名。选中Skip if defined复选框,这样当表达式提供一个值时,我们在编辑器中使用实时模板时就不必自己提供它。
当我们应用实时模板时,该类现在将继承文件名,并且插入符号将立即定位在类主体内。
创建控制器动作实时模板
该sc
模板非常简单,可以直接从“设置/首选项”对话框中创建。然而,在更复杂的情况下,在编辑器中编写代码然后从中制作模板可能更容易。
让我们为基本的控制器操作创建一个模板。
在代码编辑器中,像编写应用程序一样编写一些代码。
类 SampleController 扩展控制器 { public function indexAction() { return $this->render(''); } }在编辑器中选择创建的
indexAction
函数并调用 命令。在打开的Save as Live Template...对话框中,请注意此模板的上下文是根据我们在编辑器中使用的文件类型自动设置的。
通过将模板的文本更改为以下内容来配置模板并添加变量:
公共函数 $Action$Action() { $END$ return $this->render('$Bundle$:$Folder$:$Action$.html.twig'); }单击编辑变量并指定变量的表达式和
$Folder$
变量的默认值$Bundle$
。
应用更改后,我们可以使用sa模板生成控制器操作。
创建环绕声模板
在某些情况下,用模板“包围”现有代码可能很有用。顾名思义,环绕模板可以让您做到这一点。它们可以以与实时模板完全相同的方式创建,但还涉及使用$SELECTION$
变量。
例如,让我们创建一个环绕模板,将所选代码包装在一个try/catch
块中并记录异常。
创建一个包含以下文本的实时模板(注意我们
$$
用来转义 PHP 的$
美元符号):尝试 { $SELECTION$ } catch ($TYPE$ $$$VARIABLENAME$) { Logger::log($$$VARIABLENAME$); $END$ }模板中使用了以下变量:
$SELECTION$
表示我们在编辑器中选择的代码。
$TYPE$
作为异常类型的占位符。
$VARIABLENAME$
用作异常变量名称的占位符。
$END$
指示模板展开后的插入符号位置。
在编辑变量对话框中,提供
$TYPE$
表达式complete()
,这样当我们展开模板时,将触发完成。$TYPE$
此外,为和提供默认值$VARIABLENAME$
。
应用更改后,我们可以按如下方式使用环绕模板:选择一些代码,按Ctrl+Alt+J,然后选择新创建的模板。
结果,代码被包裹在模板中,在异常类型上触发完成,并且$exception
默认命名异常变量。我们可以选择正确的类型,然后按Tab到catch
正文中,就在日志语句的下方。