38

你如何在新的 Laravel 4 中管理资产?看起来 Taylor Otwell 已经Asset::add用新的东西代替了。

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

4

13 回答 13

40

在 Laravel 4 中,您可以使用HTML该类,它默认包含在 Laravel 框架包中:

样式表:

{{ HTML::style('css/style.css') }}

Javascript:

{{ HTML::script('js/default.js') }}
于 2013-05-30T13:26:29.550 回答
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() 等。

于 2013-05-03T13:21:33.450 回答
8

Laravel 4 没有开箱即用的资产管理。但是已经创建了一些包来处理这种事情。

  • codeleeve/asset-pipeline(到目前为止我最喜欢的)

  • jasonlewis/basset(有一些错误)

  • teepluss/asset(最接近 Laravel 3 Asset::add() 但不进行连接或缩小)

  • way/guard-laravel (需要 ruby​​ guard gem 来运行)

于 2013-06-21T19:29:55.337 回答
7

当我只需要将一些 .css 和 .js 文件附加到特定页面时,我就是这样做的:

在我的刀片模板中:

<head>
<title>.....</title>
.....
@yield('head')
</head>

在我的特定页面刀片文件中:

@extends('template')
    @section('head')
    {{ HTML::style('css/filename.css') }}
    {{ HTML::script('js/filename.js') }}
    @stop
...
于 2013-06-11T09:29:51.590 回答
4

Basset(前最佳资产)呢?: http: //jasonlewis.me/code/basset

我刚刚将它安装在 L4 上,仍然没有进行任何测试,但听起来很有希望。

于 2013-01-08T23:59:45.977 回答
2

Laravel 3 的 Asset 类的一个端口。与 Laravel 4 一起工作。

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

于 2013-04-03T16:29:48.700 回答
1

我制作了一个更简单的 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;
}
}
于 2013-06-11T19:31:05.273 回答
1

如果你使用它会出错:

{{ HTML::style('assets/css/style.css') }} 

因为 Laravel 将 Laravel Base Aliases 更改HTMLHtml. 如果您遇到错误,我使用下面的代码来代替。

风格:

{{ Html::style('assets/css/style.css') }}

脚本:

{{ Html::script('assets/css/style.css') }}
于 2013-10-15T00:25:54.247 回答
1

我知道它已经得到了回答,但是 Orchestra 的资产包与 Laravel 3 使用的资产库相同。甚至可能是同一个包。这是我用的。

https://github.com/orchestral/asset

于 2014-01-09T01:29:39.907 回答
0

这些在 Laravel 4 中不存在 - 我认为这个想法是使用 Composer 捆绑包来添加它们。

Meido 创建了一个从 Laravel 3 到 Laravel 4 的 HTML、Form 和 Str 类的“端口”。

我不知道资产端口 - 我认为您应该查看 Composer 上已有的捆绑包,以找到适合您需求的包。

于 2013-01-08T09:39:10.263 回答
0

我只是使用:

{{ asset('js/jquery.min.js') }}

适用于所有类型的文件。请注意,它只返回 URL,不返回 HTML 标记和内容。

于 2013-08-18T18:47:06.940 回答
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" />

您可能会说差异很小,但在处理大量标记属性(“ids、data-attributes、classes custom-attributes”)时,HTML::style()、HTML::image()、HTML:: link() 方法可能会很长,并且对于 html/css/js 开发人员来说不全面。

这一切都各不相同,取决​​于开发人员的编码风格,但在我看来,标记应尽可能保持“原始”,以便前端开发人员更容易访问。

于 2013-11-08T13:21:31.040 回答
0

或者,您可以使用 Grunt.js 来管理您的资产。

Grunt 基本上是一个运行“任务”的插件库,例如:

  • 编译 LESS
  • 合并JS文件
  • 缩小 JS 文件
  • 更多……

完全独立于 PHP。

于 2014-01-01T04:26:35.317 回答