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が作成されます。
このファイルを以下のように書き換えました。
<?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ディレクトリを作成し、テンプレートファイルを用意します。
<!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を追加します。
+ Route::view('/hello', 'hello');
ブラウザで「URL/hello」を開くと、「Hello World」と表示されます。