Как сделать глобальные вспомогательные функции в laravel 5?
Если бы я хотел сделать currentUser()
функция для некоторых вещей oauth, которые я делаю, где я могу использовать его в представлении или в контроллере (думаю, rails, где вы делаете helper_method: current_user
в контроллер приложения).
все, что я читаю состояния, чтобы создать папку helpers и добавить функцию там, а затем таким образом вы можете сделать Helpers::functionName
это правильный способ сделать это?
что такое "laravel способ" создания вспомогательных функций, которые могут быть использованы в шаблонах blade и контроллеры?
3 ответов
создайте новый файл в каталоге приложения/помощников, назовите его AnythingHelper.РНР Пример моего помощника :
<?php
function getDomesticCities()
{
$result = \App\Package::where('type', '=', 'domestic')
->groupBy('from_city')
->get(['from_city']);
return $result;
}
создайте поставщика услуг для вашего помощника, выполнив команду
php artisan make:provider HelperServiceProvider
в функции регистра вашего вновь созданного HelperServiceProvider.php добавить следующий код
require_once app_path('Helpers/AnythingHelper.php');
теперь в вашем config / app.php загрузите этого поставщика услуг, и все готово
'App\Providers\HelperServiceProvider',
Другим эффективным способом создания файла глобальных функций является его автоматическая загрузка непосредственно из composer. Раздел автозапуска composer принимает files
массив, который автоматически загружается.
создать
functions.php
файл везде, где вам нравится, в этом примере мы собираемся создать его внутриapp/Helpers
.-
добавьте свои функции, но сделайте не добавить класс или пространство имен.
<?php function global_function_example($str) { return 'A Global Function with '. $str; }
-
на
composer.json
внутри добавить следующую строку:"files": ["app/Helpers/functions.php"]
Для Laravel 5:
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\": "app/"
},
"files": ["app/Helpers/functions.php"]
},
- выполнить
composer dump-autoload
поздравляем! Теперь вы можете получить доступ global_function_example('hello world')
форма любой части вашего приложения, включая Blade views.
Я надеюсь, что это полезно для кого-то!
Laravel global helpers
часто вы обнаружите, что вам нужна функция утилиты, которая имеет глобальный доступ ко всему приложению. Заимствование из того, как laravel пишет своих помощников по умолчанию, вы можете расширить возможности с помощью своих пользовательских функций.
создать помощника , а не класс
я предпочитаю вам файл, а не класс, так как я не хочу беспокоиться о пространствах имен, и я хочу, чтобы его функции были доступно без префиксов класса, таких как:greeting('Brian');
вместо Helper::greeting('Brian');
так же, как Ларавель делает со своими помощниками.
: app/Support/helper.php
зарегистрировать вспомогательный файл с Composer:composer.json
{
...
"autoload": {
"classmap": [
"database"
],
"files": [
"app/Support/helpers.php"
],
"psr-4": {
"App\": "app/"
}
},
...
}
создайте свою первую вспомогательную функцию
<?php
if (!function_exists('greet')) {
/**
* Greeting a person
*
* @param string $person Name
* @return string
*/
function greet($person)
{
return 'Hello ' . $person;
}
}
использование:
помнишь для загрузки файла, прежде чем пытаться получить доступ к его функциям:
composer dump-autoload
давайте протестируем с Тинкер
$ php artisan tinker
Psy Shell v0.8.17 (PHP 7.0.6 ΓÇö cli) by Justin Hileman
>>> greet('Brian');
=> "Hello Brian"
>>> exit
Exit: Goodbye.
С лопатки
<p>{{ greet('Brian') }}</p>
дополнительно использование в качестве директивы лезвия:
раз вы обнаружите, что хотите использовать директиву blade вместо простой функции.
Зарегистрируйте директиву Blade в методе загрузки AppServiceProvider:app/Providers/AppServiceProvider.php
public function boot()
{
// ...
Blade::directive('greet', function ($expression) {
return "<?php echo greet({$expression}); ?>";
});
}
использование:
<p>@greet('Brian')</p>
Примечание: возможно, Вам потребуется очистить кэш просмотр
php artisan view:clear