Создание собственных компонентов в Yii

в 10:55, , рубрики: php, yii, yii framework, Веб-разработка, метки: ,

Yii framework имеет такую хорошую штуку как компонента. Компоненты в yii позволяют получить доступ к определенным библиотекам/классам в любом месте приложения. Для того, чтобы обратиться к какой-то компоненте нужно написать: Yii::app()->componentName.

Зачем нужны эти компоненты, если можно просто подключить нужный тебе класс и воспользоваться им? Ответ очень прост. Рассмотрим реальный пример: есть у вас проект, в котором нужно использовать GoogleApi. Неважно что это будет за API: карта, почта, контакты, авторизация. Почти для всего API от Google, нужно создавать свое приложение, а также использовать ключи доступа для работы с API(secret key, appId). К примеру, вам нужно использовать API клиент в разных местах вашего приложения. В таком случае в тех контроллерах/экшенах, где требуется доступ к API можно подключить класс для работы с API вписать туда доступы и все. Но, есть одна проблема — с ростом количества мест, где нужно использовать API также растет количество подключений. Это не удобно, если у вас поменяются доступы к API, то нужно будет каждый раз во всех местах менять параметры доступа.

Yii framework предлагает другой способ, который является очень гибким и удобным для работы со внешними классами/библиотеками. Сама идея: в файле protected/config/main.php есть секция components. Эта секция как раз и нужна для вот таких случаев. Рассмотрим пример подключения GoogleApi Client в качестве компоненты yii framework.

Шаг №1

На первом шаге создания собственной компоненты нам нужно создать базовый класс. Этот класс должен быть унаследован от CApplicationComponent. В папке protected/extensions создаем папку googleApiClient. В этой папке создаем класс GoogleApiComponent.

Исходных код класса GoogleApiComponent

<?php
class GoogleApiComponent extends CApplicationComponent
{
     public $property1;
     public $property2;
     public function init()
     {
          //пишем свой код для инициализации компоненты.
          parent::init();
     }
     public function testMethod()
     {
          print 'this is a testMethod of GoogleApiComponent';
     }      
}

Пройдемся по основным аспектам этого кода.

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

— $property1, $property2 — это публичные свойства этой компоненты. Все публичные свойства могут быть заданы через файл protected/config/main.php (см. Шаг №2)

В общем, класс компоненты ничем не отличается от обычного класса, за исключением вышеописанных особенностей.

Шаг №2

На втором этапе создания компоненты нужно ее подключить и правильно настроить в базовом конфиге yii framework. В файле protected/config/main.php нужно найти секцию components. В эту секцию нужно добавить еще один элемент:

'googleApi' =>array(
    'class' => 'application.extensions.googleApiClient.GoogleApiComponent',
    'property1=>'this is a default value for the property1',
    'property2' =>'this is a default value for the property2'
)

Пройдемся кратко по вышенаписанному коду подключения компоненты. Самая главная часть — это установка значения для ключа class. Этот ключ используется для указания файла, в котором находится нужная компонента. Ключи property1, property2 являются теми самыми публичными свойствами компоненты, которые описаны в Шаге №1. Таких свойств может быть неограниченного количество, главное определить эти свойства в классе компоненты и установить им уровень доступа public.

Как видно, для использования компоненты, достаточно выполнить 2 шага. Теперь можно спокойно пользоваться нашей компонентой. Для вызова нашего класса нужно написать:

Yii::app()->googleApi //этот вызов вернет нам созданный экземпляр класса GoogleApiComponent с уже выполненным методом init.

Yii::app()->googleApi->testMethod() //вызов методов компоненты

Yii::app()->googleApi->property1 //вызов публичных свойств компоненты
Подсказки

1) Все собственные компоненты стоит хранить в папке protected/components только в том случае, если эти компоненты не требуют дополнительных классов. Например, классы хелперы, парсеры и тд. Если для работы компоненты требуются сторонние библиотеки, то следует хранить класс компоненты вместе с этими библиотеками в одной папке внутри protected/extensions. Это достаточно удобно, когда у вас компонента и все дополнительные классы хранятся в одном месте.

2) Для указания пути к классу компоненты в файле main.php (который описан в Шаге №2) нужно использовать alias пути к файлу. Например: application.extension.componentFolder.componentClass

3) Чтобы воспользоваться дополнительными классами, библиотеками, внутри класса компоненты, можно в самом начале файла сделать импорт нужных файлов: Yii::import('path to additional libraries, classes');

Вот и все. Этой информации достаточно для создания своих компонент в yii framework для целей и задач любого рода. Yii — это просто.

Автор: adombrovsky

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js