with index composer cache bootstrap laravel laravel-4 blade

index - ¿Cuáles son las mejores prácticas y los mejores lugares para laravel 4 helpers o funciones básicas?



return view controller laravel (4)

Así que estoy tratando de entender el mejor lugar para poner una función global en laravel 4. Por ejemplo: formato de fecha. No creo que valga la pena hacer una fachada, las fachadas son demasiado modulares. He leído artículos sobre cómo crear una carpeta de biblioteca y almacenar clases allí, pero eso también parece mucho para una función simple. Además, ¿no debería estar disponible una ''herramienta'' como esta en las plantillas de hoja?

¿Cuáles son las mejores prácticas para algo como esto? ¿Y cómo lo hago disponible para las plantillas de hoja?


El método helpers.php de Laravel es agregarlo a sus "archivos" en composer.json ( https://github.com/laravel/framework/blob/master/composer.json ):

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

Lo que hago es crear clases pequeñas (algunos métodos por clase, una línea por método, todo lo extendido desde algo y SECO, ese es mi objetivo),

class ExtendedCarbon extends Carbon/Carbon { public function formatDDMMAAAA($date) { /// format and return } }

guárdelos en la aplicación / bibliotecas y agréguelos a composer.json:

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

Ejecutar

composer dump

Y luego solo úsalas donde necesites

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

Mire este video sobre la refactorización: http://www.youtube.com/watch?v=DC-pQPq0acs

Por cierto, estoy seguro de que fue solo un ejemplo, pero es posible que no necesites un ayudante para formatear las fechas, ya que todas las fechas en Laravel son instancias de Carbon ( https://github.com/briannesbitt/Carbon ) y tiene muchos métodos para formatear la fecha y la hora.


Mi forma de hacerlo es crear una nueva carpeta en el directorio /app en la raíz de tu proyecto Laravel 4. A continuación, agregue esta carpeta a la primera matriz del archivo /app/start/global.php de la /app/start/global.php manera:

<?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. ));

Siempre que la estructura de carpetas dentro de la nueva carpeta /app/classes siga su convención de espacio de nombres. Laravel 4 autocargará todas las clases / archivos dentro de esta carpeta. De esta forma, no es necesario profundizar en ningún archivo de compositor ni ejecutar el comando de compositor.

No estoy seguro si esta es la mejor práctica, pero ciertamente funciona.

Si creó un archivo simple llamado /app/classes/Helpers/Helper.php como este:

<?php namespace Helpers; class Helper { public static function helloWorld() { return ''Hello World''; } }

Todo lo que tendría que hacer es llamar a Helpers/Helper::helloWorld();

También podría alias esta clase de ayuda en su archivo /app/config/app.php . Simplemente agregue algo como esto al final de la matriz de aliases :

''Helper'' => ''Helpers/Helper''



La manera fea, vaga y horrible: al final de bootstrap/start.php , agregue un include(''tools.php'') y coloque su función en ese nuevo archivo.

La manera limpia: crea una biblioteca. De esa forma, se autocargará SOLAMENTE cuando realmente lo uses.

  • Crea una carpeta de libraries dentro de tu carpeta de app
  • Cree su archivo de biblioteca, cree una clase en él y agregue funciones estáticas a él
  • Opción 1 : Editar start/global.php para agregar app_path().''/libraries'' al ClassLoader::addDirectories( matriz.
  • Opción 2 : edite composer.json para agregar "app/libraries" a la matriz de autoload . Ejecutar composer dump-autoload
  • Llame a su clase y funciones estáticas desde sus puntos de vista.

Acerca de sus opciones, citadas del archivo global.php

Además de usar Composer, puedes usar el cargador de clases Laravel para cargar tus controladores y modelos. Esto es útil para mantener todas sus clases en el espacio de nombres "global" sin la actualización de Composer.

Puede combinar ambas opciones, donde el cargador de clases Laravel buscará automáticamente las clases en los directorios registrados ( Opción 1 , más fácil) y Composer guardará el registro de todas las clases, pero solo después de que lo actualice ( Opción 2 , podría mejorar el rendimiento).