Sub Documents

Laravelで共通クラスを作成する


 Laravelでは共通のクラスを作成する方法というのは山ほどあって、用途や思想によって、サービス・プロバイダーを作るとかファサードを作るとか様々なのですが、最もシンプル且つ使いやすい方法として共通のクラスライブラリーを作っておくという方法紹介します。

$ mkdir app/Libraries
$ cd Libraries
$ touch Common.php

これで共通クラスの作成は終わりで、適当な関数を作っておきます。

<?php
namespace App\Libraries;

class Common
{
  /**
  * Invokes the common functions
  * 
  * @param string $data
  * @return boolean
  */
  public static function sample($args) 
  { 
    return $args;
  } 
}

この共通クラスを各コントローラーで呼び出すには、

...
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Libraries\Common;

class TestController extends Controller
{
  public function libraries_common() {
    $sample = Common::sample('foobar');
    return $sample;
  }
}

みたいな感じで利用することができます。useで呼び出して、そのまま使うだけです。
動的なオブジェクトの場合も同樣に設定してあげて問題ないです。

<?php
namespace App\Libraries;

class Common
{
  /**
  * Invokes the common functions
  * 
  * @param string $data
  * @return boolean
  */
  public function sample_a1($args)
  { 
    return $args;
  } 
}
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Libraries\Common;

class TestController extends Controller
{
  public function libraries_common_object() {
    $common = new Common();
    $sample = $common->sample_a1('foobar_object');
    return $sample;
  }
}

また、いつも使えるようにclassmapとして、autoloadに加えておくとよいです。

...
    "autoload": {
        "psr-4": {
            "App\\": "app/",
            "Database\\Factories\\": "database/factories/",
            "Database\\Seeders\\": "database/seeders/"
        },
        "classmap": [
            "app/Libraries"
        ]
    },
...