Каковы лучшие практики и лучшие места для помощников laravel 4 или основных функций?
поэтому я пытаюсь понять лучшее место для размещения глобальной функции в laravel 4. Например: форматирование даты. Я не думаю, что делать фасад стоит, фасады слишком модульные. Я читал статьи о создании папки библиотеки и сохранении классов там, но это также кажется много для простой функции. Кроме того, разве такой "инструмент" не должен быть доступен в шаблонах лезвий?
каковы лучшие практики для этого? И как сделать его доступным для шаблоны лезвий?
4 ответов
уродливый, ленивый и ужасный способ: в конце bootstrap/start.php
добавить include('tools.php')
и поместите свою функцию в этот новый файл.
чистый способ: создайте библиотеку. Таким образом, он будет загружаться только тогда, когда вы его используете.
- создать внутри
app
папку - создайте файл библиотеки, создайте в нем класс и добавьте к нему статические функции
-
1: Edit
start/global.php
добавитьapp_path().'/libraries'
кClassLoader::addDirectories(
массив. -
2: Edit
composer.json
добавить"app/libraries"
доautoload
массив. Запуститьcomposer dump-autoload
- вызовите свой класс и статические функции из ваших представлений.
о ваших вариантах, процитированных из
в дополнение к использованию Composer вы можете использовать загрузчик классов Laravel для загрузите контроллеры и модели. Это полезно для держать все ваши классы в пространстве имен " global без обновления композитора.
вы можете объединить оба варианта, где загрузчик классов Laravel будет автоматически искать классы в зарегистрированных каталогах (1, проще) и Composer будет вести учет всех классов, но только после его обновления (2, может улучшить производительность).
мой способ сделать это-создать новую папку в папке /app
каталог в корне вашего проекта Laravel 4. Затем добавьте эту папку в первый массив /app/start/global.php
файл вот так:
<?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.
));
до тех пор, пока структура папок в новом /app/classes
папка следует за вашим соглашением о пространстве имен. Laravel 4 автоматически загрузит все классы / файлы в этой папке. Таким образом, нет необходимости копаться в любых файлах композитора или запускать команду composer.
не уверен если это лучшая практика, но она, безусловно, работает.
если вы создали простой файл под названием /app/classes/Helpers/Helper.php
например:
<?php namespace Helpers;
class Helper {
public static function helloWorld()
{
return 'Hello World';
}
}
все, что вам нужно сделать, это позвонить Helpers\Helper::helloWorld();
вы также можете псевдоним этот вспомогательный класс в вашем . Просто добавьте что-то вроде этого в конец aliases
время:
'Helper' => 'Helpers\Helper'
фреймворк Laravel по.метод php заключается в добавлении его в ваши "файлы" в composer.json (https://github.com/laravel/framework/blob/master/composer.json):
"autoload": {
"classmap": [
...
],
"files": [
"app/libraries/helpers.php"
],
},
то, что я делаю, это создавать небольшие классы (несколько методов на класс, одна строка на метод, все расширено от чего-то и сухого, это моя цель),
class ExtendedCarbon extends Carbon\Carbon {
public function formatDDMMAAAA($date)
{
/// format and return
}
}
сохраните их в приложении/библиотеках и добавьте в composer.в JSON:
"autoload": {
"classmap": [
...
"app/libraries",
...
],
},
выполнить
composer dump
а затем просто использовать их там, где вам нужно
$formatted = (new ExtendedCarbon)->formatDDMMAAAA($date);
смотрите это видео о рефакторинге:http://www.youtube.com/watch?v=DC-pQPq0acs
кстати, я уверен, что это был просто пример, но вам может не понадобиться помощник для форматирования дат, так как все даты в Laravel являются экземплярами углерода (https://github.com/briannesbitt/Carbon) и он имеет множество методов для форматирования даты и времени.
вы также можете использовать View::share()
вместе с закрытиями для достижения этого - я только что опубликовал об этом:http://www.develophp.org/2014/07/laravel-4-blade-helper-functions/
добавлено преимущество: вам не нужно создавать дополнительный класс, а также поддерживать глобальное пространство имен чистым.