Laravel 4:Asset :: add的替代品是什么?

时间:2013-01-07 22:42:38

标签: laravel laravel-4

您如何管理新Laravel 4中的资产?看起来Taylor Otwell用新的东西替换了Asset::add

我想要做的是让Laravel添加我的CSS和JS文件。在Laravel 3中有几种方法可以做到这一点,但它们现在似乎已经消失了。一个是Asset::add,另一个是HTML。有哪些替代品?

13 个答案:

答案 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合作。

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

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

https://github.com/orchestral/asset

答案 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基本上是一个运行“任务”的插件库,例如:

  • 编译少许
  • 合并JS文件
  • 缩小JS文件
  • 还有很多......

全部独立于PHP。