hacer globales funciones create crear como php laravel-5 blade controllers helpers

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.

  1. Cree un archivo functions.php donde lo desee, en este ejemplo, vamos a crearlo dentro de la app/Helpers .

  2. Agregue sus funciones, pero no agregue una clase o espacio de nombres.

    <?php function global_function_example($str) { return ''A Global Function with ''. $str; }

  3. En composer.json dentro de la sección de autoload , 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"] },

  1. 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!