2017-10-12 102 views
1

我需要我的Laravel刀片視圖幫助。目前我使用<link href="{{asset('css/sample.css')}}" rel="stylesheet">來生成每次在我的公用文件夾中生成sample.css的路徑。它會產生類似<link href="http://mydomainname/css/sample.css" rel="stylesheet">,它運行良好(我的公共文件夾是在我的public_html文件夾cpanel託管)Laravel刀片視圖相對路徑

但是,我想使用相對路徑,而不是直接鏈接到我的CSS文件。我想使用一個更簡單的方法,如<link href="css/sample.css" rel="stylesheet">,它工作,如果我在根路線工作,但它不工作時,它進入我的網站更深的路線。

任何人都可以幫助如何生成我的CSS文件的相對路徑?

謝謝。

回答

0

它是通過修改vendor\laravel\framework\src\Illuminate\Foundation\helpers.php到解決:

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

所有asset()代碼在我laravel現在只生成路徑(通過刪除域URL)並且可以在我的生產或本地主機上運行

3

這是可以實現的使用你建議的更簡單的方法,你只是缺少一個/

如果你使用這樣的路徑鏈接到你的CSS文件; /css/sample.css然後它告訴瀏覽器獲取與根URL相關的文檔。這對於您使用的任何資產都是一樣的。

因此,作爲一個HTML鏈接將是:

<link href="/css/sample.css" rel="stylesheet"> 

這將告訴瀏覽器,不管你是在什麼頁面,從http(s)://example.com/css/sample.css獲取sample.css文件。

如果在開始時沒有/,您的鏈接會說取得它與當前頁面的關係; http(s)://example.com/your/page/url/css/sample.css。在您的主頁上顯然會成功,因爲網址仍然會解析爲http(s)://example.com/css/sample.css

+0

你好,是的,我已經嘗試過了,這是通過添加'/'最好的方法。然而,如果我使用'/ css/sample.css'代碼,那麼它不會在我的本地主機上運行'http:// localhost/myprojectname/public/css/sample.css'。我可以在我的生產服務器上使用它,但不能在我的本地主機上工作 – efraim

+0

爲什麼你不能在你的本地主機上使用它?請記住,您始終可以編輯您的主機文件以將URL映射回您的本地開發環境,從而完成此項工作。例如,爲myproject.dev創建一個條目,直接指向127.0.0.1,然後在apache上更新您的虛擬主機,或者在您的Web服務器上更新您的虛擬主機。這就是爲什麼'asset()'是一個很好的幫手,因爲它通過使用當前環境中的URL來解決這個問題。 – James

+0

是的,但asset()將生成超鏈接而不是本地目錄。我試圖用google PageSpeed優化我的網站,主要問題是asset()會生成一個完整的鏈接,直接進入我自己的域。我通過覆蓋asset()幫助程序並刪除使用parse_url生成的URL來解決此問題。感謝您的幫助James。 – efraim

0

根據this你只需要編輯index.php是位於public文件夾象下面這樣:

/* 
|-------------------------------------------------------------------------- 
| Turn On The Lights 
|-------------------------------------------------------------------------- 
| 
| We need to illuminate PHP development, so let us turn on the lights. 
| This bootstraps the framework and gets it ready for use, then it 
| will load up this application so that we can run it and send 
| the responses back to the browser and delight our users. 
| 
*/ 

$app = require_once __DIR__.'/../bootstrap/app.php'; 

// set the public path to this directory 
$app->bind('path.public', function() { 
    return __DIR__; 
});