Каковы лучшие практики и лучшие места для помощников 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/

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