0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Package By Feature実装してみた

Posted at

Package by feature実装方法

laravel10のインストール

laravel12じゃ上手くいかなかったので、laravel10で実装

webコンテナに入って以下を実行

composer create-project --prefer-dist laravel/laravel . "10.*"

localhostでlaravelのtop画面が映ることを確認

packageディレクトリの作成

package-app配下にpackagesディレクトを作成し、ディレクトリ構成を以下のようにする。

package-app
├── app/
├── packages
│   └──message
│      ├── src/
│      │   ├──Http
│      │   │  └─Controllers
│      │   └──Providers
│      └──routes
│          └──web.php
└(Laravelのその他ディレクトリ)

オートロードの実装

composer.jsonに以下を追加

    "autoload": {
        "psr-4": {
            "App\\": "app/",
            "Package\\Message\\": "packages/message/src", //この行を追加
            "Database\\Factories\\": "database/factories/",
            "Database\\Seeders\\": "database/seeders/"
        }

これにより、名前空間でPackage\Message~とすると、packages/message/src配下のファイルを探してくれるようになる。


Message機能の作成(json返すだけ)

Providerの追加

Providers配下にMessageServiceProvider.phpを作成し、以下をコピペ

<?php

namespace Package\Message\Providers;

use Illuminate\Support\ServiceProvider;

class MessageServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        // ルーティングの読み込み
        $this->loadRoutesFrom(__DIR__.'/../../routes/web.php');
    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {

    }
}

Controllerの追加

Controllers配下にMessageController.phpを追加し、以下をコピペ

<?php

namespace Package\Message\Http\Controllers;

use App\Http\Controllers\Controller; // Appのベースコントローラーを継承

class MessageController extends Controller
{
    public function __invoke()
    {
        return response()->json([
            'message' => 'Hello from the MessageController!'
        ]);
    }
}

ルーティングの追加

web.phpに以下をコピペ

<?php

use Illuminate\Support\Facades\Route;
use Package\Message\Http\Controllers\MessageController;

Route::prefix('message')->group(function () {
    Route::get('/', MessageController::class);
});

サービスプロバイダーに登録

// ...
'providers' => ServiceProvider::defaultProviders()->merge([
    /*
     * Package Service Providers...
     */
    Package\Message\Providers\MessageServiceProvider::class, // この行を追加

    /*
     * Application Service Providers...
     */
    App\Providers\AppServiceProvider::class,
    App\Providers\AuthServiceProvider::class,
    // App\Providers\BroadcastServiceProvider::class,
    App\Providers\EventServiceProvider::class,
    App\Providers\RouteServiceProvider::class,
])->toArray(),
// ...

最後にcomposer.jsonを変更したので、Webコンテナ内で以下のコマンドを実行してAutoloaderを更新します。

composer dump-autoload

そしてlocalhost/messageにアクセスすると、JSONが表示されました。

追記

laravel12では、config/app.phpではなく、bootstrap/providers.phpにServiceProviderを追加すれば読み込まれるらしい

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?