×

Создание собственных helper функций PHP в проекте на Laravel

Создание собственных helper функций PHP в проекте на Laravel

Laravel предлагает много готовых вспомогательных функций хелперов. Заглянув в документацию Laravel мы увидим функции на все случаи жизни: для работы с объектами и массивами, строками, путями к файлам, маршрутами и  т.д. К примеру часто используемая функция dd() так же является хелпером.

Также, мы можем создавать свои вспомогательные функции хелперы, для приложений Laravel, с использованием Composer для их автоматического импорта.

Давайте рассмотрим, как создать свои собственные вспомогательные функции хелперы, которые автоматически загружаются Laravel, и доступны во всем приложении.

Создание файла для функций в приложении Laravel

Для начала создадим директорию, папку Helpers, где в файле: helpers.php будут находится наши функции хелперы. На Ваше усмотрение, этот файл может располагаться где угодно, в корне проекта, или к примеру в папке App. Я предпочитаю следующий путь:

app/Helpers/helpers.php

Автозагрузка функций хелперов

Чтобы использовать созданные нами вспомогательные PHP функции – хелперы, сделать их доступными, нам необходимо загрузить их во время выполнения PHP. Это можно сделать несколькими способами, но наиболее удобным будет сделать это с помощью Composer, прописав путь к файлу helpers.php в область "autoload-dev" файле composer.json:

В новом, установленном проекте Laravel в composer.json, мы увидим autoload и autoload-dev:

"autoload": {
    "classmap": [
        "database/seeds",
        "database/factories"
    ],
    "psr-4": {
        "App\\": "app/"
    }
},
"autoload-dev": {
    "psr-4": {
        "Tests\\": "tests/"
    }
},

Для того, чтобы добавить свой файл с функциями помощниками, у composer есть ключ files (представляет собой массив путей к файлам), который определим в "autoload-dev":

"autoload": {
    "files": [
        "app/Http/Helpers/helpers.php"
    ],
    "classmap": [
        "database/seeds",
        "database/factories"
    ],
    "psr-4": {
        "App\\": "app/"
    }
},

После чего перезапустим автозагрузчик composer:

composer dump-autoload

Теперь созданные нами дополнительные функции помощники будут доступны.

Определение функций хелперов

Определение функций в вашем классе помощников - это простая задача, но есть нюансы. В целях избегания возможных проблем и коллизий, вызванных случайным переопределением существующих функций, целесообразно сделать проверку на их существование, точнее существование функций с аналогичным названием.

if (! function_exists('myFunc')) {
    function myFunc($arg) {
        // ...
    }
}

Конечно, это не обязательно, если Вы уверены, что каждый раз для вновь созданных функций Вы, или кто либо другой работающий с Вашим приложением, будете использовать уникальное название. Хотя вероятность совпадения названий функций не большая, но все таки, для полного исключения возможных проблем, стоит воспользоваться данной проверкой.

Так же, для возможного исключения совпадения имен, можно использовать префикс при наименовании функций, для примера: halper_getAnswer().

Примеры функций хелперов

Для примера, приведу несколько простых функций помощников. Вот к примеру функция для получения строки из двух случайных цифр от 0 до 9.

if (! function_exists('getfolderName')) {
    function getfolderName(){
    return substr(str_shuffle("01234567890123456789"), 0, 2);
    }
}

Данная функция используется для создания имен папок при загрузке файлов и равномерного их распределения. Не комильфо, когда все файлы, например картинки, и находятся в одной единственной папке. Это не проблема если их не много, а если десятки тысяч, это может существенно замедлить работу сервера. Целесообразней распределить файлы в подпапках: /images/00/file.jpg, /images/01/file.jpg, /images/02/file.jpg и т.д. Именно для создания данных подпапок, при формировании путей загружаемых файлов используется данная функция.

Для примера другая функция хелпер, используемая для удаления ссылок из HTML кода, при парсинге контента.

if (! function_exists('removeLink')) {
    function removeLink($str){
        $regex = '//isU';
        preg_match_all($regex,$str,$result);
        foreach($result[0] as $rs)
        {
            $regex = '/(.*)<\/a>/isU';
            $text = preg_replace($regex,'$2',$rs);
            $str = str_replace($rs,$text,$str);
        }
        return $str;
    }
}

Данная функция возвращает HTML код с удаленными ссылками, тегами A с атрибутами.

Таким образом мы сможем определить недостающие нам функции хелперы и использовать их при необходимости.

Автор: Максим Волков

Комментарии