皆さんこんにちはー
僕は現在LaravelとVueでシステム開発を行っています。
あまり記述の仕方がわかっていなかったので備忘録も兼ねて記事にしていきます。
Laravel8とVue3自体比較的新しいため新機能の情報自体少ないです。
そのため、今回紹介する記述の方法がQiitaには掲載がなかったので投稿しようと思いました。
間違っている箇所があったら指摘していただけると幸いです。
では参りましょう!!
初期設定
$ php -v
PHP 8.0.9 (cli) (built: Jul 29 2021 17:21:21) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.9, Copyright (c) Zend Technologies
with Zend OPcache v8.0.9, Copyright (c), by Zend Technologies
$ php artisan --version
Laravel Framework 8.56.0
"vue": "^3.0.5", //package.json
こんな感じです。
ではこの状態からreaddubleを見ながらLaravelスタートさせましょう!
今回は、LaravelパッケージのBreezeを利用します。
【インストール】
公式サイトを見ながらインストールしてきます。
composerが入っていない場合、事前にインストールをしておいて下さい。
composer create-project laravel/laravel example-app
cd example-app
php artisan serve
ローカル環境で接続確認します。
Breezeのインストール
【breezeとは】
Laravelパッケージのjetstreamより軽量かつ、簡単にログイン機能が導入できるLaravelパッケージです。
Laravel/uiの代わりとしてLaravel8から導入されているようです。
全部で3種類あり、viewの実装方法で別れています。
1.bladeを利用して表示させる
2.Vue.jsを利用して表示させる
3.React.jsを利用して表示させる
の3つです。
それぞれLinuxコマンドが違うので紹介していきます。
ちなみに今回はタイトル通り2番のVue.jsをつかうやーつです。
2番(vue.js)と3番(react.js)のどちらかをインストールすることによって、同時にInertia.jsもインストールされます。
それではコマンドぽちぽちします。
composer require laravel/breeze --dev
php artisan breeze:install //ここだけ違う
npm install
npm run dev
php artisan migrate
composer require laravel/breeze --dev
php artisan breeze:install vue //ここだけ違う
npm install
npm run dev
php artisan migrate
composer require laravel/breeze --dev
php artisan breeze:install react //ここだけ違う
npm install
npm run dev
php artisan migrate
お尻に追加するだけですね。
reddubleにも同様のことが書かれています。
再度ローカル環境で確認すると、右上にlog inとRegisterという項目が追加されています。
これでログイン機能の完成です。
次はファイル構造とルーティングを確認してみましょう。
どこからファイルを呼び出しているのか?
ルーティングを確認してみましょう!
Route::get('/', function () {
return Inertia::render('Welcome', [
'canLogin' => Route::has('login'),
'canRegister' => Route::has('register'),
'laravelVersion' => Application::VERSION,
'phpVersion' => PHP_VERSION,
]);
});
Route::get('/dashboard', function () {
return Inertia::render('Dashboard');
})->middleware(['auth', 'verified'])->name('dashboard');
require __DIR__.'/auth.php';
全体的にBreezeによって手が加えられています。
Route::get('/', function () {
return Inertia::render('Welcome' //←ここが作用しています
このInertia::render
がvueファイルへ直接呼び出しています。
Laravelだと、初期設定のルーティングでresources/views/**.blade.php
を参照しますが、
Inertia::render
と記述するとresources/js/Pages/**.vue
を参照するようになります。
bladeファイルは全スルーされます。
Inertiaのルーティングを説明してきます。
Inertia::render(
// '第一引数'、[
// 第二引数
//]
);
// 第一引数: resources/js/Pages/の呼び出したいファイル名
// 第二引数: 渡したいデータを記述
というわかりやすい使い方です。
Vue.jsにはどのようにデータを渡すのか
ではVue.jsではどのようにデータが渡るのでしょうか。
その点見てみましょう。
// ここを例に見ていきます
Route::get('/', function () {
return Inertia::render('Welcome', [
'canLogin' => Route::has('login'),
'canRegister' => Route::has('register'),
'laravelVersion' => Application::VERSION,
'phpVersion' => PHP_VERSION,
]);
});
return Inertia::render('Welcome'
と記載があるので、
Welcome.vueを見てみます。
<!-- 重要なところがscriptタグ内なので、templateタグとstyleタグは省略しています。 -->
<script>
import { Head, Link } from '@inertiajs/inertia-vue3';
export default {
components: {
Head,
Link,
},
props: {
canLogin: Boolean,
canRegister: Boolean,
laravelVersion: String,
phpVersion: String,
},
}
</script>
ルーティング側から渡っているデータは
'canLogin''canRegister''laravelVersion''phpVersion'
です。
Vue側ではpropsで受け取っているだけです。
なんて簡単な・・・。
<!-- 重要なところがscriptタグ内なので、templateタグとstyleタグは省略しています。 -->
<script>
import { Head, Link } from '@inertiajs/inertia-vue3';
export default {
components: {
Head,
Link,
},
props: {
canLogin: Boolean, ←ここ
canRegister: Boolean, ←ここ
laravelVersion: String, ←ここ
phpVersion: String, ←ここ
},
}
</script>
propsを書くだけで、Laravelからデータ受け取れます。
これでblade.phpとはおさらば?ですかね。
終わりに
以上が、Laravel8でフロント部分をbladeを使わずにVue3だけで書く方法(Inertia.js使用)です。
これからの開発の参考になれば幸いです。
ありがとうございました!!!