2017-10-12 104 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__; 
});