2013-03-05 106 views
70

好吧 - 我知道这是一个非常基本的问题,但我无法弄清楚。 这是一个关于Laravel的问题。Laravel样式表和JavaScript不会加载非基本路由

基本上,我有我的样式表嵌入我的默认布局视图。我目前只使用普通的CSS将它们连接,如:

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

它当我在一个级别途径,如/约的伟大工程,但停止工作,当我去更深,如/about/me

如果我看Chrome的开发者控制台,我看到一些以下错误(仅适用于更深层次的路由)的:

Resource interpreted as Stylesheet but transferred with MIME type text/html: "http://example.dev/about/css/app.css". 

所以很明显它现在里面的“关于” folder--寻找CSS这当然不是一个文件夹。

我只是希望它在相同的地方寻找资产,不管路线如何。

回答

138

对于Laravel 4 & 5:

<link rel="stylesheet" href="{{ URL::asset('assets/css/bootstrap.min.css') }}"> 

网址::资产将链接到您项目/公/文件夹,所以在那里扔掉你的脚本。

注意:您需要使用刀片模板才能使用它。所有刀片模板应使用.blade.php扩展名。

+7

只是确认它在** Laravel 5和5.1 **中也有效。谢谢。 – 2015-06-15 11:35:28

+1

我已经创建了自己的包。我可以在里面有css吗?如果是这样,我如何从自己的包中包含css? – 2016-07-15 16:25:39

+0

你也可以使用'URL :: asset()'中的'asset()'辅助方法。它做同样的工作。 – 2016-11-06 18:06:59

9

我supuse你使用Laravel 3,如果是把你的CSS/JS文件公用文件夹像

public/css 
public/js 

,并使用刀片模板调用它

{{ HTML::style('css/style.css'); }} 
{{ HTML::script('js/jquery-1.8.2.min.js'); }} 
8

您使用相对路径为您的资产,改变到一个绝对路径,一切都会工作(在“css”之前添加一个斜杠。)

<link rel="stylesheet" href="/css/app.css" /> 
+0

如果您的应用位于网站的子目录中,这将不起作用。然后,您会遇到您对资产看起来太远的问题。 我的建议是使用@Chris提供的解决方案。这消除了所有猜测,并允许您将应用程序移到任何地方,并确保它能正确加载资产。 – 2013-07-29 19:05:28

0

如果您对其进行了硬编码,则应该使用完整路径(href="http://example.com/public/css/app.css")。但是,这意味着您必须手动调整开发和生产的URL。

的替代上述解决方案是使用<link rel="stylesheet" href="URL::to_asset('css/app.css')" />在Laravel 3或<link rel="stylesheet" href="URL::asset('css/app.css')" />在Laravel 4.这将让你写你的HTML你想要的方式,也让Laravel为您生成在任何合适的路径环境。

6

我建议你把它放在{project}/application/routes之前的路由过滤器上。PHP

Route::filter('before', function() 
{ 
    // Do stuff before every request to your application...  
    Asset::add('jquery', 'js/jquery-2.0.0.min.js'); 
    Asset::add('style', 'template/style.css'); 
    Asset::add('style2', 'css/style.css'); 

}); 

,并使用刀片模板引擎

{{ Asset::styles() }} 
{{ Asset::scripts(); }} 

或更多laravel managing assets docs

+0

是的,这个新的laravel使一切变得复杂, 资产,甚至profiler都不在文档中了。 – 2013-07-09 03:41:08

49

Laravel 4

更好的和正确的方式来做到这一点

添加CSS

HTML ::风格会链接到你的项目/公/文件夹

{{ HTML::style('css/bootstrap.css') }} 

添加JS

HTML ::脚本将链接到项目/公/文件夹

{{ HTML::script('js/script.js') }} 
2

laravel 4你只需要粘贴{{ URL::asset('/') }}这样:

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

这是相同的:

<script language="JavaScript" src="{{ URL::asset('/') }}js/jquery.js"></script> 
    <img src="{{ URL::asset('/') }}img/image.gif"> 
2
在我看来

最佳方式在你的HTML添加BASE标记

<base href="/" target="_top"> 

所以这是没有必要使用的东西像

{{ HTML::script('js/jquery/jquery-1.11.1.min.js'); }} 

只需键入

<script src="js/jquery/jquery-1.11.1.min.js"></script> 
在你看来

,它会工作。

这mehod将处理REST风格的URL和静态资源图片,CSS,脚本。

9

在Laravel 5
有2种方式来加载一个js文件在你看来
首先是使用HTML帮手,第二种是通过资产的帮手。
使用HTML帮助,您必须通过命令行先安装这个包:

composer require illuminate/html 

那么你需要reqister它,所以去的config/app.php,这行添加到供应商阵列

'Illuminate\Html\HtmlServiceProvider' 

那么你必须为你的html包定义别名,所以去config/app中的别名数组。PHP和添加此

'Html'  => 'Illuminate\Html\HtmlFacade' 

现在你的HTML辅助安装因此刀片的视图文件,你可以这样写:

{!! Html::script('js/test.js') !!} 

这将寻找你的test.js文件在您project_root /公共/ JS/test.js。
//////////////////////////////////////////////// //////////////
使用资产的帮手,而不是HTML帮手,你必须写某事像这样在视图文件:

<script src="{{ URL::asset('test.js') }}"></script> 

这将寻找测试.js文件中project_root /资源/资产/ test.js文件

+0

illuminate/html已被放弃。用户laravelcollective/html代替。 – geoidesic 2017-03-08 10:17:44

+0

您也可以使用''如果你使用的是Laravel Mix)。 – snipe 2017-09-25 22:59:12

2

Vinsa几乎拥有了正确的 你应该添加

<base href="{{URL::asset('/')}}" target="_top"> 

个脚本应该在他们的常规路径

<script src="js/jquery/jquery-1.11.1.min.js"></script> 

这样做的原因是因为图像和其他事情一样的图像源或Ajax请求的相对路径不会不附带的基本路径正常工作。

1

Laravel 5.4混合帮手:

<link href="{{ mix('/css/app.css') }}" rel="stylesheet"> 
<script src="{{ mix('/js/app.js') }}"> </script> 
0

更好的方式来使用像,

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

假设你已经不重命名公用文件夹。您的css和js文件位于公用文件夹中的css和js子文件夹中。现在,您的标题将是:

<link rel="stylesheet" type="text/css" href="/public/css/icon.css"/> 
<script type="text/javascript" src="/public/js/jquery.easyui.min.js"></script> 
0

只需添加另外一个问题:如果你想使用.htaccess删除从项目/public

那么你可以使用这个,[前添加public/css里面asset()]

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

[有时,它很有用。]