您如何管理新Laravel 4中的资产?看起来Taylor Otwell用新的东西替换了Asset::add
。
我想要做的是让Laravel添加我的CSS和JS文件。在Laravel 3中有几种方法可以做到这一点,但它们现在似乎已经消失了。一个是Asset::add
,另一个是HTML
。有哪些替代品?
答案 0 :(得分:40)
在Laravel 4中,您可以使用HTML
类,它默认包含在Laravel Framework包中:
样式表:
{{ HTML::style('css/style.css') }}
使用Javascript:
{{ HTML::script('js/default.js') }}
答案 1 :(得分:8)
我使用帮手:
<script src="{{ asset('js/jquery-1.9.1.js') }}"></script>
<script src="{{ asset('js/bootstrap.min.js') }}"></script>
另见
vendor/laravel/framework/src/Illuminate/Support/helpers.php
许多其他帮助者,例如app_path(),各种数组工具,link_to_route(),link_to_action(),storage_path()等。
答案 2 :(得分:8)
Laravel 4没有开箱即用的资产管理。但是已经创建了一些软件包来处理这类事情。
codesleeve/asset-pipeline(我最喜欢的)
jasonlewis / basset(对此有一些错误)
teepluss / asset(最接近Laravel 3 Asset :: add()但不进行连接或缩小)
way / guard-laravel(需要ruby guard gem运行)
答案 3 :(得分:7)
当我需要将某些.css和.js文件仅附加到特定页面时,我就是这样做的:
在我的刀片模板中:
<head>
<title>.....</title>
.....
@yield('head')
</head>
在我的特定页面刀片文件中:
@extends('template')
@section('head')
{{ HTML::style('css/filename.css') }}
{{ HTML::script('js/filename.js') }}
@stop
...
答案 4 :(得分:4)
巴塞特(前最佳资产)怎么样?:http://jasonlewis.me/code/basset
我刚刚将它安装在L4上,仍然没有进行任何测试,但声音很好。
答案 5 :(得分:2)
Laravel 3资产类的一个端口。与Laravel 4合作。
答案 6 :(得分:1)
我制作了一个更简单的Laravel 3 Asset类版本,在Laravel 4中完美运行。对我而言,这就是我所需要的! 只需选择容器名称并按最终顺序添加资产:
Asset::container('jq_1.10')->add('js/jquery-1.10.1.min.js')->add('css/css.css');
输出:
echo Asset::container('jq_1.10')->asset();
班级:
class Asset {
public static $containers = array();
public static function container($container = 'default')
{
if ( ! isset(static::$containers[$container]))
{
static::$containers[$container] = new Asset_Container($container);
}
return static::$containers[$container];
}
}
class Asset_Container {
public $name;
public $assets = array();
public function __construct($name)
{
$this->name = $name;
}
public function add($source)
{
$type = (pathinfo($source, PATHINFO_EXTENSION) == 'css') ? 'style' : 'script';
$obj = (object)array('type' => $type,'source' => $source);
$this->assets[] = $obj;
return $this;
}
public function asset()
{
$str = '';
foreach($this->assets as $aset){
if($aset->type == 'style')$str .= HTML::style($aset->source);
else $str .= HTML::script($aset->source);
}
return $str;
}
}
答案 7 :(得分:1)
使用时会出错:
{{ HTML::style('assets/css/style.css') }}
因为Laravel将HTML
的Laravel Base别名更改为Html
。如果您收到错误,我会使用下面的代码代替。
风格:
{{ Html::style('assets/css/style.css') }}
脚本:
{{ Html::script('assets/css/style.css') }}
答案 8 :(得分:1)
我知道它已被回答,但Orchestra的资产包与Laravel 3使用的资产库相同。甚至可能是同一个包。这就是我使用的。
答案 9 :(得分:0)
这些不存在于Laravel 4中 - 我认为这个想法是使用Composer包来添加它们。
Meido has created a 'port' of HTML, Form and Str classes from Laravel 3 to Laravel 4.
我不知道资产端口 - 我认为您应该查看Composer上已有的捆绑包以找到适合您需求的捆绑包。
答案 10 :(得分:0)
我只是使用:
{{ asset('js/jquery.min.js') }}
适用于所有类型的文件。请注意,它只返回不返回HTML标记和内容的URL。
答案 11 :(得分:0)
在我看来,最好的方法是使用 URL :: asset()方法。
例如:
CSS
<link rel="stylesheet" href="{{URL::asset('css/style.css')}}" media="screen" />
或
JS
<script type="text/javascript" src="{{URL::asset('js/scripts.js')}}"></script>
您还可以将它与图像以及公共文件夹中的任何资产一起使用。
即的:
<img scr="{{URL::asset('img/image.jpg')}}}} id="someid">
通过使用此方法,我发现组织和分离我的HTML标记与Laravel方法更容易。
如果我想指定要使用media =“print”属性加载的css文件,那么“Laravel”执行此操作的方法如下:
{{HTML::style("print.css", array('media' => 'print'))}}
虽然使用{{URL :: asset()}}方法的传统方式更加全面且可供前端开发人员使用(您可能正在团队项目中使用)。
<link rel="stylesheet" href="{{URL::asset('css/style.css')}}" media="print" />
您可能会说差异很小,但在处理大量标记属性(“ID,数据属性,类自定义属性”)时,HTML :: style(),HTML :: image(), HTML :: link()方法可能会变得非常长,并且对于html / css / js开发人员来说非常全面。
这一切都有所不同,取决于开发人员的编码风格,但在我看来,标记应尽可能保持“原始”,以便前端开发人员更容易访问。
答案 12 :(得分:0)
或者,您可以使用Grunt.js来管理您的资产。
Grunt基本上是一个运行“任务”的插件库,例如:
全部独立于PHP。