Laravelで汎用性のある共通クラス(ライブラリ)を作る方法

laravel-libraries

Laravelは便利な機能を数多く持っていますが、どうしても足りない場合は、ヘルパ関数のように汎用性のある共通関数を作りたくなります。
しかし、共通クラスをどこに書いてどのように呼び出すか悩んでいる方に、(マイ)ベストプラクティスをご紹介します!

ライブラリとして追加する

結局はどこに書いても同じなのですが、フレームワークとは別に自分が作ったものとして管理したいので、

app/Libraries

というフォルダを作成してその中に作っていきます。
app/libsでも良いかな?フォルダ名は任意です!)
この記事では、他の方が書いてあるような、ファサード作ったり、サービスプロバイダ作るようなややこしいことをしません。
やってもconfig/app.phpのエイリアスに追加するくらいなら良いと思いますが、今回はそれすらも省きます。

独自クラスを作成する

コントローラのように普通にクラスを作成していきます。
例として、

app/Libraries/CommonFunctions.php

というファイル名で作成します。
内容は以下の通りです。

<?php
namespace App\Libraries;

class CommonFunctions
{
   /**
    * Invokes the common functions
    * 
    * @param string $data
    * @return boolean
    */
    public static function is_foo($data) 
    { 
        return ($data == 'foo') ? true : false ; 
    } 
}

文字列が’foo’であるかを調べる単純な関数ですね。

共通関数を呼び出す

次に呼び出しです。
コントローラで呼び出してみましょう。

<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use app\Libraries\CommonFunctions;

class UserController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return IlluminateViewView
     */
    public function index()
    {
        $cf = new CommonFunctions;
        $data = $cf->is_foo('foo');
        return view('index', compact('data'));
    }
}

ポイントも何もありませんね。
普通にuseして使う、それだけです。
なぜ、このように単純な書き方にならないのだろうか、何か弊害があるのだろうかわかりません。
もし知っていればコメントください。


Amazonベストセラー

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA