Ответ 1
В Laravel 4 вы можете использовать класс HTML
, по умолчанию он включен в пакет Laravel Framework:
Таблица стилей:
{{ HTML::style('css/style.css') }}
JavaScript:
{{ HTML::script('js/default.js') }}
Как вы управляете активами в новом Laravel 4? Похоже, Тейлор Отуэлл заменил 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
Многие другие помощники тоже, например. app_path(), различные инструменты массива, link_to_route(), link_to_action(), storage_path() и т.д.
У Laravel 4 нет управления активами. Но некоторые пакеты были созданы для обработки такого рода вещей.
codesleeve/asset-pipeline (мой любимый пока)
jasonlewis/basset (с некоторыми ошибками)
teepluss/asset (ближе всего к Laravel 3 Asset:: add(), но не делает конкатенации или минимизации)
way/guard-laravel (требуется рубиновый защитный камень для запуска)
Так я сделал, когда мне нужно было добавить некоторые файлы .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, все еще никаких тестов, но звук обещал.
Порт класса Laravel 3 Asset. Сделано для работы с Laravel 4.
Я сделал намного более простой вариант класса 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;
}
}
Это будет ошибка, если вы используете:
{{ HTML::style('assets/css/style.css') }}
Потому что Laravel изменяет псевдонимы базы Laravel от HTML
до HTML
. Если вы получили ошибку, то я использую вместо этого код ниже.
Стиль:
{{ Html::style('assets/css/style.css') }}
Script:
{{ Html::script('assets/css/style.css') }}
Я знаю, что это уже ответили, но пакет активов Orchestra идентичен используемой библиотеке ресурсов Laravel 3. Возможно, это был один и тот же пакет. Это то, что я использую.
Они не существуют в Laravel 4 - я думаю, идея состоит в том, чтобы использовать пакеты Composer для их добавления.
Meido создал "порт" классов HTML, Form и Str от Laravel 3 до Laravel 4.
Я не знаю об объекте - я думаю, вы должны просмотреть пакеты, уже находящиеся в Composer, чтобы найти тот, который вам подходит.
Я просто использую:
{{ asset('js/jquery.min.js') }}
Что работает для всех типов файлов. Обратите внимание, что он возвращает только URL-адрес, который не возвращает теги HTML и прочее.
На мой взгляд, лучший способ сделать это - с помощью метода 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.
Все меняется и зависит от стиля разработки кода, но, на мой взгляд, разметка должна оставаться как можно более "сырой", чтобы она была более доступной для разработчиков в интерфейсе.
В качестве альтернативы вы можете использовать Grunt.js для управления вашими активами.
Grunt - это в основном библиотека плагинов, которые запускают "задачи", такие как:
все независимо от PHP.