PhpStorm 2020.3 Help

Tutorial: Creating Live templates

When developing PHP applications, a commonly repeated task is creating Controller classes and actions in them. In this tutorial, we'll create several Live Templates to automate this.

Creating a Controller Class live template

Let's start with a Controller class. Controller classes are typically named like BlogController, and extend some basic Controller class.

  1. In the Settings/Preferences dialog Ctrl+Alt+S, select Editor | Live Templates.

  2. Click the Add button to create a new Live Template. Provide it with an abbreviation, for example, sc (standing for Sample Controller ), a description, the context in which the template applies, in this case, PHP, and the following text:

    class $Name$Controller extends Controller { $END$ }

The resulting template should look as follows:

Live template settings page

We can now open a php file (or create a new one) and use the created sc Live Template. Once the template code is expanded, we can provide the controller's class name and press Tab to move the caret to the $END$ variable's position.

Ps controller live template

Since each controller class typically resides in its own file, this Sample Controller template could also be implemented as a File Template.

Variables and Expressions

So far, we've used a single $Name$ variable of our own and the special $END$ variable provided by PhpStorm. Controller classes are commonly named exactly like the php files they reside in: for example, the MyController.php file will contain the MyController controller class. With Live Templates, it is possible to have PhpStorm pre-populate the controller name based on the file name.

  1. In the Settings/Preferences dialog Ctrl+Alt+S, select Editor | Live Templates. Then, select the sc template that we've created earlier.

  2. Change the sc template's text to the following:

    class $Name$ extends Controller { $END$ }
  3. Click Edit variables and see that the IDE has recognized $Name$ as a variable.

    Controller live template variables

    Configure the $Name$ variable as follows:

    • Provide a default value and the expression. For our case, we'll use the fileNameWithoutExtension() expression, which will return the name of our file without the .php extension.

    • Select the Skip if defined checkbox so that when the expression provides a value, we don't have to provide it ourselves when we use the live template in the editor.

When we apply the Live Template, the class will now inherit the filename, and the caret will be positioned inside the class body immediately.

Ps controller live template modified

Creating a Controller Action live template

The sc template was simple enough to be created directly from the Settings/Preferences dialog. In more complex cases, however, it's probably easier to write code in the editor and then make a template out of it.

Let's create a template for a basic controller action.

  1. In the code editor, write some code just as we you do when writing an application.

    class SampleController extends Controller { public function indexAction() { return $this->render(''); } }
  2. Select the created indexAction function in the editor and invoke the Tools | Save as Live Template... command from the main menu.

  3. In the Save as Live Template... dialog that opens, notice that the context for this template is automatically set based on the type of file we were working with in the editor.

    Save as live template dialog
  4. Configure the template and add variables by changing the template's text to the following:

    public function $Action$Action() { $END$ return $this->render('$Bundle$:$Folder$:$Action$.html.twig'); }
  5. Click Edit variables and specify the expression for the $Folder$ variable and the default value for the $Bundle$ variable.

    Controller action live template variables

Having applied the changes, we can use our sa template to generate a controller action.

Sample action live template

Creating a Surround Template

In some cases, it may be useful to "surround" the existing code with a template. As the name implies, Surround Templates let you do just that. They can be created in the exact same way as Live Templates but additionally involve using of the $SELECTION$ variable.

As an example, let's create a Surround Template that wraps the selected code in a try/catch block and logs the exception.

  1. Create a live template containing the following text (notice that we use $$ to escape the PHP's $ dollar sign):

    try { $SELECTION$ } catch ($TYPE$ $$$VARIABLENAME$) { Logger::log($$$VARIABLENAME$); $END$ }

    The following variables are used in the template:

    $SELECTION$Denotes the code we select in the editor.
    $TYPE$Serves as is a placeholder for the exception type.
    $VARIABLENAME$Serves as a placeholder for the exception variable name.
    $END$Indicates the caret position after the template is expanded.
  2. In the Edit variables dialog, provide $TYPE$ with the complete() expression, so that when we expand the template, completion will be triggered. Additionally, provide the default values for $TYPE$ and $VARIABLENAME$.

    Surround template variables

Having applied the changes, we can use our surround template as follows: select some code, press Ctrl+Alt+J, and select the newly created template.

As a result, the code is wrapped in the template, completion is triggered on the exception type, and the exception variable is named $exception by default. We can pick the correct type and press Tab to end up in the catch body, right underneath the logging statement.

Expand surround template
Last modified: 08 March 2021