浜松のWEBシステム開発・スマートフォンアプリ開発・RTK-GNSS関連の開発はお任せください
株式会社シーポイントラボ
TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:静岡県浜松市中区富塚町1933-1 佐鳴湖パークタウンサウス2F

【Laravel】config, artisanの自由なディレクトリ構成

 Laravelのconfigはデフォルトでフラットにずらっとファイルが並んでいます。いくつかパッケージを入れても多くは水平に広がっていくのみです。そのため同じようにファイルを置くのみにしてしまいがちですが、ディレクトリを置いても読み込めます。
例えば以下の様にあると

config 
|   app.php
|   auth.php
|   broadcasting.php
|   cache.php
|   database.php
|   filesystems.php
|   hashing.php
|   ide-helper.php
|   logging.php
|   mail.php
|   queue.php
|   services.php
|   session.php
|   view.php
|
\----const
      common.php
      location.php
// location.php
return [
    'pref' => [
        'TOKYO' => 13,
    ]
];

 constディレクトリ中のlocation.php中の東京都の番号を呼ぶには

config('const.location.pref.TOKYO')

と書けます。これをうまいこと使うと参照しにくい巨大ファイルを減らせます。

 artisanはもっと単純です。artisanのローディングはCommandsディレクトリ以下のファイルを軒並み読んで、読んだファイルがCommandクラスの条件を満たしているかチェックしているのみです。

// Commands/Kernel.phpのロード呼び出し部
    /**
     * Register the commands for the application.
     *
     * @return void
     */
    protected function commands()
    {
        $this->load(__DIR__.'/Commands');

        require base_path('routes/console.php');
    }
// フレームワーク内ロード処理メイン
            $command = $namespace.str_replace(
                ['/', '.php'],
                ['\', ''],
                Str::after($command->getPathname(), realpath(app_path()).DIRECTORY_SEPARATOR)
            );

            if (is_subclass_of($command, Command::class) &&
                ! (new ReflectionClass($command))->isAbstract()) {
                Artisan::starting(function ($artisan) use ($command) {
                    $artisan->resolve($command);
                });
            }

 このためCommandsディレクトリ以下ならばどこに置いてあってもCommandクラス内で記述したsignatureないしnameの名前でartisanからコマンドを実行できます。例えば自分なら開発者用のコマンド(ファイル自動生成, 権限無視のexecのラッピングなど)をForDevelopと分けたりと整理しています。

  • この記事いいね! (0)