【问题标题】:Laravel 4: What is the replacement for Asset::add?Laravel 4:Asset::add 的替代品是什么?
【发布时间】:2012-12-21 17:46:08
【问题描述】:

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

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

【问题讨论】:

  • 带有完整文档的 Laravel 4 测试版将于本周发布,请耐心等待。
  • 好问题。没有关于如何做到这一点的文档。我现在刚刚使用 {{HTML::style() }},因为一个包似乎有点过头了。

标签: laravel laravel-4


【解决方案1】:

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

样式表:

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

Javascript:

{{ HTML::script('js/default.js') }}

【讨论】:

  • 加载视图时是否无法从控制器添加资产?就像在 L3 中所做的那样?
  • @w0rldart 尝试teepluss/asset,提供here。这是一个来自 Laravel 3 的端口,可以完美运行。
  • @w0rldart teepluss/asset 不适用于 Laravel 4.1,所以我不得不分叉它。请查收:github.com/Ardakilic/laravel4-asset
【解决方案2】:

我使用助手:

<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()等

【讨论】:

    【解决方案3】:

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

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

    • jasonlewis/basset(有一些错误)

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

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

    【讨论】:

    • 是的,每个人都想要尽可能多的库来完成像 src="{{asset('js/jquery-1.9.1.js') }}">脚本>。这不是一个好习惯,怎么会有 7 个赞成票。
    【解决方案4】:

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

    在我的刀片模板中:

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

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

    @extends('template')
        @section('head')
        {{ HTML::style('css/filename.css') }}
        {{ HTML::script('js/filename.js') }}
        @stop
    ...
    

    【讨论】:

      【解决方案5】:

      Basset(前 Best Asset)呢?:http://jasonlewis.me/code/basset

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

      【讨论】:

        【解决方案6】:

        Laravel 3 的 Asset 类的一个端口。与 Laravel 4 配合使用。

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

        【讨论】:

        • 感谢图书馆,太棒了!
        • 这不再适用于 Laravel 4,所以我不得不分叉它。如果你想在最新的 Laravel 项目中使用它,请查看:github.com/Ardakilic/laravel4-asset
        【解决方案7】:

        使用会报错:

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

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

        风格:

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

        脚本:

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

        【讨论】:

          【解决方案8】:

          我制作了一个更简单的 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;
          }
          }
          

          【讨论】:

            【解决方案9】:

            我知道这个问题已经得到解答,但 Orchestra 的资源包与 Laravel 3 使用的资源库相同。甚至可能是同一个包。这是我用的。

            https://github.com/orchestral/asset

            【讨论】:

              【解决方案10】:

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

              Meido has created a 'port' of HTML, Form and Str classes from Laravel 3 to Laravel 4.

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

              【讨论】:

                【解决方案11】:

                我只是使用:

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

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

                【讨论】:

                  【解决方案12】:

                  在我看来,最好的方法是使用 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>  
                  

                  您还可以将它与图像以及位于您的公共文件夹中的任何资产一起使用。

                  &lt;img scr="{{URL::asset('img/image.jpg')}}}} id="someid"&gt;

                  通过使用这种方法,我发现更容易组织和分离我的 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 开发人员来说不够全面。

                  这一切都因开发人员的编码风格而异,但我认为标记应尽可能保持“原始”,以便前端开发人员更容易访问。

                  【讨论】:

                    【解决方案13】:

                    您也可以使用 Grunt.js 来管理您的资产。

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

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

                    完全独立于 PHP。

                    【讨论】:

                    • 它可能独立于PHP,但它不依赖于node.js吗?
                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2021-12-27
                    • 1970-01-01
                    • 2019-02-22
                    • 2011-05-07
                    • 2012-04-24
                    • 2019-12-03
                    • 2010-09-17
                    相关资源
                    最近更新 更多