Создание глобальных функций в yii2
  • 742

Глобальные функции в yii2.

Автор: admin | 07 мая (Пн.) 2018г. в 13ч.07м.

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

Как это сделать.


Прежде всего, создайте файл, который будет содержать функции.
Пусть это будет global_functions.php прямо в корне приложения. Для того, чтобы его использовать,
его нужно подключить. Лучшее место для этого точка входа - index.php:
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');

require __DIR__ . '/../../vendor/autoload.php';
require __DIR__ . '/../../vendor/yiisoft/yii2/Yii.php';
require __DIR__ . '/../../common/config/bootstrap.php';
require __DIR__ . '/../config/bootstrap.php';

$config = yii\helpers\ArrayHelper::merge(
    require __DIR__ . '/../../common/config/main.php',
    require __DIR__ . '/../../common/config/main-local.php',
    require __DIR__ . '/../config/main.php',
    require __DIR__ . '/../config/main-local.php'
);

$app = new yii\web\Application($config);
require(__DIR__ . '/../global_functions.php');
$app->run();​

Обратите внимание, что мы подключаем require(__DIR__ . '/../global_functions.php')
после создания экземпляра приложения, но перед вызовом метода run().
Это позволяет использовать конфигурацию и приложение, которое необходимо для
многих функций.

Также вы можете сделать это в composer.json так:
"autoload": {
    "files": [
        "global_functions.php"
    ]
},​
После этих изменений нужно обновить пакеты composer update.

Содержимое файла global_functions.php.

В данном файле может быть что угодно. Вот некоторые примеры исключительно для демонстрации.
use yii\helpers\Url;
use yii\helpers\Html;
use yii\helpers\HtmlPurifier;
use yii\helpers\ArrayHelper;

function url($url = '', $scheme = false)
{
    return Url::to($url, $scheme);
}

function he($text)
{
    return Html::encode($text);
}

function ph($text)
{
    return HtmlPurifier::process($text);
}


function param($name, $default = null)
{
    return ArrayHelper::getValue(Yii::$app->params, $name, $default);
}

function getUserIP()
{
    if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
        $ip = $_SERVER['HTTP_CLIENT_IP'];
    } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    } else {
        $ip = $_SERVER['REMOTE_ADDR'];
    }
    return $ip;
}
​

Приветствую!

Меня зовут Сергей. Я - автор этого блога.

Если Вам был полезен материал на моем сайте, поддержите пожалуйста мой проект, чтобы о нем узнали другие люди - кликните plizz :) на иконку в соц. сети, чтобы поделиться материалом с другими.