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

от автора

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 — это просто.

ссылка на оригинал статьи http://habrahabr.ru/post/226785/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *