狠狠撸

狠狠撸Share a Scribd company logo
LaravelでVueを使うアレコレ
2019/04/12 sh-ogawa
Lara-Vue
● 全部Vueで作る
● 永続データはVuexに放り込む
● 多言語化はLaravel -> Vue I18n
● サーバサイドバリデーションエラーの表示
● サーバサイドからのflashメッセージの扱い
● ドメインロジックのエラーメッセージ
● アセットコンパイルするjsファイルは分ける
● webpackの設定を認識させる
全部Vueで作る
● async、deferが使えるようになるため、
ターンアラウンドタイムが短くなる可能性
● Blade噛ませると、タグ内が一瞬見える
● 部分的にやるなら、リアクティブに画面を動か
す場所だけに限定する
永続データはVuexに
放り込む
● コンポーネントが疎結合になる
● 永続化済データだけを入れるのがポイント
● 編集中データは入れてはいけない
● Vuex storeがmutation以外で更新されると
エラーログが出るので即修正
● storeの読込みはNuxt.jsをパクると良い
多言語化はLaravel
-> Vue I18n
● Composer required 
martinlindhe/laravel-vue-i18n-generato
● php artisan vue-i18n:generate
https://github.com/martinlindhe/laravel-vue-i18n-
generator
サーバサイドバリデーシ
ョンエラーの表示
● VueのerrorCapturedを使う
● rsp.data.errorsに入ってるからそれを投げる
● ErrorBoundaryで拾って表示
<error-boundary>
<hoge-screen />
</error-boundary>
サーバサイドからのflash
メッセージの扱い
● エラーはerrorCaptureに拾わせる
● 成功時は、Promise内でhref書き換えればOK
● その場で表示したい場合は、Event Hub使う
Event Hub
● 名前付いてるけど、専用のVueインスタンスを作
って、Vueプラグインとしてインストールするだ
け
● グローバルインスタンス経由でイベントのやり
取りを行うTIPS
Event Hub
const eventHub = {
install: function (Vue, options) {
Vue.prototype.$eventHub = new Vue()
}
}
export default eventHub
Event Hub
import EventHub from '@/EventHub'
Vue.use(EventHub)
```component.vue
this.$eventHub.$on(‘event-name’, (value) => {/* 処理 */})
this.$eventHub.$emit(‘event-name’, value)
ドメインロジックの
エラーメッセージ
● IlluminateSupportViewErrorBag使う
● PHPの癖にイミュータブルだから使い方注意
● response()->json([‘errors’ => $errors])
で返すとバリデーションエラーと同じになる
アセットコンパイルする
jsファイルは分ける
● 自前のjsとライブラリを分ける
● Laravel Mixのversionはファイルのハッシュ
取ってるだけだから、中身変わらなければ、
versionのIDは変わらない
● extractに外部ライブラリは全部記述する
アセットコンパイルする
jsファイルは分けるmix.js('resources/js/app.js', 'public/js')
.extract(['axios', 'bulma', 'lodash.defaultsdeep', 'vee-validate', 'vue', 'vue-i18n', 'vue-template-compiler', 'vuex'])
.sass('resources/sass/app.scss', 'public/css', {
implementation: require('node-sass')
})
.options({
processCssUrls: false
})
.version()
webpackの設定を認識
させる
● 相対パスがとにかく怠い
● エイリアスが無いと実際詰むと思う
● 冲冲颈诲别.飞别产辫补肠办.肠辞苍蹿颈驳.箩蝉作って颈诲别补に认识さす
const path = require('path')
module.exports = {
entry: path.resolve(__dirname, "resources/js/app.js"),
output: {
path: path.resolve(__dirname, 'public/js'),
filename: 'app.js'
},
resolve: {
extensions: ['.js', '.vue', '.json'],
alias: {
'vue$': 'vue/dist/vue.esm.js',
'@': __dirname + '/resources/js'
}
}
}
Lara vue

More Related Content

Similar to Lara vue (9)

[JavaOne Tokyo 2012] JavaFX and Web Integration
[JavaOne Tokyo 2012] JavaFX and Web Integration[JavaOne Tokyo 2012] JavaFX and Web Integration
[JavaOne Tokyo 2012] JavaFX and Web Integration
Kazuchika Sekiya
?
WildFly Swarmではじめる「パーツとしてのJavaEE」
WildFly Swarmではじめる「パーツとしてのJavaEE」WildFly Swarmではじめる「パーツとしてのJavaEE」
WildFly Swarmではじめる「パーツとしてのJavaEE」
Hiroaki NAKADA
?
OSC2011Tokyo/Fall OpenStack Swift入門
OSC2011Tokyo/Fall OpenStack Swift入門OSC2011Tokyo/Fall OpenStack Swift入門
OSC2011Tokyo/Fall OpenStack Swift入門
irix_jp
?
OpenStack Object Storage; Overview
OpenStack Object Storage; OverviewOpenStack Object Storage; Overview
OpenStack Object Storage; Overview
irix_jp
?
GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...
GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...
GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...
Shinji Takao
?
碍耻产别谤苍别迟别蝉环境で実现する奥别产アプリケーションセキュリティ
碍耻产别谤苍别迟别蝉环境で実现する奥别产アプリケーションセキュリティ碍耻产别谤苍别迟别蝉环境で実现する奥别产アプリケーションセキュリティ
碍耻产别谤苍别迟别蝉环境で実现する奥别产アプリケーションセキュリティ
NGINX, Inc.
?
モタ?ン闯补惫补厂肠谤颈辫迟入门.辫诲蹿
モタ?ン闯补惫补厂肠谤颈辫迟入门.辫诲蹿モタ?ン闯补惫补厂肠谤颈辫迟入门.辫诲蹿
モタ?ン闯补惫补厂肠谤颈辫迟入门.辫诲蹿
omochids0113
?
react-ja.pdf
react-ja.pdfreact-ja.pdf
react-ja.pdf
ssuser65180a
?
CloudStackユーザ会 OSC.cloud
CloudStackユーザ会 OSC.cloudCloudStackユーザ会 OSC.cloud
CloudStackユーザ会 OSC.cloud
samemoon
?
[JavaOne Tokyo 2012] JavaFX and Web Integration
[JavaOne Tokyo 2012] JavaFX and Web Integration[JavaOne Tokyo 2012] JavaFX and Web Integration
[JavaOne Tokyo 2012] JavaFX and Web Integration
Kazuchika Sekiya
?
WildFly Swarmではじめる「パーツとしてのJavaEE」
WildFly Swarmではじめる「パーツとしてのJavaEE」WildFly Swarmではじめる「パーツとしてのJavaEE」
WildFly Swarmではじめる「パーツとしてのJavaEE」
Hiroaki NAKADA
?
OSC2011Tokyo/Fall OpenStack Swift入門
OSC2011Tokyo/Fall OpenStack Swift入門OSC2011Tokyo/Fall OpenStack Swift入門
OSC2011Tokyo/Fall OpenStack Swift入門
irix_jp
?
OpenStack Object Storage; Overview
OpenStack Object Storage; OverviewOpenStack Object Storage; Overview
OpenStack Object Storage; Overview
irix_jp
?
GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...
GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...
GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...
Shinji Takao
?
碍耻产别谤苍别迟别蝉环境で実现する奥别产アプリケーションセキュリティ
碍耻产别谤苍别迟别蝉环境で実现する奥别产アプリケーションセキュリティ碍耻产别谤苍别迟别蝉环境で実现する奥别产アプリケーションセキュリティ
碍耻产别谤苍别迟别蝉环境で実现する奥别产アプリケーションセキュリティ
NGINX, Inc.
?
モタ?ン闯补惫补厂肠谤颈辫迟入门.辫诲蹿
モタ?ン闯补惫补厂肠谤颈辫迟入门.辫诲蹿モタ?ン闯补惫补厂肠谤颈辫迟入门.辫诲蹿
モタ?ン闯补惫补厂肠谤颈辫迟入门.辫诲蹿
omochids0113
?
CloudStackユーザ会 OSC.cloud
CloudStackユーザ会 OSC.cloudCloudStackユーザ会 OSC.cloud
CloudStackユーザ会 OSC.cloud
samemoon
?

More from 小川 昌吾 (20)

Effective flutter
Effective flutterEffective flutter
Effective flutter
小川 昌吾
?
Flutter first impression
Flutter first impressionFlutter first impression
Flutter first impression
小川 昌吾
?
Flutter management statement
Flutter management statementFlutter management statement
Flutter management statement
小川 昌吾
?
Laravel vue-project-upload
Laravel vue-project-uploadLaravel vue-project-upload
Laravel vue-project-upload
小川 昌吾
?
Atomic design+vue
Atomic design+vueAtomic design+vue
Atomic design+vue
小川 昌吾
?
今年はある意味当たり年だった! という一年振り返り
今年はある意味当たり年だった! という一年振り返り今年はある意味当たり年だった! という一年振り返り
今年はある意味当たり年だった! という一年振り返り
小川 昌吾
?
Njug docker-20180623
Njug docker-20180623Njug docker-20180623
Njug docker-20180623
小川 昌吾
?
アプリ屋のための Docker入門
アプリ屋のための Docker入門アプリ屋のための Docker入門
アプリ屋のための Docker入門
小川 昌吾
?
Njug 20180414
Njug 20180414Njug 20180414
Njug 20180414
小川 昌吾
?
闯补惫补屋から笔贬笔别谤になって1年くらい経った
闯补惫补屋から笔贬笔别谤になって1年くらい経った闯补惫补屋から笔贬笔别谤になって1年くらい経った
闯补惫补屋から笔贬笔别谤になって1年くらい経った
小川 昌吾
?
チュートリアルではじめる痴耻别.箩蝉
チュートリアルではじめる痴耻别.箩蝉チュートリアルではじめる痴耻别.箩蝉
チュートリアルではじめる痴耻别.箩蝉
小川 昌吾
?
受託、厂贰厂、奥贰叠と経験したので比较してみた
受託、厂贰厂、奥贰叠と経験したので比较してみた受託、厂贰厂、奥贰叠と経験したので比较してみた
受託、厂贰厂、奥贰叠と経験したので比较してみた
小川 昌吾
?
滨罢の开発现场における最近の当たり前これからの当たり前(主観)
滨罢の开発现场における最近の当たり前これからの当たり前(主観)滨罢の开発现场における最近の当たり前これからの当たり前(主観)
滨罢の开発现场における最近の当たり前これからの当たり前(主観)
小川 昌吾
?
非エンジニアに捧ぐツアーオブ构成管理
非エンジニアに捧ぐツアーオブ构成管理非エンジニアに捧ぐツアーオブ构成管理
非エンジニアに捧ぐツアーオブ构成管理
小川 昌吾
?
Dynamo db はじめの一歩
Dynamo db はじめの一歩Dynamo db はじめの一歩
Dynamo db はじめの一歩
小川 昌吾
?
スキトラ骋颈迟
スキトラ骋颈迟スキトラ骋颈迟
スキトラ骋颈迟
小川 昌吾
?
スキトラ Spring + mybatis
スキトラ Spring + mybatisスキトラ Spring + mybatis
スキトラ Spring + mybatis
小川 昌吾
?
テストコード入门
テストコード入门テストコード入门
テストコード入门
小川 昌吾
?
滨辞罢検定
滨辞罢検定滨辞罢検定
滨辞罢検定
小川 昌吾
?
惭测厂蚕尝入门
惭测厂蚕尝入门惭测厂蚕尝入门
惭测厂蚕尝入门
小川 昌吾
?
Flutter first impression
Flutter first impressionFlutter first impression
Flutter first impression
小川 昌吾
?
Flutter management statement
Flutter management statementFlutter management statement
Flutter management statement
小川 昌吾
?
Laravel vue-project-upload
Laravel vue-project-uploadLaravel vue-project-upload
Laravel vue-project-upload
小川 昌吾
?
今年はある意味当たり年だった! という一年振り返り
今年はある意味当たり年だった! という一年振り返り今年はある意味当たり年だった! という一年振り返り
今年はある意味当たり年だった! という一年振り返り
小川 昌吾
?
アプリ屋のための Docker入門
アプリ屋のための Docker入門アプリ屋のための Docker入門
アプリ屋のための Docker入門
小川 昌吾
?
闯补惫补屋から笔贬笔别谤になって1年くらい経った
闯补惫补屋から笔贬笔别谤になって1年くらい経った闯补惫补屋から笔贬笔别谤になって1年くらい経った
闯补惫补屋から笔贬笔别谤になって1年くらい経った
小川 昌吾
?
チュートリアルではじめる痴耻别.箩蝉
チュートリアルではじめる痴耻别.箩蝉チュートリアルではじめる痴耻别.箩蝉
チュートリアルではじめる痴耻别.箩蝉
小川 昌吾
?
受託、厂贰厂、奥贰叠と経験したので比较してみた
受託、厂贰厂、奥贰叠と経験したので比较してみた受託、厂贰厂、奥贰叠と経験したので比较してみた
受託、厂贰厂、奥贰叠と経験したので比较してみた
小川 昌吾
?
滨罢の开発现场における最近の当たり前これからの当たり前(主観)
滨罢の开発现场における最近の当たり前これからの当たり前(主観)滨罢の开発现场における最近の当たり前これからの当たり前(主観)
滨罢の开発现场における最近の当たり前これからの当たり前(主観)
小川 昌吾
?
非エンジニアに捧ぐツアーオブ构成管理
非エンジニアに捧ぐツアーオブ构成管理非エンジニアに捧ぐツアーオブ构成管理
非エンジニアに捧ぐツアーオブ构成管理
小川 昌吾
?
Dynamo db はじめの一歩
Dynamo db はじめの一歩Dynamo db はじめの一歩
Dynamo db はじめの一歩
小川 昌吾
?
スキトラ Spring + mybatis
スキトラ Spring + mybatisスキトラ Spring + mybatis
スキトラ Spring + mybatis
小川 昌吾
?
テストコード入门
テストコード入门テストコード入门
テストコード入门
小川 昌吾
?

Lara vue

Editor's Notes

  • #4: jsが動かないブラウザなら使えるテクニック。 ただ、全部くろみうむ化している現代において、ぶっちゃけそんなことはどうでも良くなりつつある 画面の特定部分だけに使う場合は、グローバルに登録はせずに、new Vueして使う。
  • #5: 画面の特定部分だけに使う場合は、グローバルに登録はせずに、new Vueして使う。
  • #6: これで、フロントとバックエンドで生成する文言のブレを排除する
  • #7: jsが動かないブラウザなら使えるテクニック。 ただ、全部くろみうむ化している現代において、ぶっちゃけそんなことはどうでも良くなりつつある 画面の特定部分だけに使う場合は、グローバルに登録はせずに、new Vueして使う。
  • #8: jsが動かないブラウザなら使えるテクニック。 ただ、全部くろみうむ化している現代において、ぶっちゃけそんなことはどうでも良くなりつつある 画面の特定部分だけに使う場合は、グローバルに登録はせずに、new Vueして使う。
  • #11: 多用すると死ぬので、必要な箇所だけに限定する。 イベントハブに登録するイベント名は、定数で管理しても良いかも