簡體   English   中英

如何使用 Laravel 提供 index.html?

[英]How to serve index.html with Laravel?

我正在努力理解如何使用 Laravel 加載index.html文件。 它似乎只適用於 index.php,這不是我想要的。

這里有一個問題:

我有兩個文件夾clientserver 我的服務器文件夾包含整個 Laravel 應用程序。 我的客戶端目錄包含 AngularJS 應用程序。 (我不能使用公共目錄)

我希望 Laravel 為index.html以及來自客戶端目錄的所有靜態文件提供服務。

更改'public' => __DIR__.'/../public'確實有些作用,但是它破壞了我的所有路由,即無論我輸入什么 URL index.html都會加載損壞的靜態資產。 例如/api/users不再返回 JSON 對象,而是返回相同的index.html

我不確定您的文件結構發生了什么,但是,要通過 php 引擎加載 html 文件,您可以使用:

View::addExtension('html', 'php');

然后,

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

應該返回 index.html。

我相信我現在明白你了。 這是一個潛在的解決方案,假設目錄結構類似於以下內容:

/
    /client
        index.html 
    /server
        /app
        /bootstrap
        /public
        /vendor
        ...

在 Laravel 中使用刀片模板。 你的情況非常獨特,所以它不會是一個“正常”的刀片模板。 它看起來像這樣:

{{ file_get_contents(base_path() . '../client/index.html') }}

如果您可以改用/client目錄中的index.php文件,它也可能如下所示:

<?php include base_path() . '../client/index.php'; ?>

我只是指出這一點,因為如果您需要或希望,您可以在文件中使用其他 PHP 語句。 您還可以使用普通的View::make('angular')->with('var', $var)將數據從控制器一直向下傳遞到這個index.php文件中,它們將自動在范圍內.

這似乎有點hacky,確實如此,但應該使您不必修改任何其他內容。 當然,您的index.html文件應該包含 angular 應用程序的整個標記。 另一個好處是,由於您幾乎仍然完全包含在 Laravel 中,如果不需要(無論出於何種原因),您可能會將內容“向上”移出您的 angular 應用程序並返回到框架中。

如果您想使用php artisan serve serve 為本地開發php artisan serve ,請在“server.php”中更改以下幾行

    if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) {
        return false;
    }

    require_once __DIR__.'/public/index.php';

    if ($uri === '/') {
        $uri = "/index.html";
        return false;
    }
    if (file_exists(__DIR__.'/public'.$uri)) {
        return false;
    }

    require_once __DIR__.'/public/api/index.php';

現在您可以將“index.html”作為默認文檔。

僅當 angular 構建輸出位於公共文件夾中且子文件夾中的 laravel api(index.php 和 .htaccess)時才有效。

希望它可以幫助某人!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM