Каковы лучшие практики и лучшие места для помощников 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- вызовите класс и статические функции из ваших представлений.
о ваших вариантах, процитированных из
global.phpfileв дополнение к использованию Composer, вы можете использовать загрузчик класса Laravel для загрузите контроллеры и модели. Это полезно для хранения всех ваши классы в" глобальном " пространстве имен без обновления композитора.
вы можете объединить оба варианта, где загрузчик классов Laravel будет автоматически искать классы в зарегистрированных каталогах (1, проще) и композитор будет вести учет всех классов, но только после его обновления (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 или запускать команду 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/дополнительное преимущество: вам не нужно создавать дополнительный класс, а также поддерживать глобальное пространство имен в чистоте.
Comments