2015-10-14 103 views
2

在我的本地開發中,我遇到了我的應用程序使用相對路徑的問題, /css/style.css更改整個應用程序的默認URL或路徑?

這樣做通常很好,因爲我可以在我的開發機器上配置虛擬主機,例如localhost.foo,以便將相對路徑解析爲localhost.foo/css/style.css

在我目前的情況下,我無法編輯主機文件來設置開發域,以便到域的相對路徑不再工作。我的開發網址看起來像localhost/projectfoo/public

因此,該應用程序的作品,它應參考localhost/projectfoo/public/css/style.css。根據代碼中的相對路徑,它現在引用locahost/css/style.css,並且在那裏顯然不會找到請求的文件。

有沒有辦法配置laravel,在一種情況下使用localhost/projectfoo/public作爲URL,在另一種情況下使用標準?

+1

設置一次,如果它僅僅是對CSS和腳本文件,你可能想使用'' – Jan

回答

0

Laravel有一個輔助函數asset它會根據您的config app.url值爲相對路徑生成完整的URL。

例如,如果app.urlhttp://localhost

您認爲把{{ asset("css/style.css") }}和Laravel將它轉換爲http://localhost/css/style.css

所以你的情況,所有你需要做的是改變app.urlhttp://localhost/public,然後開始使用即你的視圖中的asset方法代替相對路徑。

更重要的是,新的環境變量添加到您的.env文件(請務必把它.env.example以及)稱爲APP_URL,例如

APP_URL=http://localhost 

然後在config/app.php其設置爲:

'url' => env('APP_URL'), 

這樣,你只需要每環境

+0

在我的本地機器上,足以將所有路徑更改爲'{{asset('/ path/to/foo')',現在它可以工作。必須檢查它是如何在其他environements。 – jerik

+0

也適用於其他環境。所以currentlz我不需要改變'config/app.php'中的'url'。對我來說,它只是在刀片中使用'asset()'。 – jerik

+0

@ jerik很高興聽到這一點 – andrewtweber

2

您可以隨時添加在您的配置文件的新條目,讓在config/app.php

// this is the one that comes with laravel 
'url' => 'http://localhost', 

// this is the one that you can define 
'url_public' => 'http://localhost/something_else/public' 

說,然後在您的視圖一樣使用它:

<link href="{{ config('app.url_public') }}/style/style.css" rel="stylesheet"> 
+0

爲什麼他們會添加另一個配置值而不是隻改變'url'?它配備了Laravel,因爲它的目的是要改變 – andrewtweber

+0

當然,它的目的是改變。我理解問題最後一段的方式是,他希望有兩個不同的情況。因此,作爲一般方法,您可以使用Laravel隨附的(無論是否更改它),還可以使用您自己定義的一個。鑑於他在環境中的制約因素,他是如何工作的,我們不(至少我)不知道。 –

+0

好吧,這是有道理的。儘管我將這兩種情況理解爲2個獨立的環境。在這種情況下,我認爲將URL添加到'.env'文件並根據環境進行調整會更有意義。 – andrewtweber