Как добавить свой хелпер в Laravel 4 и 5

В своем учебном проекте на 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

Вот теперь все заработало!

Ссылка на основную публикацию