タイトル: Vue.jsと連携するSPA実行環境構築
SEOタイトル: 【Laravel】Vue.jsと連携するSPA実行環境構築
前提
・Laravelプロジェクトを作成済み (まだの場合はこちらのページを参照)
・Vue.jsとの連携とvue-routerのインストール (まだの場合はこちらのページを参照)
・SPAの実行環境を構築するだけです。SPAの様々な記述方法は他のページを参照してください。
サーバーサイド(Laravel)のwebルーティングの無効化
webのルーティング処理はVue.js側で行うのでLaravel側のルーティング処理は不要となる。
※APIのルーティング(routes/api.php)は使用する(後述)
全てにリクエストに対して共通のレイアウト(resources/views/layouts/app.blade.php)を返すようにする。
routes/web.php |
---|
Route::get('/{any}', function () { return view('app'); })->where('any', '.*'); |
共通レイアウトの作成
Veu.jsを使うための最低限の設定と必要なheadタグ内の要素を記述すればよい。
resources/views/app.blade.php |
---|
<!DOCTYPE html> <html lang="{{ app()->getLocale() }}"> <head> <meta charset="utf-8"> <!-- CSRF Token --> <!-- CSS --> <!-- Scripts --> </head> <body> <div id="app"> <router-view></router-view> </div> </body> </html>
|
サーバーサイド(Laravel)のAPIを作成
テスト用にDBから適当なデータを取得するAPIを作成する。
まずは適当なAPIルーティングを作成する。
routes/api.php |
---|
Route::get('articles', 'Article\ArticleController@getArticles'); |
適当なコントローラーを作成する。
app/Http/Controllers/Article/ArticleController.php |
---|
<?php use App\Http\Controllers\Controller; class ArticleController extends Controller |
適当なモデルを作成する。(マイグレーションするなり直にcreate tableしてテーブル作成をしておく)
※titleカラムを作成しておくこと。
app/model/Article.php |
---|
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Article extends Model protected $primaryKey = 'article_id'; public $incrementing = 'article_id'; protected $guarded = [ |
ローカルサーバーの起動
以下の2つのコマンドをそれぞれ別窓で実行してローカルサーバーを起動する。
php artisan serve |
npm run hot |
Veu.jsでルーティングを作成
resources/assets/js/app.js |
---|
import Vue from 'vue' Vue.use(VueRouter) const router = new VueRouter({ const app = new Vue({ |
ビューの作成とAPIの呼び出し
resources/assets/js/components/Articles.vue |
---|
<template> <div> <ul> <li v-for="article in articles"> {{ article.title }} </li> </ul> </div> </template> <script> export default { created() { this.getArticles() }, data() { return { articles: [] } }, methods: { getArticles() { axios } } } </script> |
以上の設定で「http://localhost:8000/articles」にアクセスするとarticleテーブルのtitle一覧が表示される。