Używanie rozszerzeń zwykle obejmuje następujące trzy kroki:
extensions/xyz
będącego podkatalogiem
głównego folderu aplikacji,
gdzie xyz
jest nazwą rozszerzenia.Każde rozszerzenie posiada nazwę, która jednoznacznie identyfikuje ją spośród
wszystkich rozszerzeń. Biorąc pod uwagę rozszerzenie nazwane xyz
, możemy zawsze
użyć aliasu ścieżki ext.xyz
by zlokalizować jego główny katalog,
który zawiera wszystkie pliki z xyz
.
Różne rozszerzenia posiadają różne wymagania dotyczące importowania, konfiguracji oraz użycia. W dalszej części, podsumujemy najczęściej używane scenariusze dotyczące rozszerzeń, zgodnie z kategoriami opisanymi w przeglądzie.
Aby używać komponentu aplikacji
musimy najpierw zmienić konfigurację aplikacji
poprzez dodawanie nowego wpisu do jej właściwości components
, w następujący sposób:
return array(
// 'preload'=>array('xyz',...),
'components'=>array(
'xyz'=>array(
'class'=>'ext.xyz.XyzClass',
'property1'=>'value1',
'property2'=>'value2',
),
// pozostałe konfiguracje komponentów
),
);
Następnie możemy uzyskać dostęp do komponentu w każdym miejscu używając Yii::app()->xyz
.
Komponent zostanie leniwie stworzony (to znaczy, będzie utworzony wtedy gdy zażądamy
dostępu do niego po raz pierwszy) chyba, że wpiszemy go do właściwości preload
.
Zachowanie może być używane w różnego rodzaju komponentach. Jego użycie obejmuje dwa kroki. W Pierwszym kroku zachowanie jest dołączane do komponentu docelowego. W drugim kroku metoda zachowania wywoływana jest poprzez komponent docelowy. Na przykład:
// $name jednoznacznie identyfikuje zachowanie w komponencie
$component->attachBehavior($name,$behavior);
// test() jest metodą zachowanie $behavior
$component->test();
Częściej zachowanie jest dołączane do komponentu w sposób configurowalny zamiast wywoływania
metody attachBehavior
. Na przykład aby dołączyć zachowanie do
komponentu aplikacji, powinniśmy
użyć następującej konfiguracji aplikacji:
return array(
'components'=>array(
'db'=>array(
'class'=>'CDbConnection',
'behaviors'=>array(
'xyz'=>array(
'class'=>'ext.xyz.XyzBehavior',
'property1'=>'value1',
'property2'=>'value2',
),
),
),
//....
),
);
Powyższy kod załącza zachowanie xyz
do komponentu aplikacji db
. Możemy tak
zrobić ze wzdlędu na to, że CApplicationComponent definiuje właściwość o nazwie behaviors
.
Poprzez przypisanie tej właściwości listy zawierającej konfigurację zachowań, komponent
dołączy odpowiednie zachowanie w momencie inicjalizacji komponentu.
Dla klas CController, CFormModel oraz CActiveModel, które zazwyczaj są rozszerzane
dołączanie zachowań odbywa się poprzez nadpisanie ich metody behaviors()
. Na przykład:
public function behaviors()
{
return array(
'xyz'=>array(
'class'=>'ext.xyz.XyzBehavior',
'property1'=>'value1',
'property2'=>'value2',
),
);
}
Widżety są głownie używane w widokach.
Biorąc pod uwagę widżet klasy XyzClass
należący do rozszerzenia xyz
, możemy go używać
w następujący sposób,
// widżet który nie potrzebuje zawartości $this->widget('ext.xyz.XyzClass', array( 'property1'=>'value1', 'property2'=>'value2')); // widżet, który posiada zawartość $this->beginWidget('ext.xyz.XyzClass', array( 'property1'=>'value1', 'property2'=>'value2')); ...zawartość widżetu... $this->endWidget();
Akcje są używane przez kontroler
aby odpowiadać na konkretne żądania użytkownika. Biorąc pod uwagę klasę akcji XyzClass
należącą do rozszerzenia
xyz
, możemy ją używać poprzez nadpisanie metody CController::actions w klasie naszego
kontrolera:
class TestController extends CController
{
public function actions()
{
return array(
'xyz'=>array(
'class'=>'ext.xyz.XyzClass',
'property1'=>'value1',
'property2'=>'value2',
),
// other actions
);
}
}
Następnie, możemy uzyskać dostęp do akcji poprzez trasę
test/xyz
.
Filtry są również używane w kontrolerze.
Przetwarzają głównie żądania użytkownika na początku (ang. pre) i na końcu (ang. post), kiedy
jest ono obsługiwane przez akcje.
Biorąc pod uwagę klasę XyzClass
należącą do rozszerzenie xyz
, możemy jej użyć
poprzez nadpisanie metody CController::filters w klasie naszego kontrolera:
class TestController extends CController
{
public function filters()
{
return array(
array(
'ext.xyz.XyzClass',
'property1'=>'value1',
'property2'=>'value2',
),
// pozostałe filtry
);
}
}
Powyżej, możemy użyć operatorów dodawania i odejmowania w pierwszym elemencie tablicy, aby zastosować filtr tylko do pewnych akcji. Aby uzyskać więcej szczegółów, zobacz dokumentację klasy kontrolera CController.
Kontroler dostarcza zbioru akcji, które mogą być żądane przez użytkowników. W celu użycia rozszerzenia kontrolera, potrzebujemy skonfigurować właściwość CWebApplication::controllerMap w konfiguracji aplikacji:
return array(
'controllerMap'=>array(
'xyz'=>array(
'class'=>'ext.xyz.XyzClass',
'property1'=>'value1',
'property2'=>'value2',
),
// other controllers
),
);
Następnie możemy uzyskać dostęp do akcji a
w kontrolerze za pomocą
trasy xyz/a
.
Walidator jest głównie stosowany w klasie modelu
(które rozszerzają zarówno CFormModel jak i CActiveRecord).
Biorąc pod uwagę klasę walidatora XyzClass
należącego do rozszerzenia xyz
,
możemy użyć go poprzez nadpisanie metody CModel::rules w klasie naszego modelu:
class MyModel extends CActiveRecord // lub CFormModel
{
public function rules()
{
return array(
array(
'attr1, attr2',
'ext.xyz.XyzClass',
'property1'=>'value1',
'property2'=>'value2',
),
// pozostałe reguły walidacji
);
}
}
Rozszerzenie konsoli poleceń zazwyczaj wyposaża narzędzie
yiic
w dodatkowe polecenie. Biorąc pod uwagę polecenie konsoli XyzClass
należące do rozszerzenia xyz
, możemy użyć go poprzez skonfigurowanie konfiguracji
dla aplikacji konsolowej:
return array(
'commandMap'=>array(
'xyz'=>array(
'class'=>'ext.xyz.XyzClass',
'property1'=>'value1',
'property2'=>'value2',
),
// pozostałe polecenia
),
);
Teraz możemy użyć narzędzia yiic
wyposażonego w dodatkowe polecenie xyz
.
Uwaga: Aplikacja konsolowa zazwyczaj używa pliku konfiguracyjnego, który różni się od tego używanego w aplikacji sieciowej. Jeśli aplikacja została utworzona przy użyciu polecenia
yiic webapp
, wtedy plikiem konfiguracji dla aplikacji konsolowejprotected/yiic
jestprotected/config/console.php
, natomiast plikiem konfiguracyjnym aplikacji sieciowej jestprotected/config/main.php
.
Proszę zobacz sekcję dotyczącą modułów aby zobaczyć jak używać modułów.
Aby używać generycznych komponentów, najpierw musimy dołączyć ich plik klasy używając
Yii::import('ext.xyz.XyzClass');
Następnie, możemy utworzyć instancję tej klasy, skonfigurować jej właściwości oraz zawołać jej metody. Możemy również rozszerzyć go do tworzenia nowych klas potomnych.
Signup or Login in order to comment.