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一起工作。

https://github.com/teepluss/laravel4-asset.git

如果您使用以下代码将会出错:

 {{ 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使用的资产库相同。 甚至可能是相同的包。 这是我使用的。

https://github.com/orchestral/asset

这些不存在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。