web-dev-qa-db-fra.com

Meilleures pratiques pour Laravel 4 Aides et fonctions de base?

J'essaie de comprendre le meilleur endroit pour mettre une fonction globale dans Laravel 4. Par exemple, le formatage de la date. Je ne pense pas que faire une façade en vaut la peine, car les façades sont trop modulaires. J'ai lu des articles sur la création d'un dossier de bibliothèque et le stockage de classes, mais cela semble également beaucoup pour une fonction simple. 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 cela et comment puis-je le rendre disponible aux modèles de lames?

146
Jason Spick

La manière laide, paresseuse et affreuse: À la fin de bootstrap/start.php, Ajoutez un include('tools.php') et placez votre fonction dans ce nouveau fichier.

La manière propre: Créez une bibliothèque. De cette façon, il sera chargé automatiquement UNIQUEMENT lorsque vous l'utiliserez réellement.

  • Créez un dossier libraries dans votre dossier app
  • Créez votre fichier de bibliothèque, créez une classe et ajoutez-y des fonctions statiques
  • Option 1: Éditez start/global.php Pour ajouter app_path().'/libraries' au tableau ClassLoader::addDirectories(.
  • Option 2: Éditez composer.json Pour ajouter "app/libraries" Au tableau autoload. Exécuter composer dump-autoload
  • Appelez votre classe et les fonctions statiques à partir de vos vues.

À propos de vos options, citées dans le fichier global.php

En plus d'utiliser Composer, vous pouvez utiliser le chargeur de classe Laravel pour charger vos contrôleurs et modèles. Ceci est utile pour conserver toutes vos classes dans l'espace de noms "global" sans Composer mise à jour.

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

233
Alexandre Danault

Ma façon de faire est de créer un nouveau dossier dans le répertoire /app À la racine de votre projet Laravel 4. Ajoutez ensuite ce dossier au premier tableau de la liste /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.

));

Tant que la structure du dossier dans le nouveau dossier /app/classes Respecte votre convention de nomspacing. Laravel 4 chargera automatiquement toutes les classes/tous les fichiers de ce dossier. De cette manière, vous n'aurez plus besoin de creuser dans les fichiers composer ni exécuter composer commande.

Pas sûr que ce soit la meilleure pratique, mais ça marche.

Si vous avez créé un fichier simple appelé /app/classes/Helpers/Helper.php Tel que:

<?php namespace Helpers;

class Helper {

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

Il suffit d’appeler Helpers\Helper::helloWorld();

Vous pouvez également aliaser cette classe d'assistance dans votre fichier /app/config/app.php. Ajoutez simplement quelque chose comme ceci à la fin du tableau aliases:

'Helper'          => 'Helpers\Helper'
82
JasonMortonNZ

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

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

Ce que je fais est de créer de petites classes (quelques méthodes par classe, une ligne par méthode, tout est étendu à partir de quelque chose et DRY, c'est mon objectif),

class ExtendedCarbon extends Carbon\Carbon {

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

}

sauvegardez-les dans app/libraries et ajoutez-les à composer.json:

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

Execute

composer dump

Et ensuite, utilisez-les partout où vous en avez besoin

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

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

En passant, je suis un peu sûr que ce n’était qu’un exemple, mais vous n’avez peut-être pas besoin d’un assistant pour formater les dates, car toutes les dates entre Laravel sont des instances de Carbon ( https://github.com/briannesbitt/Carbon ) et il a des tas de méthodes pour formater la date et l'heure.

25

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

Avantage supplémentaire: vous n'avez pas besoin de créer une classe supplémentaire ni de garder le namespace global propre.

7
Franz