ユーティリティ的な機能を記述する場所について

2018/10/12

LaravelではMVCモデルを前提に設計されています。

Model ⇒ ビジネスロジック
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' => App\Services\Utility::class,
:
:
{{--出力--}}
<?= Utility::judge_device($_SERVER['HTTP_USER_AGENT']); ?>
:

実行

こんな感じでユーティリティ的なサービスはモデルよりもapp/servicesに記述したほうが、ディレクトリ構造がわかりやすいかもしれません。

以上です。

本庄マサノリ

仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら

>> Twitter をフォローする

 

-実践知識