わからん.
が, とりあえず調べてみると説得力あるのが以下だった.
要は「Laravel公式でもヘルパ関数が用意されているんだから, その実装方法を見習え」ということっぽい.
単純に実装する
この方法で実装するなら以下のサイトの「Composerでオートロードする方法」みたいな感じだろうか.
Laravel 5へ自作のヘルパー関数を追加するベストプラクティス - 綺麗に死ぬITエンジニア
確かにシンプルでいい.
というか仕事で使った.
名前空間切りたいんですが
しかし, なんでもかんでもグローバルってのも.
と思ってみていたらbladeには@injectという記法があるらしい.
@inject('変数', 'クラス名')
とすればDIできる.なんかやりたい放題な気もするけど.
試しにやってみる
Laravelプロジェクトを作って, serviceディレクトリと雑なサービスをつくる.
$ mkdir app/Services
$ vi app/Services/MoneyFormatService.php
とりあえずフォーマットするメソッド生やす.
# app/Services/MoneyFormatService.php <?php namespace App\Services; class MoneyFormatService { // 金額をフォーマットする雑なメソッド public function moneyFormat(float $money) { return "¥" . number_format(floor($money)); } }
雑にビューを作る.
{{-- resource/views/sample.blade.php --}} @inject('formatter', 'App\Services\MoneyFormatService') サンプルだよ. <p>{{ $formatter->moneyFormat(1000) }}</p>
ルートも雑に作る.
# route/web.php Route::get('/sample', function() { return view('sample'); });
実行結果
サンプルだよ. ¥1,000
無秩序にドメイン特化なヘルパ関数を作りまくるよりはいいかもしれない.
汎用的なものは最初の参考例通りグローバルとして用意して,
あとはきちんとサービスを用意して必要に応じてDIすりゃいいということだろうか(知らんけど)
そもそもLaravelってDIきちんと使えないとダメなフレームワークっぽいんだけど, 雑魚の私にそこまでできるかという問題.