你如何在新的 Laravel 4 中管理资产?看起来 Taylor Otwell 已经Asset::add
用新的东西代替了。
我想做的是让 Laravel 添加我的 CSS 和 JS 文件。在 Laravel 3 中有几种方法可以做到这一点,但现在它们似乎已经消失了。一个是Asset::add
,另一个是HTML
。这些的替代品是什么?
在 Laravel 4 中,您可以使用HTML
该类,它默认包含在 Laravel 框架包中:
样式表:
{{ HTML::style('css/style.css') }}
Javascript:
{{ HTML::script('js/default.js') }}
我使用助手:
<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() 等。
Laravel 4 没有开箱即用的资产管理。但是已经创建了一些包来处理这种事情。
codeleeve/asset-pipeline(到目前为止我最喜欢的)
jasonlewis/basset(有一些错误)
teepluss/asset(最接近 Laravel 3 Asset::add() 但不进行连接或缩小)
way/guard-laravel (需要 ruby guard gem 来运行)
当我只需要将一些 .css 和 .js 文件附加到特定页面时,我就是这样做的:
在我的刀片模板中:
<head>
<title>.....</title>
.....
@yield('head')
</head>
在我的特定页面刀片文件中:
@extends('template')
@section('head')
{{ HTML::style('css/filename.css') }}
{{ HTML::script('js/filename.js') }}
@stop
...
Basset(前最佳资产)呢?: http: //jasonlewis.me/code/basset
我刚刚将它安装在 L4 上,仍然没有进行任何测试,但听起来很有希望。
Laravel 3 的 Asset 类的一个端口。与 Laravel 4 一起工作。
我制作了一个更简单的 Laravel 3 资产类版本,并在 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;
}
}
如果你使用它会出错:
{{ HTML::style('assets/css/style.css') }}
因为 Laravel 将 Laravel Base Aliases 更改HTML
为Html
. 如果您遇到错误,我使用下面的代码来代替。
风格:
{{ Html::style('assets/css/style.css') }}
脚本:
{{ Html::script('assets/css/style.css') }}
我知道它已经得到了回答,但是 Orchestra 的资产包与 Laravel 3 使用的资产库相同。甚至可能是同一个包。这是我用的。
这些在 Laravel 4 中不存在 - 我认为这个想法是使用 Composer 捆绑包来添加它们。
Meido 创建了一个从 Laravel 3 到 Laravel 4 的 HTML、Form 和 Str 类的“端口”。
我不知道资产端口 - 我认为您应该查看 Composer 上已有的捆绑包,以找到适合您需求的包。
我只是使用:
{{ asset('js/jquery.min.js') }}
适用于所有类型的文件。请注意,它只返回 URL,不返回 HTML 标记和内容。
在我看来,最好的方法是使用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" />
您可能会说差异很小,但在处理大量标记属性(“ids、data-attributes、classes custom-attributes”)时,HTML::style()、HTML::image()、HTML:: link() 方法可能会很长,并且对于 html/css/js 开发人员来说不全面。
这一切都各不相同,取决于开发人员的编码风格,但在我看来,标记应尽可能保持“原始”,以便前端开发人员更容易访问。
或者,您可以使用 Grunt.js 来管理您的资产。
Grunt 基本上是一个运行“任务”的插件库,例如:
完全独立于 PHP。