2018/10/12
LaravelではMVCモデルを前提に設計されています。
Model ⇒ ビジネスロジック
View ⇒ HTML
Controller ⇒ Request(Requestの管理・Sessionの管理・バリデーション・エラーハンドリング)
View ⇒ HTML
Controller ⇒ Request(Requestの管理・Sessionの管理・バリデーション・エラーハンドリング)
ですので、ビューにロジックを記述するのはよくありません。
ビューではロジック的な複雑な処理はステートレス(関数化)にして、Modelに追い出します。
しかし、Modelはあくまでもビジネスロジック(データベース上のデータに対する処理手順)を記述するところです。
ユーティリティ的なサービス (補助的な機能) は別の箇所に記述したほうがいいかもしれません。
僕の場合は app/services に記述しています。
簡単なチュートリアルを通して説明します。
チュートリアル
シナリオ
PCでアクセス ⇒ 「PC専用画面」を表示
スマホでアクセス ⇒ 「スマホ専用画面」を表示
実装
App\Servicesディレクトリにユーティリティ向けのクラスを作成します。
Serviceクラス
namespace App\Services; class Utility { public static function judge_device($ua) { if ((strpos($ua, 'iPhone') !== false) || (strpos($ua, 'iPod') !== false) || (strpos($ua, 'Android') !== false)) { return "スマホ専用画面"; } else { return "PC専門画面"; } } }
ビュー
App\Services で作成したクラスのメソッドをフルパスで呼び出します。
: {{--出力--}} <?= \App\Services\Utility::judge_device($_SERVER['HTTP_USER_AGENT']); ?> :
【 解説 】
エイリアスの設定をすると Utility:: で呼び出せます。
エイリアスの設定をすると Utility:: で呼び出せます。
: 'Utility' => App\Services\Utility::class, :
: {{--出力--}} <?= Utility::judge_device($_SERVER['HTTP_USER_AGENT']); ?> :
実行
こんな感じでユーティリティ的なサービスはモデルよりもapp/servicesに記述したほうが、ディレクトリ構造がわかりやすいかもしれません。
以上です。
仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。