Основные понятия

Компонент и объект

Классы Yii обычно наследуются от одного из двух базовых классов yii\base\Object или yii\base\Component. Эти классы предоставляют полезный функционал, который автоматически добавляется во все классы, наследуемые от них.

Класс Object предоставляет функционал конфигурации и свойств. Класс Component наследуется от класса Object и добавляет обработку событий и поведения.

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

Конфигурация объекта

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

class MyClass extends \yii\base\Object
{
    public function __construct($param1, $param2, $config = [])
    {
        // ... инициализация до применения конфигурации
        parent::__construct($config);
    }
 
    public function init()
    {
        parent::init();
        // ... инициализация после применения конфигурации
    }
}

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

Следуя этому определению, Вы сможете создать и настроить новый объект с помощью массива конфигурации, следующим образом:

$object = Yii::createObject([
    'class' => 'MyClass',
    'property1' => 'abc',
    'property2' => 'cde',
], [$param1, $param2]);

Псевдонимы пути

Yii 2.0 расширяет использование псевдонимов пути как для файлов и каталогов, так и для URL-адресов. Псевдоним должен начинаться с символа @, чтобы его можно было отличить от пути файла/каталога и URL-адреса. Например, псевдоним @yii соответствует каталогу установки Yii. Псевдонимы пути используются во многих местах кода Yii. Например, FileCache::cachePath может принимать в качестве параметра как псевдоним пути, так и нормальный путь к каталогу.

Псевдонимы пути тесно связаны с пространствами имен классов. Рекомендуется, чтобы псевдонимы пути были определены для каждого базового пространства имен, таким образом загрузчик классов Yii может использоваться без дополнительной настройки. Например, благодаря тому, что @yii соответствует каталогу установки Yii, класс yii\web\Request может быть автоматически загружен Yii. Если вы используете сторонние библиотеки, такие как Zend Framework, вы можете определить псевдоним @Zend, который соответствует каталогу его расположения и Yii сможет автоматически загрузить любой класс этой библиотеки.

Следующие псевдонимы предопределены в ядре фреймворка:

  • @yii - каталог фреймворка.
  • @app - базовый путь текущего приложения.
  • @runtime - каталог runtime.
  • @vendor - каталог сторонних поставщиков Composer.
  • @webroot - корневой веб-каталог текущего приложения.
  • @web - базовый URL текущего приложения.

Автозагрузка

Все классы, интерфейсы и трейты загружаются автоматически во время их использования используются. Теперь не требуется использовать include или require. Это справедливо для пакетов загруженных через Composer а также для расширений Yii.

Автозагрузчик Yii работает в соответствии с PSR-4. Это означает, что пространства имен, классы, интерфейсы и трейты должны соответствовать путям файловой системы и именам файлов, за исключением корневого пространства имен путь, которого определяется псевдонимом.

Например, если стандартный псевдоним @app соответствует пути /var/www/example.com/, то класс \app\models\User будет загружен из файла /var/www/example.com/models/User.php.

Пользовательские псевдонимы могут быть добавлены, используя следующий код:

Yii::setAlias('@shared', realpath('~/src/shared'));

Дополнительные автозагрузчики могут быть зарегистрированы с помощью стандартного для PHP spl_autoload_register.

Вспомогательные классы

Вспомогательные классы обычно содержат только статические методы и используются следующим образом:

use \yii\helpers\Html;
echo Html::encode('Test > test');

Существует несколько классов предоставляемых фреймворком:

  • ArrayHelper
  • Console
  • FileHelper
  • Html
  • HtmlPurifier
  • Image
  • Inflector
  • Json
  • Markdown
  • Security
  • StringHelper
  • Url
  • VarDumper

Авторизация