Laravelでviewのロジックを切り出したいときにhelperは便利
以下のように定義してしまえば、どこからでも呼び出せる
viewロジックをまとめられた!!
となるが、どこからでも呼び出せてしまう
という問題も同時におきている。
if (!function_exists('normalizeAge')) {
/**
* 年齢から 10代前半 の表記に丸めた文字列を返す
* @param int $age 年齢
* @return string 10代前半など年代を丸めた文字列
*/
function normalizeAge($age) {
if (empty($age)) {
return '年齢 未回答';
}
return getTensPlace($age) . '代' . (isEarlyAge($age) ? '前半' : '後半');
}
}
そこでviewテンプレートのBladeの構文解析器を拡張する(directive追加)
Controller側でこれを定義しておくことで、そのControllerを用いた時だけ使える
viewテンプレートで利用可能な構文が追加される。
Blade::directive('normalizeAge', function ($age) {
if (empty($age)) {
return "<?php echo 年齢、未回答; ?>";
}
return "<?php echo getTensPlace($age) . '代' . (isEarlyAge($age) ? '前半' : '後半') ?>";
});
使い方
bladeテンプレートファイルで @if や @foreach のように記述するだけ
@normalizeAge(14)
このようにすることでグローバル汚染を防ぎつつ、viewで使えるロジックを定義できるのではないかと思った。
いや、普通に違う方法あるでしょというベストアンサーお待ちしてます。