Laravelで共通関数を作成してコードを使い回す方法

Laravelで共通関数を作成し、コードを使い回す方法です。
同じ処理を複数のControllerで利用するときにどうぞ。

今回行うこと

複数の掲示板を持つサービスでコメントに添付された画像を保存する処理が発生するため
コメントの画像を保存し、画像のURLを返す共通関数を作成します。

環境

macOS Mojave 10.14.6
Homestead 9.1.0
Laravel 5.8.35

実装の流れ

  1. composer.jsonに共通関数格納用のフォルダを登録する(今回は Library)
  2. dump-autoloadを実行する
  3. 共通関数を作成する
  4. 利用したいコントローラでuseする

composer.jsonに登録

今回は、app/Library 内に共通関数を格納します。
composer.json のautoloadに下記コードを追加します。

"autoload": {
"psr-4": {
"App\\": "app/"
},
"classmap": [
"database/seeds",
"database/factories",
"app/Library" // ここに追加
]
}

dump-autoloadを実行

composer.jsonに追加したコードを反映するために、ターミナルで以下のコマンドを実行します。

$ composer dump-autoload

共通関数を作成

今回はapp/Library の中に、BaseClass.phpを作成し、その中に共通関数を記載します。

namespace App\Library;
use App;

class BaseClass
{
//コメントの画像を保存
public static function getCommentImageUrl($request) {

    $filePath = $request->comment_image->store('public/comment_images');

    //シンボリックリンクで使うのでpublic/部分を削除
    $imageUrl = str_replace('public/', '', $filePath);

    return $imageUrl;
    }
}

利用したいコントローラでuseする

後は共通関数を使いたいコントローラでuseすれば利用できます。

use App\Library\BaseClass; //useする

public function storeComment(CommentRequest $request, $id){
    //(略)
    if($request->comment_image){
    //この様に指定して使う
    $comment->image_filename = BaseClass::getCommentImageUrl($request); 
    }
}

最後に

共通関数を作成しておくと保守性も上がりますので、ぜひ活用してみて下さい。

 

 

 

コメントを残す

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