LoginSignup
19
20

More than 3 years have passed since last update.

Laravelでmake:bladeでbladeを作成するコマンドの自作

Last updated at Posted at 2019-11-17

Laravelではコントローラーなどはmakeコマンドでテンプレートから作成することができますが、
bladeのmakeコマンドは用意されていないため自作してみました。
「php artisan make:blade hoge」でhoge.blade.phpを作成できるようにします。
確認したLaravelのバージョンは6.5.1です。

コマンドの作成

まずmake:blade用のコマンドを作成します。

php artisan make:command MakeBladeCommand

app/Console/Commands下にMakeBladeCommand.phpが作成されます。
このファイルを以下のように書き換えました。

app/Console/Commands/MakeBladeCommand.php
<?php

namespace App\Console\Commands;

use File;
use Illuminate\Console\Command;

class MakeBladeCommand extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'make:blade {name}';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Create a new blade file';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        // スタブファイルの内容を読み込む
        $stub = File::get(app_path() . '/Console/Commands/stubs/blade.stub');

        // 〜スタブファイルに対して置換などの加工処理などを行う〜

        // bladeファイルのパスを作成
        $blade = resource_path() . '/views/' . $this->argument('name') . '.blade.php';

        // bladeファイルを作成
        File::put($blade, $stub);
    }
}

スタブファイルを読み込んでコマンドの引数で渡した名前でbladeファイルを作るという処理です。
makeでクラスを作る場合はGeneratorCommandを継承するやり方がよく記載されていますが、今回はそのままCommandを使用しました。
なお、上記のソースではviews直下にしかファイルが作成できないため、例えばディレクトリを分けてbladeを作成したい場合にはFile::makeDirectoryでディレクトリを作成する処理を入れて下さい。

以下のコマンドでmakeの中にmake:bladeがあればここまでは順調です。

php artisan list

スタブファイルの作成

次にbladeファイルのテンプレートを作ります。
上記のCommands下にstubsディレクトリを作成し、テンプレートファイルを用意します。

app/Console/Commands/stubs/blade.stub
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Blade Template</title>
</head>
<body>
Hello World
</body>
</html>

動作確認

実際にbladeコマンドを使ってbladeファイルを作成してみます。

php artisan make:blade hello 

resouces/views下にhello.blade.phpが作成されます。
次にrouteに上記bladeを追加します。

routes/web.php
+ Route::view('/hello', 'hello');

ブラウザで「URL/hello」を開くと、「Hello World」と表示されます。

19
20
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
19
20