...

четверг, 19 июня 2014 г.

[Из песочницы] Создание собственных компонентов в 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 — это просто.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


1 комментарий: