Каковы лучшие практики и лучшие места для помощников laravel 4 или основных функций?

Итак, я пытаюсь понять лучшее место для размещения глобальной функции в laravel 4. Например: форматирование даты. Я не думаю, что сделать фасад стоит того, фасады слишком модульные. Я читал статьи о создании папки библиотеки и хранении там классов, но это также очень похоже на простую функцию. Кроме того, не должен ли такой инструмент быть доступен в шаблонах клинков?

Каковы лучшие практики для чего-то подобного? И как сделать его доступным для шаблонов клинков?

Ответ 1

Уродливый, ленивый и ужасный способ: в конце bootstrap/start.php добавьте include('tools.php') и поместите свою функцию в этот новый файл.

Чистый способ: создать библиотеку. Таким образом, он будет автоматически загружаться, когда вы его используете.

  • Создайте папку libraries внутри папки app
  • Создайте свой файл библиотеки, создайте в нем класс и добавьте к нему статические функции.
  • Вариант 1: Изменить start/global.php, чтобы добавить app_path().'/libraries' в массив ClassLoader::addDirectories(.
  • Вариант 2: Изменить composer.json, чтобы добавить "app/libraries" в массив autoload. Запустите composer dump-autoload
  • Вызовите свой класс и статические функции из своих представлений.

О ваших параметрах, указанных в файле global.php

В дополнение к использованию Composer вы можете использовать загрузчик классов Laravel для загрузите контроллеры и модели. Это полезно для сохранения всех ваши классы в "глобальном" пространстве имен без обновления Composer.

Вы можете комбинировать обе опции, где загрузчик классов Laravel будет автоматически искать классы в зарегистрированных каталогах (вариант 1, проще), а композитор будет вести запись обо всех классах, но только после его обновления (вариант 2 может улучшить производительность).

Ответ 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 будет автоматически загружать все классы/файлы в этой папке. Таким образом, нет необходимости копаться в каких-либо композиционных файлах или выполнять команду композитора.

Не уверен, что это лучшая практика, но она, безусловно, работает.

Если вы создали простой файл с именем /app/classes/Helpers/Helper.php, например:

<?php namespace Helpers;

class Helper {

    public static function helloWorld()
    {
        return 'Hello World';
    }
}

Все, что вам нужно сделать, это позвонить Helpers\Helper::helloWorld();

Вы также можете использовать этот вспомогательный класс в своем /app/config/app.php файле. Просто добавьте что-то вроде этого в конец массива aliases:

'Helper'          => 'Helpers\Helper'

Ответ 3

Laravel helpers.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 являются экземплярами Carbon (https://github.com/briannesbitt/Carbon), и он имеет множество методов для форматирования даты и времени.

Ответ 4

Вы также можете использовать View::share() вместе с закрытием для этого - я просто разместил об этом: http://www.develophp.org/2014/07/laravel-4-blade-helper-functions/

Добавленное преимущество: вам не нужно создавать дополнительный класс, а также содержать глобальное пространство имен в чистоте.