こんにちは、JeffTechです。
この記事で実現できること
- 共通関数の作成&実装
- コントローラーの簡略化
- コントローラーのメンテナンス性向上
説明
今回実装するのは、Hello world!と出力する処理を複数のコントローラーで実装する時に、それぞれのコントローラーで記述するのではなく、共通関数を作成し同じ処理を何回も書かないようにする方法です。
私の場合、チャット機能実装の際に、チャットルームを作成するという処理を複数のコントローラーで記述しなければならなかったので、チャットルーム作成という機能を共通関数化し、それぞれのコントローラーで共通関数を使い回す手法を行いました。
その時の備忘録を今回簡単に残していこうと思います。
開発環境
- OS: MacOS Catalina
- PHP: 7.3.11
- Laravel: 6
実装の流れ
- Laravelプロジェクト作成
- composer.jsonへ登録
- composer dump-autoload実行
- config/app.phpにエイリアスとして追加
- 共通関数作成
- 処理を利用したいコントローラでuseする
- routeの設定
- 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/app
にCommon
フォルダを作成し、そこに共通関数を格納していきます。
そのため、プロジェクトフォルダ配下に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/app
にCommon
フォルダを作成してくださいね!
[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にするので、下記のように記述してください。
※クラス名は自由です。
※共通関数と同じクラス名にしてください。
<?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
を作成し、以下のように記述してください。
<?php
namespace app\Common;
class sayHelloClass
{
public static function sayHello()
{
echo "Hello World!";
}
}
処理を利用したいコントローラでuseする
まずは処理を利用したいコントローラーを作ります。
以下のコマンドをプロジェクトフォルダ配下で実行してください。
$ php artisan make:controller topContorller
これで、app/Http/Controllers
配下に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
を下記のように編集してください。
<?php
Route::get('/', 'topController@show')->name('top.show');
これでrouteの設定は終わりました。
viewの設定
続いて、Viewファイルの作成です。
commonHelloWorld/resources/views
に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