チュートリアル: ライブテンプレートの作成
PHP アプリケーションを開発する場合、よく繰り返されるタスクは、コントローラークラスとその中にアクションを作成することです。このチュートリアルでは、これを自動化するためのライブテンプレートを作成する方法について説明します。
コントローラークラスのライブテンプレートを作成する
コントローラークラスから始めましょう。コントローラークラスは、通常、BlogController
のように名前が付けられ、基本的な Controller
クラスを拡張します。
設定ダイアログ(Ctrl+Alt+S)で、 を選択します。
をクリックして新しいライブテンプレートを作成します。このテンプレートには、
sc
(サンプルコントローラーの略)、説明、テンプレートが適用されるコンテキスト(この場合は PHP)、および次のテキストがあります。class $Name$Controller extends Controller { $END$ }
結果のテンプレートは次のようになります。
これで、php ファイルを開いて(または新しいファイルを作成して)、作成した sc
ライブテンプレートを使用できます。テンプレートコードが展開されたら、コントローラーのクラス名を指定し、Tab を押して、キャレットを $END$
変数の位置に移動します。
変数と式
これまで、単一の $Name$
カスタム変数と PhpStorm によって提供される特別な $END$
変数を使用してきました。コントローラークラスは通常、それらが存在する php ファイルとまったく同じ名前が付けられます。たとえば、MyController.php ファイルには MyController
コントローラークラスが含まれます。ライブテンプレートを使用すると、ファイル名に基づいて PhpStorm にコントローラー名を事前入力させることができます。
設定ダイアログ (Ctrl+Alt+S) で、 を選択します。次に、前に作成した
sc
テンプレートを選択します。sc
テンプレートのテキストを次のように変更します。class $Name$ extends Controller { $END$ }変数の編集をクリックして、IDE が
$Name$
を変数として認識していることを確認します。$Name$
変数を次のように構成します。デフォルト値と式を指定します。この場合、
fileNameWithoutExtension()
式を使用します。これにより、.php 拡張子のないファイルの名前が返されます。定義済みはスキップチェックボックスを選択して、式が値を提供するときに、エディターでライブテンプレートを使用するときに自分で値を提供する必要がないようにします。
ライブテンプレートを適用すると、クラスはファイル名を継承し、キャレットはすぐにクラス本体内に配置されます。
式で変数を使用する
定義されたテンプレート変数を式の引数として使用できます。例として、__toString
メソッド定義を含むようにテンプレートを拡張してみましょう。
sc
テンプレートのテキストを次のように変更します。class $NAME$ extends Controller { public $$$PROPERTY$; public function __toString() { return $this->$PROPERTY$; } $END$ }変数の編集をクリック
$PROPERTY$
変数を次のように構成します。デフォルト値と式を指定します。この場合、
decapitalize(NAME)
式を使用します。これは、$NAME$
変数、つまり .php 拡張子のないクラスの名前の場合に大文字と小文字を区別しない値を返します。定義済みはスキップチェックボックスを選択して、式が値を提供するときに、エディターでライブテンプレートを使用するときに自分で値を提供する必要がないようにします。
テンプレートを適用すると、作成されたクラスにプロパティと __toString
メソッド定義が含まれるようになります。
コントローラーアクションのライブテンプレートを作成する
sc
テンプレートは、設定ダイアログから直接作成できるほどシンプルでした。ただし、より複雑なケースでは、エディターでコードを記述し、それからテンプレートを作成する方がおそらく簡単です。
基本的なコントローラーアクションのテンプレートを作成しましょう。
コードエディターで、アプリケーションを作成するときと同じようにコードを記述します。
class SampleController extends Controller { public function indexAction() { return $this->render(''); } }作成した
indexAction
メソッドをエディターで選択し、メインメニューで を選択します。開いた「ライブテンプレートとして保存」ダイアログで、このテンプレートのコンテキストが、エディターで作業していたファイルのタイプに基づいて自動的に設定されることに注目してください。
テンプレートのテキストを次のように変更して、テンプレートを構成し、変数を追加します。
public function $Action$Action() { $END$ return $this->render('$Bundle$:$Folder$:$Action$.html.twig'); }「変数の編集」をクリックし、
$Folder$
変数の式と$Bundle$
変数のデフォルト値を指定します。デフォルト値は二重引用符で囲む必要があることに注意してください。
変更を適用したら、sa テンプレートを使用してコントローラーアクションを生成できます。
サラウンドテンプレートを作成する
場合によっては、既存のコードをテンプレートで「囲む」ことが有用な場合があります。名前が示すように、サラウンドテンプレートはあなたにそれをさせます。ライブテンプレートとまったく同じ方法で作成できますが、さらに $SELECTION$
変数を使用する必要があります。
例として、選択したコードを try/catch
ブロックにラップし、例外を記録するサラウンドテンプレートを作成します。
次のテキストを含むライブテンプレートを作成します(2 倍のドル記号
$$
が PHP の$
ドル記号をエスケープするために使用されていることに注意してください)。try { $SELECTION$ } catch ($TYPE$ $$$VARIABLENAME$) { Logger::log($$$VARIABLENAME$); $END$ }テンプレートには次の変数が使用されています。
$SELECTION$
エディターで選択されたコードを示します。
$TYPE$
例外タイプのプレースホルダーとして機能します。
$VARIABLENAME$
例外変数名のプレースホルダとして機能します。
$END$
テンプレートが展開された後のキャレット位置を示します。
変数の編集ダイアログで、
$TYPE$
にcomplete()
式を指定して、テンプレートを展開すると完了がトリガーされるようにします。さらに、$TYPE$
および$VARIABLENAME$
のデフォルト値を二重引用符で囲んで指定します。
変更を適用したら、次のようにサラウンドテンプレートを使用できます。コードを選択し、Ctrl+Alt+J を押して、新しく作成したテンプレートを選択します。
その結果、コードはテンプレートにラップされ、例外型で完了がトリガーされ、例外変数の名前はデフォルトで $exception
になります。正しい型を選択し、Tab を押すと、ロギングステートメントのすぐ下にある catch
本体に表示されます。
関連ページ:
ファイルテンプレート
ファイルテンプレートは、プロジェクトツリーのコンテキストメニューのメニューまたは新規セクションを使用して作成する新しいファイルの既定の内容の仕様です。作成するファイルの種類に応じて、テンプレートは、その種類のすべてのファイルに期待される初期コードとフォーマットを提供します (業界または言語の標準、企業ポリシー、その他の理由に従って)。PhpStorm は、新しいファイルを作成するときに提案される、サポートされているすべてのファイルタイプの定義済みテンプレートを提供します。ファイルテンプレートの管...
ライブテンプレート変数
ライブテンプレートの略語を展開すると、その変数は値を入力できる入力フィールドとして表示されるか、値に置き換えられます。これらは、変更可能なデフォルト値または関数を使用して計算された値です。テンプレート内で変数を宣言するには、次の形式を使用します: 式では、ドル文字を開閉せずに変数名を使用します(例:)。式を使用して各変数を定義し、式が評価に失敗した場合のデフォルト値を提供します。この式には、次の構成が含まれる場合があります。二重引用符で囲まれた文字列定数、ライブテンプレートで定義されている他の変数...
ライブテンプレートを共有する
PhpStorm はカスタムライブテンプレートグループの定義と事前定義済みテンプレートグループに追加されたテンプレートを自動的に生成された XML 設定ファイルに保存します。カスタムグループの場合、ファイルには、グループに含まれるすべてのテンプレートの定義が含まれます。変更済みの定義済みグループの場合、ファイルには追加(または変更)されたライブテンプレートの定義のみが含まれます。ライブテンプレートグループ設定ファイルは、IDE 構成ディレクトリの templates ディレクトリに格納されています。...