Passing data from Laravel to Vue

Làm thế nào để gửi dữ liệu từ Laravel đến Vue đây, nếu như ta có ý định xây dựng một hệ thống CMS với sự kết hợp của Laravel + Vue. Thì ta sẽ phải dùng mọi cách có thể để gửi dữ liệu qua lại,vậy làm sao đây ta! thôi làm thử xem sao ::)

Example: 
 - Login laravel success
 - Send data Auth()->id and Auth()->name to Component Vue

Đầu tiên ta chạy câu lệnh: php artisan make:auth mà laravel đã cung cấp cho ta sẵn các phần login và register
Bạn vào thư mục resources/views/layouts/app.blade.php có thể chỉnh sửa lại như sau:

<div id="app">
  
    @if (Auth::id()>0)
        <main-component :user-name='@json(auth()->user()->name)' 
                  :user-id='@json(auth()->user()->id)'></main-component>
    @else
        <p>Bạn vui lòng quy lại đăng nhập hệ thông! <a href="{{route('login')}}">Login</a></p>
    @endif
     
</div>

Trong đoạn code bên trên ta kiểm tra xem login thành công chưa, nếu thành công sẽ thực thi <main-component></main-component>. Nếu login không thành công sẽ hiện thông báo đăng nhập lại
Tiếp theo vào thư mục resources/js tạo component MainComponent.vue và import component này vào file app.js

//MainComponent.vue
<template>
    <div>
        <ul class="treeview-menu">
            <li><router-link to="/admin/default"><i class="fa fa-circle-o"></i>Main</router-link></li>
            <li><router-link :to="{ name: 'post', params: { userId } }"><i class="fa fa-circle-o"></i>Posts</router-link></li>
            <li><router-link :to="{name:'lists',params:{userId}}"><i class="fa fa-circle-o"></i>Lists post</router-link></li>  
            <li><router-link :to="{name:'category',params:{userId}}"><i class="fa fa-circle-o"></i>Categories</router-link></li>
        </ul>
    </div>
</template>
<script>
    export default{
        props:['userId','userName'],
        data(){
            return{
                  URL_LINK:'http://localhost:8000', 
            }
        },
        mounted(){
          
        },
        methods:{
            logout(){
                axios.post(this.URL_LINK+"/admin/logout").then((response)=>{
                    if (response.status === 204) {
                         document.location.href="/admin/login";
                    }
                    else {
                        document.location.href="/admin/default";
                    }
                }).catch(error => {
                     document.location.href="/admin/login";
                });
             
            }
        }
    }
</script>

Để nhận được dữ liệu từ laravel gửi đến vue qua component, ta cần dùng Props:['userId','userName'], bên cạnh đó nếu ta muốn logout thì cần dùng axios.post("http://localhost:8000/logout") nhé, còn ở đây vì mình đã chỉnh sửa lại đường dẫn login và logout nên nhìn hơi khác xíu.

//route in Vue
const router = new VueRouter({
    mode: 'history',
    routes: [
        {
          path:"/admin/default",
          name:'home',
          component:HomeComponent  
        },
        {   
            path:"/admin/post",
            component: Dashboard,
            children:[
                {
                    path:"",
                    name:'post',
                    component: PostComponent,
                    props:true
                },
                {
                    path:"lists",
                    name:"lists",
                    component: ListsPostComponent,
                    props:true
                },
                {
                    path:"edit",
                    component:EditPost,
                    props: (route) => ({query: route.query.id })
                }
            ]
        },
        {
            path:"/admin/category",
            component:Dashboard,
            children:[
                {
                    path:"",
                    name:'category',
                    component:AddCategory,
                    props:true
                }
            ]
        }
    ]
});
const app = new Vue({
    el: '#app',
    router,
    components: { MainComponent },
});

Dưới đây là phần phía xử lý logout bên Laravel và route định tuyến.

//LoginController.php in laravel
public function logout(Request $request)
{
   // $request->user();
    $this->guard()->logout();
    return response()->json([], 204);
}

//web.php in laravel 
Route::group(['prefix' => 'admin'], function () {
    Auth::routes();
});

Bạn có thể xem thêm bài viết về sự kết hợp của Laravel + Vue: 

Create Template Vuejs and Laravel 5.4

+ Xây dụng chức năng Register+ Login bằng Laravel 5.4 + VueJS

Create Cart Laravel 5.4 +VueJS

Bài Viết Liên Quan

x

Xin chào! Hãy ủng hộ chúng tôi bằng cách nhấp vào quảng cáo trên trang web. Việc này giúp chúng tôi có kinh phí để duy trì và phát triển website ngày một tốt hơn. (Hello! Please support us by clicking on the ads on this site. Your clicks provide us with the funds needed to maintain and improve the website continuously.)

Ngoài ra, hãy đăng ký kênh YouTube của chúng tôi để không bỏ lỡ những nội dung hữu ích! (Also, subscribe to our YouTube channel to stay updated with valuable content!)

Đăng Ký