2013-01-07 26 views
38

Wie verwalten Sie Assets im neuen Laravel 4? Es sieht so aus, als hätte Taylor Otwell Asset::add durch etwas Neues ersetzt.Laravel 4: Was ist der Ersatz für Asset :: add?

Was ich versuche zu tun ist Laravel meine CSS-und JS-Dateien hinzufügen. Es gab mehrere Möglichkeiten, dies in Laravel 3 zu tun, aber sie scheinen jetzt weg zu sein. Einer war Asset::add und der andere war HTML. Was sind die Ersatz für diese?

+0

Die Beta-Version von Laravel 4 mit vollständiger Dokumentation kommt in dieser Woche, nur hängen dort. –

+0

Gute Frage. Keine Dokumentation über Möglichkeiten, dies zu tun. Ich habe gerade {{HTML :: style()}} für jetzt verwendet, da ein Paket wie Overkill scheint. – Mediabeastnz

Antwort

41

In Laravel 4 Sie die HTML-Klasse verwenden können, ist es standardmäßig im Laravel Framework-Paket enthalten:

Sheet :

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

Javascript:

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

gibt es keine Möglichkeit, Assets vom Controller beim Laden der Ansicht hinzuzufügen? so wie es in L3 gemacht wurde? – Alex

+3

@ w0rldart versuchen 'teepluss/asset', zur Verfügung gestellt [hier] (https://packagist.org/packages/teepluss/asset). Dies ist ein Port von Laravel 3, der einwandfrei funktioniert. – Arda

+0

@ w0rldart teepluss/asset funktioniert nicht mit Laravel 4.1, also musste ich es abzweigen. Bitte überprüfen Sie: https://github.com/Ardakilic/laravel4-asset – Arda

4

Was Basset (ehemals bestes Vermögen) ?: http://jasonlewis.me/code/basset

ich es auf L4 gerade installiert hat, noch keine Tests gemacht, aber versprechend klingen.

2

Ein Port von Laravel 3 Asset-Klasse. Hergestellt mit Laravel arbeiten 4.

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

+0

Danke für die Bibliothek, super! – Arda

+0

Das funktioniert nicht mehr mit Laravel 4, also musste ich es abzweigen. Bitte überprüfen Sie: https://github.com/Ardakilic/laravel4-asset, wenn Sie es für die neuesten Laravel-Projekte verwenden möchten. – Arda

9

Ich benutze den Helfer:

<script src="{{ asset('js/jquery-1.9.1.js') }}"></script> 
<script src="{{ asset('js/bootstrap.min.js') }}"></script> 

Siehe auch

vendor/laravel/framework/src/Illuminate/Support/helpers.php 

Viele andere Helfer auch, zum Beispiel app_path(), verschiedene Array-Tools, link_to_route(), LINK_TO_ACTION(), storage_path() usw.

7

Dies ist, wie ich tat, als ich einige CSS anhängen benötigt und Dateien nur auf eine bestimmte Seite .js:

In meiner Klinge Vorlage:

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

Und in meiner bestimmten Seite Blade-Datei:

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

ich eine viel einfachere Version von Laravel 3 Anlagenklasse hergestellt und funktioniert perfekt in Laravel 4. mir ist alles was ich brauche! einfach einen Namen für den Container wählen und die Vermögenswerte in der endgültigen Bestellung hinzufügen:

Asset::container('jq_1.10')->add('js/jquery-1.10.1.min.js')->add('css/css.css'); 

Zur Ausgabe:

echo Asset::container('jq_1.10')->asset(); 

Die Klasse:

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

Laravel 4 nicht über Out-of-the-Box-Asset-Management. Aber einige Pakete wurden erstellt, um mit dieser Art von Dingen umzugehen.

  • codesleeve/asset-pipeline (mein Favorit bisher)

  • jasonlewis/basset (hatte einige Fehler mit diesem)

  • teepluss/Asset (am nächsten Laravel 3 Asset-:: add(), aber doesn ‚t tun Verkettung oder Verkleinerungs)

  • Weg/guard-Laravel (erfordert Rubin guard gem zu laufen)

+0

teeplass/asset ist genial, danke für die Mitteilung – Arda

+0

Yea Was alle wollen, sind so viele Bibliotheken wie möglich für so einfache Aufgaben wie . Es ist keine gute Übung, wie kann das 7 upvotes haben. – Srneczek

0

benutze ich nur:

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

, die für alle Arten von Dateien funktioniert. Beachten Sie, dass es nur die URL zurückgibt, die die HTML-Tags und Zeug nicht zurückgibt.

1

Es wird einen Fehler, wenn Sie verwenden:

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

Da Laravel Änderung Laravel Basis Aliases von HTML-Html. Wenn Sie einen Fehler haben, benutze ich den Code unten, um stattdessen.

Stil:

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

Script:

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

Meiner Meinung nach der beste Weg, dies zu tun, ist mit dem URL :: Asset() Methode.

Zum Beispiel:

CSS

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

oder

JS

<script type="text/javascript" src="{{URL::asset('js/scripts.js')}}"></script> 

Sie können es auch mit Bildern verwenden und im Grunde ein Vermögenswert liegt in Ihrer Pu blic Ordner.

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

Mit dieser Methode finde ich es einfacher zu organisieren und meinen HTML-Markup von Laravel Methoden zu trennen.

sagen, wenn ich eine CSS-Datei angeben wollte, die mit den Medien = „print“ Attribute, das „Laravel“ Art und Weise, dies zu tun ist die folgende geladen werden soll:

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

Während die herkömmliche Art und Weise , mit der Methode {{URL :: asset()}}, ist umfassender und für Frontend-Entwickler zugänglich (mit denen Sie möglicherweise in einem Teamprojekt arbeiten).

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

Sie sagen, dass der Unterschied minimal ist, aber wenn sie mit vielen Markup Umgang Attribute ("IDs, Daten-Attribute, Klassen benutzerdefinierte Attribute"), der HTML :: Stil(), HTML :: image(), HTML :: link() -Methoden können sich als recht lang und in-html/css/js-Entwicklern als umfassend erweisen.

Alles variiert und hängt vom Programmierstil des Entwicklers ab, aber meiner Meinung nach sollte Markup so "roh" wie möglich bleiben, damit es für Frontend-Entwickler zugänglicher ist.

0

Alternativ können Sie Grunt.js verwenden, um Ihre Assets zu verwalten.

Grunt ist im Grunde eine Bibliothek von Plugins, die "Aufgaben" wie laufen:

  • Compile WENIGER
  • Kombinieren JS Dateien
  • Minify JS Dateien
  • viel viel mehr ....

alle unabhängig von PHP.

+2

Es ist vielleicht unabhängig von PHP, aber hängt es nicht von node.js ab? – Puzbie

1

Ich weiß, dass es bereits beantwortet wurde, aber Orchesters Asset-Paket ist identisch mit der Asset-Bibliothek Laravel 3 verwendet. Vielleicht sogar das gleiche Paket gewesen. Es ist was ich benutze.

https://github.com/orchestral/asset

Verwandte Themen