この記事は、 CakePHP Advent Calendar 2019 3日目の記事です、が、6日に公開しました。
PhpStorm Live Template?
公式にヘルプがあるよ。
CakePHPのビューテンプレートを書くのをちょっと楽にする
CakePHPのテンプレートは素のPHPです。こんな感じですね。
<h1 class="post-title"><?= h($post->title) ?></h1>
<div class="post-content">
<?= nl2br(h($post->body)) ?>
</div>
<?php if ($post->tags) : ?>
<ul class="post-tags">
<?php foreach ($post->tags as $tag) : ?>
<li><?= h($tag->name) ?></li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
テンプレートを書くとき、 <?=
やら、 <?php if
やら <?php foreach
をよく書いていると思います。
毎回毎回、これを書くのだるいですよね。閉じタグまで含めると特に。
そんなときは、PhpStormのLive Templatesを使って楽をしましょう。
ライブテンプレートを追加する
Preferences
> Editor
> Live Templates
でライブテンプレートを追加します。
追加の仕方はヘルプを読んでね。
ポイントはHTMLコンテキストでの適用にすること。ダイアログの下の方のここをクリックして設定するんだ。
<?=
pe<tabキー>
で、 <?=
になるように設定するよ。
Abbreviation: pe
Description: php short echo
(これは説明文なので適当でいい
Template text:
<?= $END$ ?>
$END$
は、変換後にキャレットがその位置に移動するんだ。
<?php if () : ?><?php endif; ?>
pif<tabキー>
で、 ifブロックを生成できるようにするよ。
Abbreviation: pif
Description: php if
(これは説明文なので適当でいい
Template text:
<?php if ($CONDITIONS$) : ?>
$END$
<?php endif; ?>
<?php foreach () : ?><?php endforeach; ?>
pfore<tabキー>
で、foreachブロックを生成できるようにするよ。
これは、ライブテンプレートのPHP
の中に、fore
, forek
があるからそれをコピーして作成するといいよ。
キーなし
Abbreviation: pfore
Description: php foreach(iterable_expr as $value) {...}
(これは説明文なので適当でいい
Template text:
<?php foreach ($ITERABLE$ as $VAR_VALUE$) : ?>
$END$
<?php endforeach; ?>
キーあり
Abbreviation: pforek
Description: php foreach(iterable_expr as $key => $value) {...}
(これは説明文なので適当でいい
Template text:
<?php foreach ($ITERABLE$ as $VAR_KEY$ => $VAR_VALUE$) : ?>
$END$
<?php endforeach; ?>
おまけ
PhpStorm 2019.3 で、<?
って入力すると <?php
に展開するようになったけど、<?=
を入力したいときにとても困る。
無効にするオプションは検討されているみたいだけど、実装されるまでの間は次のLive Templateを設定しておくといいかも。
Abbreviation: <?php=
Description: php short echo open
(これは説明文なので適当でいい
Template text:
<?= $END$ ?>
コンテキストはPHPで。
まとめ
CakePHP あんまり関係なかった。
tbIZG9ExcCt
9YFOYeXoVc3
uwggiRymmrk
Bdi135plFJ0
5Ic2Kj49Idc
DEFrrgY3X0N
FbvSH2U2HuN
xYgkHcjXglp
rtDLryLID61
AkQPwWzC0ki
QamsoDV71f6
raf9nScK0Ts
pPXq25caZE6
gtFwQCcggO2
qeIcIoFDScL
jxcv104avds
Ya2Vosesusj
y927SG3W7Z2
RJItgjWRuo1
l3wSP7rO5RU
vNzglw7cCU5
e0tFLTgOYti
qbOj8NbSCRQ
0LM6jwp5Nqm
f5w1wT2SaoQ
N4F4d4bPc11
O6EaMJSHlxm
hObNk02DNVi
gQrnsprYf4c
IwQfRwILSZY
GgEBYXbKnzh
jlJjBFtUirl
b1Py1D82GOb
LATKLqMz8db
TPP6gkX3Gb6
W2Rlfm8F3Kl
8hMNtIpSJWW