3
votes

Comment combiner les routes laravel et vue

Je crée une application CRUD laravel et vuejs simple. Vue Routes ne fonctionne pas, je suis assez nouveau dans vuejs; s'il vous plaît voir le code Voici le code pour web.php

    http://localhost:8000/posts

Voici le code pour app.js

    php artisan serve

Voici le code de ma lame tamplate , lorsque je navigue sur http: // localhost: 8000 / vue , cette vue est rendue. Comme vous pouvez le voir dans le code web.php ci-dessus. Je peux également voir la notification dans la console Vous exécutez Vue en mode développement. Assurez-vous d'activer le mode production lors du déploiement pour la production.

   <!DOCTYPE html>
   <html lang="{{ app()->getLocale() }}">
   <head>
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <meta name="viewport" content="width=device-width, initial-scale=1">
<!-- CSRF Token -->
    <meta name="csrf-token" content="{{ csrf_token() }}">
    <title>{{ config('app.name', 'Laravel') }}</title>
<!-- Styles -->
    <link href="{{ asset('css/app.css') }}" rel="stylesheet">
  </head>
  <body>
   <div class="container">
   <header class="page-header">
    <div class="branding">
        <img src="https://vuejs.org/images/logo.png" alt="Logo" title="Home page" class="logo"/>
        <h1>Vue.js CRUD With Laravel 5 application</h1>
    </div>
   </header>
 </div>
<section id="app">

</section>
<script>
  window.Laravel = <?php echo json_encode([
    'csrfToken' => csrf_token(),
]); ?>
</script>
<script src="{{ asset('js/app.js') }}"></script>
 </body>
 </html>

Mais lorsque j'exécute mon application en utilisant

    require('./bootstrap');

    window.Vue = require('vue');

    window.VueRouter=require('vue-router').default;

    window.VueAxios=require('vue-axios').default;

    window.Axios=require('axios').default;

    let AppLayout = require('./components/App.vue');
    const Posts = Vue.component('Posts',require('./components/Posts.vue'));
    const EditPost = 
    Vue.component('EditPost',require('./components/EditPost.vue'));
    const AddPost = 
    Vue.component('AddPost',require('./components/AddPost.vue'));
    const DeletePost = 
    Vue.component('DeletePost',require('./components/AddPost.vue'));
    const ViewPosts = 
    Vue.component('ViewPosts',require('./components/ViewPosts.vue'));
    const ExampleComponent = 
   Vue.component('ViewPosts',require('./components/ExampleComponent.vue'));

   // Registering routes
   Vue.use(VueRouter,VueAxios,axios);

   const routes = [
   {
    name: 'Posts',
    path: '/posts',
    component: Posts
   },
   {
    name: 'AddPost',
    path: '/add-posts',
    component: AddPost
   },
   {
    name: 'EditPost',
    path: '/edit-post/:id',
    component: EditPost
   },
   {
    name: 'DeletePost',
    path: '/delete-post',
    component: DeletePost
   },
   {
    name: 'ViewPosts',
    path: '/view-post',
    component: ViewPosts
   },
   {
    name: 'ExampleComponent',
    path: '/example-component',
    component: ExampleComponent
   },
 ];
    const router = new VueRouter({mode: 'history', routes: routes});
    new Vue(
      Vue.util.extend(
      { router },
      AppLayout
     )).$mount('#app');

et accédez à

    Route::get('/', function () {
    return view('welcome');
    });

    Auth::routes();

    Route::get('/home', 'HomeController@index')->name('home');
    Route::get('/vue','Api\PostController@home');
    Route::resource('/api','Api\PostController');

L'application affiche une erreur 404. Veuillez m'aider à résoudre ce problème.


3 commentaires

dans quel fichier lame vous avez utilisé le app.js pour vuejs?


Je l'utilise dans vue_app.blade.php


J'ai répondu à une solution pour vous. Veuillez me faire savoir si cela a fonctionné pour vous.


3 Réponses :


3
votes

Vous devez ajouter une route laravel pour la vue où vous utilisez l'app.js (vuejs) dans le fichier routes / web.php .

Route::get('{any}', function () { 
    return view('vue_app'); 
})->where('any', '.*'); 

et puis vous devez utiliser la route laravel comme route parente pour les routes de vuejs et utiliser l'url comme ci-dessous,

http://localhost:8000/route-name/posts

dans votre cas,

http://localhost:8000/laravel-route/view-route

Ou vous pouvez également utiliser,

Route::get('/route-name/?{name}', function(){
    return redirect('vue_app');
})->where('name', '[A-Za-z]+');

et au lieu de l'utilisation précédente localhost: 8000 / posts


4 commentaires

Cher, je reçois la même erreur, localhost: 8000 / route-name / posts ai-je besoin changer le app.js? laissez-moi modifier la question pour inclure vue_app.blade.php


pouvez-vous essayer, Route :: get ('{any}', function () {return view ('' vue_app ');}) -> where (' any ','. * '); au lieu de l'itinéraire précédent et utiliser localhost: 8000 / posts l'url directement? Pouvez-vous afficher votre routes.php et votre page d'erreur?


Il fonctionne et redirige vers la lame requise; il n'y a pas d'erreur, mais j'ai de la confusion comme vous pouvez le voir dans mon app.js que j'ai écrit si la demande est pour / post, elle doit rendre le composant Posts, c'est-à-dire Posts.vue, qui n'est pas rendu. Pouvez-vous comprendre le problème?


Frère, j'ai donné une solution à votre deuxième problème dans une autre réponse ci-dessous. S'il te plaît vérifie le. Et ce sera mieux si vous posez deux questions dans un message séparé et que vous devez également accepter cette réponse si cela fonctionne pour votre problème initial. Ensuite, ce sera bénéfique pour d'autres qui pourraient faire face au scénario similaire. Merci



2
votes

Essayez ceci sur votre route web.php

Route::get('/', function () {
    return view('index');
});

Route::get('/{catchall?}', function () {
    return response()->view('index');
})->where('catchall', '(.*)');


0 commentaires

1
votes

Pour votre deuxième partie de question , Vous devez utiliser

au lieu de
et vous devez amener le composant principal / enregistré à l'intérieur de l'élément html sélectionné par id = "app" dans le fichier lame. dans votre cas,
<div id="app">
   <app-layout></app-layout>
</div>

J'espère que cela vous aidera. vous pouvez vérifier ce basic vuejs avec laravel

PS: Vous devriez poser deux problèmes différents dans deux articles séparés.


0 commentaires