Laravelでヘルパー乱用をしてグローバル汚染するのを避ける提案


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で使えるロジックを定義できるのではないかと思った。

いや、普通に違う方法あるでしょというベストアンサーお待ちしてます。