Quelles sont les meilleures pratiques et les meilleurs endroits pour laravel 4 helpers ou fonctions de base?

Donc j'essaye de comprendre le meilleur endroit pour mettre une fonction globale dans laravel 4. Par exemple: formatage de date. Je ne pense pas que faire une façade en vaut la peine, les façades sont trop modulaire. J'ai lu des articles sur la création d'un dossier de bibliothèque et le stockage des classes, mais cela semble aussi beaucoup pour une fonction simple. En outre, un "outil" comme celui-ci ne devrait-il pas être disponible dans les modèles de lame?

Quelles sont les meilleures pratiques pour quelque chose comme ça? Et comment puis-je faire disponible pour les modèles de lame?

141
demandé sur Antonio Carlos Ribeiro 2013-06-13 17:56:23

4 réponses

la manière laide, paresseuse et horrible: à la fin de bootstrap/start.php , ajouter un include('tools.php') et placer votre fonction dans ce nouveau fichier.

La méthode propre: Créer une bibliothèque. De cette façon, il sera autolaqué seulement quand vous l'utilisez réellement.

  • créez un libraries dossier à l'intérieur de votre app dossier
  • créez votre fichier de bibliothèque, créez une classe en elle, et ajoutez des fonctions statiques à elle
  • Option 1 : modifier start/global.php pour ajouter app_path().'/libraries' au tableau ClassLoader::addDirectories( .
  • Option 2 : modifier composer.json pour ajouter "app/libraries" au tableau autoload . Run composer dump-autoload
  • appelez votre classe et les fonctions statiques de vos vues.

à propos de vos options, Cité Du global.php fichier

En plus de L'utilisation de Composer, vous pouvez utiliser le chargeur Laravel class pour chargez vos contrôleurs et modèles. Ceci est utile pour garder tout vos classes dans l'espace de noms" global " sans mise à jour de Composer.

vous pouvez combiner les deux options, où le chargeur de classe Laravel recherchera automatiquement des classes dans les répertoires enregistrés ( Option 1 , plus facile) et Composer conservera l'enregistrement de toutes les classes, mais seulement après que vous mise à jour it ( Option 2 , pourrait améliorer les performances).

229
répondu Alexandre Danault 2014-03-24 12:14:30

ma façon de faire est de créer un nouveau dossier dans le répertoire /app à la racine de votre projet Laravel 4. Puis ajoutez ce dossier au premier tableau du fichier /app/start/global.php comme suit:

<?php

ClassLoader::addDirectories(array(

app_path().'/commands',
app_path().'/controllers',
app_path().'/models',
app_path().'/database/seeds',
app_path().'/classes', // This line is the one I've added.

));

aussi longtemps que la structure du dossier dans le nouveau dossier /app/classes suit votre convention namespacing. Laravel 4 va charger automatiquement toutes les classes/fichiers de ce dossier. De cette façon il n'y a pas besoin de creuser dans les dossiers de compositeur ou exécuter compositeur commande.

Je ne sais pas s'il s'agit d'une bonne pratique, mais cela fonctionne certainement.

si vous avez créé un fichier simple appelé /app/classes/Helpers/Helper.php comme ceci:

<?php namespace Helpers;

class Helper {

    public static function helloWorld()
    {
        return 'Hello World';
    }
}

Tout ce que vous devez faire est d'appeler Helpers\Helper::helloWorld();

vous pouvez aussi alias cette classe helper dans votre fichier /app/config/app.php . Il suffit d'ajouter quelque chose comme ceci à la fin du tableau aliases :

'Helper'          => 'Helpers\Helper'
80
répondu JasonMortonNZ 2013-06-13 22:39:23

Laravel des aides.php méthode consiste à l'ajouter à vos "fichiers" dans le compositeur.json ( ) https://github.com/laravel/framework/blob/master/composer.json ):

"autoload": {
    "classmap": [
        ...
    ],
    "files": [
        "app/libraries/helpers.php"
    ],
},

ce que je fais, c'est créer de petites classes (quelques méthodes par classe, une ligne par méthode, tout s'étend de quelque chose et sec, c'est mon but),

class ExtendedCarbon extends Carbon\Carbon {

    public function formatDDMMAAAA($date)
    {
        /// format and return
    }

}

les sauvegarder dans app / libraries et ajouter à compositeur.json:

"autoload": {
    "classmap": [
        ...
        "app/libraries",
        ...
    ],
},

Exécuter

composer dump

et puis il suffit de les utiliser où vous avez besoin

$formatted = (new ExtendedCarbon)->formatDDMMAAAA($date);

voir cette vidéo sur le remaniement: http://www.youtube.com/watch?v=DC-pQPq0acs

au fait, je suis un peu sûr que ce n'était qu'un exemple, mais vous n'aurez peut-être pas besoin d'aide pour formater les dates, puisque toutes les dates de Laravel sont des instances de carbone ( https://github.com/briannesbitt/Carbon ) et il a des charges de méthodes pour formater la date et l'heure.

24
répondu Antonio Carlos Ribeiro 2015-06-10 17:26:27

vous pouvez également utiliser View::share() avec des fermetures pour atteindre ce - je viens de poster à ce sujet: http://www.develophp.org/2014/07/laravel-4-blade-helper-functions /

a ajouté l'avantage: vous n'avez pas besoin de créer une classe supplémentaire et aussi garder l'espace Nam global propre.

6
répondu Franz 2014-07-31 14:38:01