web-dev-qa-db-fra.com

Comment retourner un fichier .xml dans un Laravel Route

J'ai généré un fichier .xml de plan du site et je souhaite y revenir. J'ai placé le fichier dans mon dossier de vues et j'ai fait cette route:

Route::get('/site-map', function(){
    return view('sitemap.xml');
});

Bien que je ne puisse pas le faire afficher.

5
Victori

Par défaut Laravel ne prend pas en charge le chargement .xml fichiers en tant que vues. Cela étant dit, il existe plusieurs solutions à votre problème:

  • Le plus simple est de placer simplement votre sitemap.xml dans le /public répertoire. Le navigateur pourra voir le fichier à http://yourdomain.com/sitemap.xml.

  • Vous pouvez charger le contenu de votre fichier et renvoyer une réponse, en définissant le Content-Type en-tête à application/xml ou text/xml pour indiquer au navigateur que le fichier que vous servez est en fait un document XML.

    return response(file_get_contents(resource_path('sitemap.xml')), 200, [
        'Content-Type' => 'application/xml'
    ]);
    
  • Alternativement, vous pouvez demander au Finder de Laravel de prendre en charge le .xml extension en faisant quelque chose comme ça dans un fournisseur de services (comme la méthode register de votre AppServiceProvider, située à app/Providers/AppServiceProvider.php):

    app('view.Finder')->addExtension('xml');
    

    Une fois que vous avez fait cela, Laravel devrait reconnaître .xml comme extension de vue valide et chargez votre fichier XML comme s'il s'agissait d'une vue. Cela a l'avantage supplémentaire de pouvoir lui transmettre des données et d'utiliser Blade/PHP dans votre vue, si vous souhaitez:

    return view('sitemap');
    
8
Jonathon