Tengo algunas clases de ayuda en app/Helpers . ¿Cómo cargo estas clases con un service provider para usarlas en plantillas de hoja?
por ejemplo, si tengo una clase CustomHelper que contiene un método fooBar() :
<?php nampespace App\Helpers; class CustomHelper { static function fooBar() { return 'it works!'; } }Quiero poder hacer algo como esto en mis plantillas de hoja:
{{ fooBar() }}en lugar de hacer esto:
{{ \App\Helpers\CustomHelper::fooBar() }}PD: la respuesta de @andrew-brown en Mejores prácticas para ayudantes personalizados en Laravel 5 trata con archivos que no son de clase. Sería bueno tener una solución basada en clases para que las funciones auxiliares se puedan organizar entre clases.
No creo que sea posible usar solo la función cuando tienes código en tus clases. Bueno, podrías intentar extender Blade pero es demasiado.
Lo que debe hacer es crear un archivo adicional, por ejemplo app\Helpers\helpers.php y en su archivo composer.json poner:
"autoload": { "classmap": [ "database" ], "psr-4": { "App\\": "app/" }, "files": ["app/Helpers/helpers.php"] // <- this line was added }, crear el archivo app/Helpers/helpers.php y ejecutar
composer dump-autoload Ahora, en su archivo app/Helpers/helpers.php , puede agregar esas funciones personalizadas, por ejemplo, como esta:
if (! function_exists('fooBar')) { function fooBar() { return \App\Helpers\CustomHelper::fooBar(); } }por lo que define funciones globales pero, de hecho, todas ellas pueden usar métodos públicos específicos de algunas clases.
Por cierto, esto es exactamente lo que Laravel hace por sus propios ayudantes, por ejemplo:
if (! function_exists('array_add')) { function array_add($array, $key, $value) { return Arr::add($array, $key, $value); } } como puede ver, array_add es solo una forma más corta (o quizás menos detallada) de escribir Arr::add