Laravel 4:什么是Asset :: add的替代品?
你如何在新的Laravel 4中pipe理资产? 看起来泰勒·奥特维尔(Taylor Otwell)用新的东西取代了Asset::add
。
我想要做的是Laravel添加我的CSS和JS文件。 在Laravel 3中有几种方法可以做到这一点,但现在似乎已经消失了。 一个是Asset::add
,另一个是HTML
。 什么是替代这些?
在Laravel 4中,您可以使用HTML
类,它是Laravel Framework包中的默认包含:
样式表:
{{ 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
许多其他helper,例如app_path(),各种数组工具,link_to_route(),link_to_action(),storage_path()等
Laravel 4没有开箱即用的资产pipe理。 但是一些软件包已经被创build来处理这种事情。
-
codesleeve /资产pipe道 (我最喜欢的)
-
jasonlewis / basset(有这个错误)
-
teepluss / asset(最接近Laravel 3 Asset :: add(),但不会并置或缩小)
-
方式/守卫laravel(需要ruby守卫gem运行)
当我需要将一些.css和.js文件仅附加到特定页面时,我就是这么做的:
在我的刀片模板中:
<head> <title>.....</title> ..... @yield('head') </head>
并在我的具体页面刀片文件:
@extends('template') @section('head') {{ HTML::style('css/filename.css') }} {{ HTML::script('js/filename.js') }} @stop ...
巴塞特(前最佳资产)呢?: http : //jasonlewis.me/code/basset
我只是把它安装在L4上,仍然没有做任何testing,但声音是有保证的。
Laravel 3的资产类的一个端口。 与Laravel 4一起工作。
如果您使用以下代码将会出错:
{{ HTML::style('assets/css/style.css') }}
因为Laravel将HTML
Laravel Base别名改为Html
。 如果你有错误,我用下面的代码来代替。
样式:
{{ Html::style('assets/css/style.css') }}
脚本:
{{ Html::script('assets/css/style.css') }}
我做了一个Laravel 3 Asset类更简单的版本,并在Laravel 4中完美工作。对我来说,这是我所需要的! 只需为容器select一个名称,然后按照最终顺序添加资产:
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上:
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; } }
我知道它已经被回答了,但Orchestra的资产包与Laravel 3使用的资产库相同。 甚至可能是相同的包。 这是我使用的。
这些不存在Laravel 4 – 我认为这个想法是使用Composer捆绑来添加它们。
Meido创build了一个从Laravel 3到Laravel 4的HTML,Form和Str类的“端口”。
我没有意识到一个资产端口 – 我想你应该查看已经在Composer上的包,以find一个适合您的需求。
我只是使用:
{{ asset('js/jquery.min.js') }}
适用于所有types的文件。 注意,它只返回它不返回HTML标签和东西的URL。
在我看来,这样做的最好方法是使用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'))}}
尽pipe使用{{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来pipe理您的资产。
Grunt基本上是一个运行“任务”的插件库,例如:
- 编译LESS
- 结合JS文件
- Minify JS文件
- 更多更多….
所有独立的PHP。