わからん.
が, とりあえず調べてみると説得力あるのが以下だった.
teratail の回答
要は「Laravel公式でもヘルパ関数が用意されているんだから, その実装方法を見習え」ということっぽい.
確かにLaravelには豊富なヘルパ関数がある.
単純に実装する
この方法で実装するなら以下のサイトの「Composerでオートロードする方法」みたいな感じだろうか.
Laravel 5へ自作のヘルパー関数を追加するベストプラクティス - 綺麗に死ぬITエンジニア
確かにシンプルでいい.
というか仕事で使った.
しかし, なんでもかんでもグローバルってのも.
と思ってみていたらbladeには@injectという記法があるらしい.
Blade Templates - Laravel
@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きちんと使えないとダメなフレームワークっぽいんだけど, 雑魚の私にそこまでできるかという問題.