Yii2 aliaset псевдонимы путей
  • 1338

Yii2 алиасы путей и url. Как использовать.

Автор: admin | 04 декабря (Вт.) 2018г. в 22ч.20м.

Для чего нужны алиасы в yii2.

Алиасы - это псевдонимы для путей в файловой системе или url адресов. С помощью алиасов можно задать псевдоним для путей к папкам или файлам, которые применяются в приложении. Например, если на сайте есть форма для загрузки картинки, то удобно для папки, куда будет сохраняться изображение назначить алиас и указывать его в качестве пути для сохранения, а для вывода картинки на экран использовать другой алиас в виде src пути к загруженному изображению. Благодаря алиасам можно вместа длинных путей прописать короткий псевдоним, при этом не опасаясь допустить ошибку в пути. 

Создание алиасов.

Алиас - это строка. Любой алиас следует начинать с символа @ . Далее идет осмысленное имя псевдонима. Если алиас состоит из нескольких слов, то я для именования алиасов пользуюсь стилем camel case, т.е. так: @myAliasToPath.
Для создания алиасов и доступа к данным, которые хранят алиасы в yii2 существует два метода: Yii::setAlias($alias, $path)  и Yii::getAlias($alias)
Yii::setAlias('@imgPath', '@frontend/web/img/');
Yii::setAlias('@imgSrcDir', '/img/');
Yii::getAlias('@imgPath');  // выведет: /path/to/frontend/img/
Yii::getAlias('@imgSrcDir');   // выведет: site.com/img/​
В данном примере мы установили два алиаса и затем получили их значения.
Обратите внимание, что для того, чтобы создать алиас , можно использовать другой алиас, который потом также будет преобразован в путь.  

Где устанавливать алиасы.


Алиасы можно установить в любом месте программы, там, где это будет необходимо. Однако обычно алиасы должны быть установлены как можно раньше в стеке работы программы, чтобы они были доступны для вызова в контроллерах, файлах видов и прочих местах программы. Для этих целей алиасы можно определить в конфигурационном файле программы в файле config/main.php или config/web.php.

Установка алиасов в конфиге приложения.

$conf =  [
    'aliases' => require(__DIR__ . '/aliases.php'),//подключаем файл с алиасами
    'name' => 'Сайт',
    'vendorPath' => dirname(dirname(__DIR__)) . '/vendor',
....​
aliases.php:
<?php
use \yii\web\Request;

$baseUrl = str_replace(['/frontend/web', '/backend/web'], '', (new Request)->getBaseUrl());

return [
    '@bower'    => '@vendor/bower-asset',
    '@npm'      => '@vendor/npm-asset',
    '@imgPath'  => '@frontend/web/img/',
    '@imgSrcDir'=> $baseUrl . '/img/',
    
   ];

Таким образом были установлены алиасы в конфигурации, которые будут инициализированы на начальном этапе работы приложения. Для url адресов полезно иметь базовый путь сайта, который будет фигурировать во всех псевдонимах url. В данном примере я получил базовый урл для advanced шаблона yii2. 

Установка алиасов в index.php

Также алиасы можно подключить прямо в точке входа - web/index.php. В данном случае алиасы будут зарегестрированы еще раньше, чем в конфигурационном файле приложения. Вот так это сделано в advanced шаблоне:
<?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'
);

(new yii\web\Application($config))->run();​
Вот содержимое файла с алиасами bootstrap.php:
<?php
Yii::setAlias('@common', dirname(__DIR__));
Yii::setAlias('@frontend', dirname(dirname(__DIR__)) . '/frontend');
Yii::setAlias('@backend', dirname(dirname(__DIR__)) . '/backend');
Yii::setAlias('@console', dirname(dirname(__DIR__)) . '/console');​
Именно тут созданы алиасы путей для разделов файловой структуры шаблона. Тут же мы можем назначить и свой алиас. Например для папки модулей.
Yii::setAlias('@modules', dirname(dirname(__DIR__)) . '/modules');​

Установка алиасов в файле начальной загрузки.

Еще один способ установки алиасов в момент начальной загрузки приложения и обработки настроек приложения. В данном случае используется механизм bootstrapping yii2. Так в файле конфигурации:
$conf =  [
    'aliases' => require(__DIR__ . '/aliases.php'),//подключаем файл с алиасами
    'name' => 'Сайт',
    'vendorPath' => dirname(dirname(__DIR__)) . '/vendor',

    //Регистрируем файл предзагрузки, где будем назначать алиасы
    'bootstrap' => [
        'frontend\bootstrap\SetAliases',
        
     ],​

В SetAliases.php :

<?php
namespace frontend\bootstrap;

use yii;
use yii\base\BootstrapInterface;
use yii\base\ErrorHandler;
use yii\di\Container;


class SetAliases implements BootstrapInterface{
    
    public function bootstrap($app){
        
        Yii::setAlias('@imgPath', '@frontend/web/img/');
        Yii::setAlias('@imgSrcDir', '/img/');
        
    }
    
}

Установка алиасов в любом месте:

Yii::setAlias('@imgPath', '@frontend/web/img/');
Yii::setAlias('@imgSrcDir', '/img/');​

P.S.

Алиасы - это лишь псевдонимы путей. При установке алиаса с помощью Yii::setAlias() в методе не проверяется существование пути.

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

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

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