В своем учебном проекте на Laravel 4 я захотел создать класс-хелпер для работы с глобальными настройками. Согласитесь, править руками шаблоны сайта чтобы поменять телефон или email довольно глупо. Проще загнать это в какой-нибудь конфигурационный файл или таблицу и централизованно править в админке.
Теоретически, в каждом фреймворке есть своя автозагрузка классов. В Кохане есть такая четкая автозагрузка, но для этого нужно четко прописывать имя класса, что бы автозагрузчик понял нотацию. В Laravel по документам такого загрузчика вроде как нет, а вроде и есть по отзывам на форумах.
Такая неоднозначность идет еще и потому, что вышла в конце января ветка 5, которая имеет существенное различие во многих интересных вещах. Кто-то её нахваливает, кто-то не любит из-за резкого усложнения и навязывания некоторых практик, которые народ не освоил / не любит. Тема холиварная, но, тем не менее, именно из-за этого получается «не все так однозначно».
Поэтому делюсь своими изысканиями.
Laravel 4.х
В ветке 4 фреймворка Laravel автозагрузки классов в понимании Kohana нет. От слова совсем.
Именно по этому в сети множество бредовых и не очень руководств, как подключить свой хелпер к проекту Laravel. Мне встречались советы в файл start.php в папке bootstrap включать свои хелперы через функцию require_once(). Мысль правильная, но приходится руками подключать каждый файл, а это как-то не слишком вдохновляет.
Зато есть автозагрузка классов из некоторых папок через автозагрузчика, который автоматом создает composer.
Один человек в сети советовал залезть и руками поправить файлы загрузки в папке vendoe/composer чтобы там добавить в автозагрузку свои хелперы. Вот только он не учел одного: при подключении пакета или его удаления/обновления меняется автозагрузчик и все ваши правки будут потеряны.
Laravel 5.х
В этой ветке автозагрузчик классов тоже отсутствует. Однако Laravel 5 работает согласно стандарту PSR-4 и автозагрузку классов прописывает composer. Причем реализовано это так, что в папке App все классы автоматом подключаются в автозагрузку. Именно поэтому в сети столько противоречащей информации.
Реализовано эта магия через пару строчек в composer.json:
"autoload": { "classmap": [ "database" ], "psr-4": { "App\\": "app/" } },
Вот это я и взял на вооружение.
Автозагрузка хелперов в Laravel 4
Я просто создал папку Libs, куда засунул свой файл с классом настроек. Чтобы не мудрить, я сделал класс с одной проверочной функцией, которая публичная и статическая. А делала оно только вывод через echo текста-заглушки. В роутах создал проверочный роут-замыкание, где вызывал проверочный метод класса. Без подключения выкидывало ошибку.
Теперь в файле composer.json я добавил свою папку:
"autoload": { "classmap": [ "app/commands", "app/controllers", "app/models", "app/database/migrations", "app/database/seeds", "app/tests/TestCase.php" ], "psr-4": { "Lib\\": "app/lib/" } },
И просто перегенерировал автолоад компосером:
composer dump-autoload
Вот теперь все заработало!