16
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Laravel|同じ処理を複数のControllerで使う時に便利な共通関数を脳死で作成する方法

Last updated at Posted at 2020-11-14

こんにちは、JeffTechです。

この記事で実現できること

  • 共通関数の作成&実装
  • コントローラーの簡略化
  • コントローラーのメンテナンス性向上

説明

今回実装するのは、Hello world!と出力する処理を複数のコントローラーで実装する時に、それぞれのコントローラーで記述するのではなく、共通関数を作成し同じ処理を何回も書かないようにする方法です。

私の場合、チャット機能実装の際に、チャットルームを作成するという処理を複数のコントローラーで記述しなければならなかったので、チャットルーム作成という機能を共通関数化し、それぞれのコントローラーで共通関数を使い回す手法を行いました。

その時の備忘録を今回簡単に残していこうと思います。

開発環境

  • OS: MacOS Catalina
  • PHP: 7.3.11
  • Laravel: 6

実装の流れ

  1. Laravelプロジェクト作成
  2. composer.jsonへ登録
  3. composer dump-autoload実行
  4. config/app.phpにエイリアスとして追加
  5. 共通関数作成
  6. 処理を利用したいコントローラでuseする
  7. routeの設定
  8. viewの設定

実装

Laravelプロジェクト作成

今回はMAMPのhtdocs内にLaravelのプロジェクトを作成していきます。
ターミナルで以下のコマンドを実行してください。

$ cd /Applications/MAMP/htdocs
$ composer create-project --prefer-dist laravel/laravel commonHelloWorld "6.*"

これでhtdocs配下にcommonHelloWorldというLaravelのプロジェクトが作成されました。
記事の中では、/Applications/MAMP/htdocs/commonHelloworldフォルダのことをプロジェクトフォルダと呼んでいきます。

composer.jsonへ登録

今回はcommonHelloworld/appCommonフォルダを作成し、そこに共通関数を格納していきます。
そのため、プロジェクトフォルダ配下にcomposer.jsonがあるので以下の通りに編集してください。

composer.json
{
    ー省略ー

    "autoload": {
        "psr-4": {
            "App\\": "app/"
        },
        "classmap": [
            "database/seeds",
            "database/factories", // 最後にコンマを追加
            "app/Common" // ここを追加
        ]
    },

    ー省略ー
}

composer dump-autoload実行

まずは、commonHelloworld/app配下にCommonフォルダを作成してから以下のコマンドを実行してください。

$ composer dump-autoload

下記のような感じになれば成功です。

Package manifest generated successfully.
Generated optimized autoload files containing 4255 classes

もし下記のようなエラーが出た時は、commonHelloWorld/appCommonフォルダを作成してくださいね!

  [RuntimeException]                                                                              
  Could not scan for classes inside "app/Common" which does not appear to be a file nor a folder

config/app.phpにエイリアスとして追加

commonHelloWorld/config/app.phpのaliasesに共通関数の登録を行っていきます。
今回は、クラス名をsayHelloにするので、下記のように記述してください。
※クラス名は自由です。
※共通関数と同じクラス名にしてください。

app.php
<?php

return [

    ー省略ー
    'aliases' => [
        
        ー省略ー

        'URL' => Illuminate\Support\Facades\URL::class,
        'Validator' => Illuminate\Support\Facades\Validator::class,
        'View' => Illuminate\Support\Facades\View::class,
        'sayHelloClass' => app\Common\sayHelloClas::class, //ここを追加
    ],

共通関数作成

今回は、単純にHello World!を出力するだけなので、commonHelloWorld/app/Common配下にsayHelloClass.phpを作成し、以下のように記述してください。

sayHelloClass.php
<?php

namespace app\Common;

class sayHelloClass
{
    public static function sayHello()
    {
        echo "Hello World!";
    }
}

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

まずは処理を利用したいコントローラーを作ります。
以下のコマンドをプロジェクトフォルダ配下で実行してください。

$ php artisan make:controller topContorller

これで、app/Http/Controllers配下にtopController.phpというコントローラーが作成できました。

では、以下のように編集してください。

topController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Common\sayHelloClass;

class topController extends Controller
{

    public function show()
    {
        sayHelloClass::sayHello();

        return view(
            'topShow'
        );
    }
}

これでtopShowというviewファイルにHello World!が出力されるようになります!
なお、topShowはこれから作成します。

routeの設定

次に、routeの設定をしていきます。
commonHelloWorld/routes/web.phpを下記のように編集してください。

web.php
<?php
Route::get('/', 'topController@show')->name('top.show');

これでrouteの設定は終わりました。

viewの設定

続いて、Viewファイルの作成です。
commonHelloWorld/resources/viewstopShow.blade.phpを作成し、下記のように編集してください。

topShow.blade.php
<!DOCTYPE html>
<html lang="ja">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  これはトップだよ
</body>

</html>

これで、あとは下記のコマンドでサーバーを立ち上げて、画面を確認してみましょう!

$ php artisan serve

画面を表示して、Hello World! これはトップだよ! と出てくれば成功です!

最後に

少しでも役に立った!という時は、いいねをポチッとして
フォローしてくださると嬉しいです、、、笑

役に立たなかった時は、怒らないでコメント頂けますと幸いです笑

Twitterもやってますので、よかったら見てみてくださいね!
https://twitter.com/jefftechsaku

16
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?