簡體   English   中英

公共目錄中的資產未在 Laravel 5 中顯示

[英]Assets in the public directory not showing in Laravel 5

我在 Laravel 5.4 和 Laravel 5.5 的/public目錄中遇到資產問題。

在全新安裝的 Laravel 中,如果 URL 中沒有/public ,公共目錄中的任何內容都將無法工作。

當我運行php artisan make:auth ,創建的視圖應該是完美的,對吧? 好吧,我得到的是一個無樣式的頁面,只有當我使用 DOM 檢查器添加/public時才會看起來很漂亮,這樣我最終會得到:

<link href="http://localhost/l5.4/public/css/app.css" rel="stylesheet">

我在哪里可以更改設置,以便每次我想鏈接到資產時都不必在視圖中添加/public

您不必手動執行此操作,laravel 附帶了一個函數: {{asset('css/app.css')}}可以直接訪問公共文件夾。

注意:

如果這不起作用,那么您很可能需要設置一個指向您/public文件夾的虛擬主機。 您可以在 Apache 上的 vHosts 文件中執行此操作。

注2:

如果您在每個示例上使用共享主機,或者由於某種原因無法修改 vHost 文件,這里是您的解決方案。

首先,您必須將公用文件夾放在項目文件夾上方,並根據示例 public_folder 將其重命名,在其中,您必須放置公用文件夾的內容。

/public_folder
/your_project_folder
  app/
  databases/
  ...

其次,在 public 文件夾中,您會找到一個名為index.php的文件,您必須對其進行如下修改:

require __DIR__.'/../your_project_folder/bootstrap/autoload.php';
$app = require_once __DIR__.'/../your_project_folder/bootstrap/app.php';

這意味着您正在從我們上面創建的公共文件夾中引用項目文件夾。

注3:

要告訴 laravel 將從我們公共文件夾的新位置引用資產函數,您可以將其添加到 index.php 中,在$app=require_once...

$app->bind('path.public', function() {
    return __DIR__;
});

希望這是有道理的

這對我config\\app.php :在config\\app.php url我輸入了public目錄的完整 URL,如下所示:

'url' => env('APP_URL', 'http://localhost/l5.5/public'),

我還在.env文件中輸入了與APP_URL相同的 URL,因為這是我用於配置的內容。 顯然,在構造文件 URL 時, asset()和類似函數附加到配置文件中的 URL

更新:這樣做的問題是我現在必須編輯Illuminate\\Foundation\\helpers.php ,我認為這是一個壞主意。 我認為不應該觸及核心文件。 現在而不是

function asset($path, $secure = null)
{
    return app('url')->asset($path, $secure);
}

我正在使用

function asset($path)
{
    return config('app.url'). '/' .$path;
}

有人可以告訴我這樣做的正確方法嗎?

在根文件夾中,將server.php重命名為index.php並將.htaccess文件從公共文件夾復制到根文件夾。 還可以共享您的目錄結構以顯示您的資產所在的位置。

就這樣做

<link href="{{ asset('css/app.css') }}" rel="stylesheet">
<link href="{{ asset('css/app.css') }}" rel="stylesheet">

這工作得很好。 當 Laravel 在服務器上運行時,主索引文件和所有資產都在“公共目錄”中。 所以css資產文件將以域名+ css/file.css而不是domain/public/css/file.css開頭。

暫無
暫無

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

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