您知道如何在Laravel中编写SPA吗?总之,不是很方便。当然,您可以使用任何前端框架。传统上,习惯于使用Laravel + Vue.js软件包。
我们在的Vue.js中编写了整个前端resources/js
,并使用Laravel作为API。
像这样:
Vue.js
// resources/js/pages/Users.vue
<template>
<div v-for="user in users" :key="user.id">
<a :href="`/users/${user.id}`">
{{ user.name }}
</a>
<div>{{ user.email }}</div>
</div>
</template>
<script>
export default {
data() {
return {
users: []
}
},
methods: {
async loadUsers() {
const { data } = await this.$axios.get('/api/users');.
this.users = data;
}
},
async beforeMount() {
await this.loadUsers();
}
}
</script>
拉拉韦尔
// routes/api.php
Route::get('/users', function index(User $user) {
return $user->all();
});
也就是说,首先我们在后端创建一个端点,然后在前端通过AJAX请求从其接收数据。
? . . AJAX – . , Blade, , .
Blade, , :
return view('users', [
'users' => $user->all()
]);
? , - -. Blade - . Laravel – API, - . .. ..
Inertia.js. , Blade. – Vue, React Svelte.
Laravel, Inertia.js Rails. . (, Symfony Yii2).
Vue.js Laravel. , .
return Inertia::render('Users', [
'users' => $user->all()
]);
props
.
props: {
users: Array,
},
! .
- №2: (Vue Router, React Router) . – routes
Vue- resources/js/Pages
( ). , Blade, , component.blade.php
Component.vue
.
: . AJAX-, , - . AppServiceProvider
Inertia::share([
'errors' => function () {
return Session::get('errors')
? Session::get('errors')->getBag('default')->getMessages()
: (object) [];
},
]);
Vue- $page.errors
.
<div v-if="$page.errors.first_name">{{ $page.errors.first_name[0] }}</div>
.
, ( ), "", , .
Inertia::share([
//
'app' => [
'name' => Config::get('app.name')
],
//
'auth' => function () {
return [
'user' => Auth::user() ? [
'id' => Auth::user()->id,
'first_name' => Auth::user()->first_name,
'last_name' => Auth::user()->last_name,
] : null
];
}
]);
, , , . - , .
, .
-, Inertia.js . , - Inertia.js, . , ( ).
-, Server-Side Rendering (SSR). , , , , SPA SSR, . , , , , . SSR, – Livewire. - .
-, Inertia.js – . – v0.1.9. , .
, web- .