php - globales - ¿Cómo hago funciones de ayuda global en laravel 5?
helpers php (3)
Si quisiera hacer una función currentUser()
para algunas cosas oaut, estoy haciendo lo que puedo usar en una vista o en un controlador (think rails, donde haces helper_method: current_user
en el controlador de la aplicación).
Todo lo que leo establece crear una carpeta de ayudantes y agregar la función allí y de esa manera usted puede hacer Helpers::functionName
¿Es esta la manera correcta de hacer esto?
¿Cuál es la "manera más rápida" de crear funciones auxiliares que se pueden usar en plantillas y controladores blade?
Laravel ayudantes globales
A menudo encontrará que necesita una función de utilidad que tenga acceso global a lo largo de toda su aplicación. Tomando prestado de cómo laravel escribe sus ayudantes predeterminados, puede ampliar la capacidad con sus funciones personalizadas.
Crea el archivo auxiliar, no la clase
Prefiero un archivo y no una clase, ya que no quiero molestarme con los espacios de nombres y quiero que sus funciones sean accesibles sin los prefijos de clase como: greeting(''Brian'');
en lugar de Helper::greeting(''Brian'');
al igual que Laravel lo hace con sus ayudantes.
Archivo: app/Support/helper.php
Registrar archivo auxiliar con Composer: composer.json
{
...
"autoload": {
"classmap": [
"database"
],
"files": [
"app/Support/helpers.php"
],
"psr-4": {
"App//": "app/"
}
},
...
}
Crea tu primera función de ayuda
<?php
if (!function_exists(''greet'')) {
/**
* Greeting a person
*
* @param string $person Name
* @return string
*/
function greet($person)
{
return ''Hello '' . $person;
}
}
Uso:
Recuerde cargar automáticamente el archivo antes de intentar acceder a sus funciones: composer dump-autoload
Probemos con Tinker
$ php artisan tinker
Psy Shell v0.8.17 (PHP 7.0.6 ΓÇö cli) by Justin Hileman
>>> greet(''Brian'');
=> "Hello Brian"
>>> exit
Exit: Goodbye.
Con cuchilla
<p>{{ greet(''Brian'') }}</p>
Uso avanzado como directiva Blade:
En ocasiones, deseará utilizar una directiva blade en lugar de una función simple. Registre su directiva Blade en el método de arranque de AppServiceProvider: app/Providers/AppServiceProvider.php
public function boot()
{
// ...
Blade::directive(''greet'', function ($expression) {
return "<?php echo greet({$expression}); ?>";
});
}
Uso: <p>@greet(''Brian'')</p>
Nota: es posible que necesite borrar las vistas de caché php artisan view:clear
Crea un nuevo archivo en tu aplicación / nombre del directorio de Ayudantes AnythingHelper.php Un ejemplo de mi ayudante es:
<?php
function getDomesticCities()
{
$result = /App/Package::where(''type'', ''='', ''domestic'')
->groupBy(''from_city'')
->get([''from_city'']);
return $result;
}
generar un proveedor de servicios para su ayudante siguiendo el comando
php artisan make:provider HelperServiceProvider
en la función de registro de su HelperServiceProvider.php recientemente generado agregue el siguiente código
require_once app_path(''Helpers/AnythingHelper.php'');
ahora en tu config / app.php carga este proveedor de servicios y listo
''App/Providers/HelperServiceProvider'',
Otra forma eficiente de crear un archivo de funciones global es autoelaborarlo directamente desde el compositor. La sección de autocarga del compositor acepta una matriz de files
que se carga automáticamente.
Cree un archivo
functions.php
donde lo desee, en este ejemplo, vamos a crearlo dentro de laapp/Helpers
.Agregue sus funciones, pero no agregue una clase o espacio de nombres.
<?php function global_function_example($str) { return ''A Global Function with ''. $str; }
En
composer.json
dentro de la sección deautoload
, agregue la siguiente línea:"files": ["app/Helpers/functions.php"]
Para Laravel 5:
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App//": "app/"
},
"files": ["app/Helpers/functions.php"]
},
- Ejecutar
composer dump-autoload
¡Felicidades! Ahora puede acceder a global_function_example(''hello world'')
desde cualquier parte de su aplicación, incluidas las vistas de Blade.
¡Espero que esto sea útil para alguien!