web-dev-qa-db-ja.com

Laravel Routeで.xmlファイルを返す方法

サイトマップの.xmlファイルを生成しましたが、戻りたいです。私は自分のviewsフォルダにファイルを置き、このルートを作りました:

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

表示させることができません。

5
Victori

デフォルトでは、Laravelは_.xml_ファイルをビューとしてロードすることをサポートしていません。とはいえ、問題にはいくつかの解決策があります:

  • 最も簡単な方法は、_sitemap.xml_を_/public_ディレクトリに配置することです。ブラウザは_http://yourdomain.com/sitemap.xml_でファイルを表示できます。

  • ファイルのコンテンツをロードしてレスポンスを返し、_Content-Type_ヘッダーを_application/xml_または_text/xml_に設定して、提供しているファイルが実際にはXMLドキュメントであることをブラウザーに伝えることができます。

    _return response(file_get_contents(resource_path('sitemap.xml')), 200, [
        'Content-Type' => 'application/xml'
    ]);
    _
  • または、Laravelのビューファインダーに_.xml_拡張をサポートするように指示することもできます(サービスプロバイダー(registerAppServiceProviderメソッドなど、_app/Providers/AppServiceProvider.php_):

    _app('view.Finder')->addExtension('xml');
    _

    これを実行すると、Laravelは_.xml_を有効なビュー拡張として認識し、XMLファイルをビューであるかのようにロードする必要があります。これには、データを渡して、ビュー内でBlade/PHPを使用します。

    _return view('sitemap');
    _
8
Jonathon