如何使用Laravel服务index.html?

时间:2014-08-21 04:15:21

标签: php laravel

我很难理解有人如何使用Laravel加载index.html文件。它似乎只适用于index.php,这不是我想要的。

这是一个问题:

我有两个文件夹客户端服务器。我的服务器文件夹包含整个Laravel应用。我的客户端目录包含AngularJS应用。 (我不能使用公共目录)

我希望Laravel提供index.html以及客户端目录中的所有静态文件。

更改'public' => __DIR__.'/../public'确实有些工作,但随后它会中断我的所有路由,即无论我为URL index.html键入什么,都会加载破坏的静态资产。例如,/api/users不再返回JSON对象,而是返回index.html

3 个答案:

答案 0 :(得分:11)

我不确定您的文件结构是怎么回事,但是,通过您可以使用的php引擎加载html文件:

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

然后,

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

应返回index.html。

答案 1 :(得分:2)

我相信我现在了解你。这是一个潜在的解决方案,假设目录结构与此类似:

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

在Laravel中使用刀片模板。您的案例非常独特,因此它不会成为“普通”的刀片模板。它看起来像这样:

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

如果您可以在index.php目录中使用/client文件,它也可能如下所示:

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

我只是指出了这一点,因为如果您需要或希望,您可以在文件内部使用其他PHP语句。您还可以将控制器中的数据一直向下传递到此index.php文件中,并使用正常的View::make('angular')->with('var', $var),它们将自动在范围内。

这看起来有点hacky,而且确实应该让你不必修改任何其他内容。当然,您的index.html文件应该包含角度应用程序的整个标记。另一个好处是,因为你几乎完全被Laravel所包含,所以你可以将你的东西“向上”移出你的角度应用程序,如果没有必要(无论出于何种原因),你可以回到框架中。

答案 2 :(得分:2)

如果您想使用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”用作默认文档。

仅当角度构建输出位于子文件夹中的laravel api(index.php和.htaccess)的公共文件夹中时有效。

希望它可以帮助某人!