Подтвердить что ты не робот

Laravel 4: Что такое замена для Asset:: add?

Как вы управляете активами в новом Laravel 4? Похоже, Тейлор Отуэлл заменил Asset::add чем-то новым.

То, что я пытаюсь сделать, это заставить Laravel добавлять мои CSS и JS файлы. В Laravel 3 было несколько способов сделать это, но теперь они, похоже, исчезли. Один из них был Asset::add, а другой был HTML. Каковы их замены?

4b9b3361

Ответ 1

В Laravel 4 вы можете использовать класс HTML, по умолчанию он включен в пакет Laravel Framework:

Таблица стилей:

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

JavaScript:

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

Ответ 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 (требуется рубиновый защитный камень для запуска)

Ответ 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

Как насчет Бассета (бывший лучший актив)?: http://jasonlewis.me/code/basset

Я только что установил его на L4, все еще никаких тестов, но звук обещал.

Ответ 7

Я сделал намного более простой вариант класса 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;
}
}

Ответ 8

Это будет ошибка, если вы используете:

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

Потому что Laravel изменяет псевдонимы базы Laravel от HTML до HTML. Если вы получили ошибку, то я использую вместо этого код ниже.

Стиль:

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

Script:

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

Ответ 9

Я знаю, что это уже ответили, но пакет активов Orchestra идентичен используемой библиотеке ресурсов Laravel 3. Возможно, это был один и тот же пакет. Это то, что я использую.

https://github.com/orchestral/asset

Ответ 10

Они не существуют в Laravel 4 - я думаю, идея состоит в том, чтобы использовать пакеты Composer для их добавления.

Meido создал "порт" классов HTML, Form и Str от Laravel 3 до 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>  

Вы также можете использовать его с изображениями и в основном любыми активами, находящимися в вашей общей папке.

т:   <img scr="{{URL::asset('img/image.jpg')}}}} id="someid">

Используя этот метод, мне легче организовать и разделить мою разметку HTML с помощью методов Laravel.

Скажем, если бы я хотел указать файл css, который должен быть загружен атрибутом media = "print", способ "Laravel" заключается в следующем:

{{HTML::style("print.css", array('media' => 'print'))}}

В то время как обычный способ, используя метод {{URL:: asset()}}, является более всеобъемлющим и доступным для разработчиков интерфейса (с которыми вы можете работать в командном проекте).

 <link rel="stylesheet" href="{{URL::asset('css/style.css')}}" media="print" />

Вы можете сказать, что разница минимальна, но при работе с множеством атрибутов разметки ( "идентификаторы, атрибуты данных, атрибуты классов" ) HTML:: style(), HTML:: image(), Методы HTML:: link() могут оказаться довольно длинными и всесторонними для разработчиков html/css/js.

Все меняется и зависит от стиля разработки кода, но, на мой взгляд, разметка должна оставаться как можно более "сырой", чтобы она была более доступной для разработчиков в интерфейсе.

Ответ 13

В качестве альтернативы вы можете использовать Grunt.js для управления вашими активами.

Grunt - это в основном библиотека плагинов, которые запускают "задачи", такие как:

  • Скомпилировать LESS
  • Объединить файлы JS
  • Свернуть JS файлы
  • Многое больше....

все независимо от PHP.