LoginSignup
2
1

More than 3 years have passed since last update.

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

Posted at

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で使えるロジックを定義できるのではないかと思った。
いや、普通に違う方法あるでしょというベストアンサーお待ちしてます。

2
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1