web-dev-qa-db-fra.com

Laravel 4: Quel est le remplacement de Asset :: add?

Comment gérez-vous les actifs dans le nouveau Laravel 4? Il semblerait que Taylor Otwell ait remplacé Asset::add par quelque chose de nouveau.

Ce que j'essaie de faire est de demander à Laravel d'ajouter mes fichiers CSS et JS. Il y avait plusieurs façons de faire cela dans Laravel 3, mais elles semblent avoir disparu maintenant. L'un était Asset::add et l'autre HTML. Quels sont les remplaçants pour ceux-ci?

38
sehummel

Dans Laravel 4, vous pouvez utiliser la classe HTML. Elle est incluse par défaut dans le package Laravel Framework: 

Feuille de style: 

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

Javascript:

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

J'utilise l'assistant:

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

Voir également

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

De nombreux autres assistants aussi, par exemple app_path (), divers outils de tableau, link_to_route (), link_to_action (), storage_path (), etc.

8
Dirk

Laravel 4 n'a pas de gestion des actifs prête à l'emploi. Mais certains paquets ont été créés pour gérer ce genre de choses.

  • codesleeve/asset-pipeline (mon préféré jusqu'à présent)

  • jasonlewis/basset (eu quelques erreurs avec cela)

  • teepluss/asset (le plus proche de Laravel 3 Asset :: add () mais ne fait pas de concaténation ou de minification)

  • way/guard-laravel (nécessite la gemme de garde Ruby pour courir)

8
Sandy Wilbourn

C'est ce que j'ai fait lorsque j'ai eu besoin d'ajouter des fichiers .css et .js uniquement à une page spécifique:

Dans mon gabarit de lame:

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

Et dans mon fichier de lame de page spécifique:

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

Qu'en est-il de Basset (ex Best Asset) ?: http://jasonlewis.me/code/basset

Je viens de l'installer sur L4, toujours pas de test, mais prometteur.

4

Un port de la classe d'actifs de Laravel 3. Fait pour travailler avec Laravel 4.

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

2
Tee Plus

J'ai conçu une version beaucoup plus simple de Laravel 3 Asset Class et fonctionne parfaitement dans Laravel 4. Pour moi, c'est tout ce dont j'ai besoin! Il suffit de choisir un nom pour le conteneur et d’ajouter les actifs dans l’ordre final:

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

Pour la sortie:

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

La classe:

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;
}
}
1
ebelendez

Ce sera une erreur si vous utilisez:

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

Parce que Laravel change les alias de base Laravel de HTML en Html Si vous avez une erreur, utilisez le code ci-dessous.

Style:

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

Scénario:

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

Je sais que la réponse a déjà été donnée, mais le paquet d'actifs d'Orchestra est identique à la bibliothèque d'actifs Laravel 3 utilisée. Aurait même pu être le même paquet. C'est ce que j'utilise.

https://github.com/orchestral/asset

1
bgallagh3r

Je viens d'utiliser:

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

Ce qui fonctionne pour tous les types de fichiers. Remarque: il ne renvoie que l'URL, mais pas les balises HTML.

0
Sam Pettersson

Celles-ci n’existent pas dans Laravel 4 - Je pense que l’idée est d’utiliser des bundles Composer pour les ajouter.

Meido a créé un 'portage' de classes HTML, Form et Str de Laravel 3 à Laravel 4.

Je ne connais pas de port Asset. Je pense que vous devriez consulter les bundles déjà présents sur Composer pour en trouver un qui répond à vos besoins.

0
Laurence

Vous pouvez également utiliser Grunt.js pour gérer vos actifs.

Grunt est essentiellement une bibliothèque de plugins exécutant des "tâches" telles que:

  • Compiler MOINS
  • Combiner des fichiers JS
  • Minify JS files
  • Beaucoup plus....

tous indépendants de PHP.

0
AndrewMcLagan