mirror of
https://github.com/yiisoft/yii.git
synced 2026-03-12 11:06:54 +01:00
331 lines
9.0 KiB
Plaintext
331 lines
9.0 KiB
Plaintext
Verwenden von Erweiterungen
|
|
===========================
|
|
|
|
Um eine Erweiterung (engl.: Extension) einzusetzen, sind normalerweise
|
|
folgende Schritte erforderlich:
|
|
|
|
1. Erweiterung aus dem [Extension
|
|
repository](http://www.yiiframework.com/extensions/) von Yii herunterladen
|
|
2. Ins Unterverzeichnis `extensions/xyz` des
|
|
[Anwendungsverzeichnisses](/doc/guide/basics.application#application-base-directory)
|
|
entpacken, wobei `xyz` für den Namen der Erweiterung steht.
|
|
3. Importieren, Konfigurieren und Verwenden der Erweiterung
|
|
|
|
Jede Erweiterung hat einen eindeutigen Namen, um sie klar von anderen
|
|
Erweiterungen zu unterscheiden. Heißt eine Erweiterung `xyz`, kann
|
|
man über den Pfadalias `ext.xyz` von überallher auf Dateien dieser Erweiterung
|
|
zugreifen.
|
|
|
|
Jede Erweiterung muss anders importiert, konfiguriert bzw. angewendet werden.
|
|
Wir zeigen hier einige typische Anwendungsfälle für die in der
|
|
[Übersicht](/doc/guide/extension.overview) beschriebenen Kategorien.
|
|
|
|
Zii Erweiterungen
|
|
-----------------
|
|
|
|
Bevor wir auf andere Erweiterungen eingehen, möchten wir an dieser Stelle kurz
|
|
die Zii-Erweiterungsbibliothek vorstellen. Dabei handelt es sich um eine Reihe von
|
|
Erweiterungen, die vom Yii-Entwicklerteam erstellt wurden und die seit Version
|
|
1.1.0 in jedem Release enthalten sind.
|
|
|
|
Um eine Zii-Erweiterung zu verwenden, muss die entsprechende Klasse mit einem
|
|
Pfadalias der Form `zii.pfad.zur.Klasse` referenziert werden. Der Rootalias
|
|
`zii` wird hierbei von Yii bereits vorbelegt. Er bezieht sich auf das
|
|
Basisverzeichnis der Zii-Bibliothek. Ein [CGridView] würde man
|
|
z.B. so einsetzen:
|
|
|
|
~~~
|
|
[php]
|
|
$this->widget('zii.widgets.grid.CGridView', array(
|
|
'dataProvider'=>$dataProvider,
|
|
));
|
|
~~~
|
|
|
|
Anwendungskomponente
|
|
--------------------
|
|
|
|
Um eine [Anwendungskomponente](/doc/guide/basics.application#application-component) zu
|
|
verwenden, muss in der [Konfiguration](/doc/guide/basics.application#application-configuration)
|
|
ein Eintrag in der `components`-Eigenschaft hinzugefügt werden:
|
|
|
|
~~~
|
|
[php]
|
|
return array(
|
|
// 'preload'=>array('xyz',...),
|
|
'components'=>array(
|
|
'xyz'=>array(
|
|
'class'=>'ext.xyz.XyzClass',
|
|
'property1'=>'value1',
|
|
'property2'=>'value2',
|
|
),
|
|
// Andere Konfigurationen für Komponenten
|
|
),
|
|
);
|
|
~~~
|
|
|
|
Nun kann in der gesamten Anwendung mit `Yii::app()->xyz` auf die
|
|
Komponente zugegriffen werden. Sie wird `lazy` ("faul", also beim ersten
|
|
Zugriff darauf) erzeugt, es sei denn, sie wird in der Eigenschaft
|
|
`preload` aufgeführt.
|
|
|
|
|
|
Behavior
|
|
--------
|
|
|
|
[Behavior](/doc/guide/basics.component#component-behavior) können mit allen
|
|
möglichen Komponenten verwendet werden. Dazu muss das Behavior zunächst
|
|
an die gewünschte Komponente angebunden werden. Danach kann man
|
|
Behaviormethoden über die Komponente aufrufen:
|
|
|
|
~~~
|
|
[php]
|
|
// $name ist ein eindeutiger Bezeichner des Behaviors in der Komponente
|
|
$component->attachBehavior($name,$behavior);
|
|
// test() ist eine Methode des Behaviors
|
|
$component->test();
|
|
~~~
|
|
|
|
Statt über die `attachBehavior`-Methode wird ein Behavior in der Regel meist
|
|
per [Konfiguration](/doc/guide/basics.application#application-configuration)
|
|
an eine Komponente angebunden, wie hier am Beispiel einer
|
|
[Anwendungskomponente](/doc/guide/basics.application#application-component)
|
|
gezeigt:
|
|
|
|
~~~
|
|
[php]
|
|
return array(
|
|
'components'=>array(
|
|
'db'=>array(
|
|
'class'=>'CDbConnection',
|
|
'behaviors'=>array(
|
|
'xyz'=>array(
|
|
'class'=>'ext.xyz.XyzBehavior',
|
|
'property1'=>'value1',
|
|
'property2'=>'value2',
|
|
),
|
|
),
|
|
),
|
|
//....
|
|
),
|
|
);
|
|
~~~
|
|
|
|
Damit wird das Behavoir `xyz` and die `db`-Komponente angebunden.
|
|
Dies wird durch Eigenschaft `behaviors` mögliche, die in [CApplicationComponent]
|
|
definiert ist. Übergibt man in dieser Eigenschaft eine Liste von
|
|
Behaviorkonfigurationen, bindet die Komponente die entsprechenden
|
|
Behaviors beim Initialisieren an.
|
|
|
|
Da [CController]-, [CFormModel]- und [CActiveModel]-Klassen in der Regel
|
|
erweitert werden müssen, können Behavior dort durch Überschreiben der
|
|
`behaviors()`-Methode angebunden werden. Beim Initialisieren hängt die Klasse
|
|
dann die darin definierten Behaviors automatisch an:
|
|
|
|
~~~
|
|
[php]
|
|
public function behaviors()
|
|
{
|
|
return array(
|
|
'xyz'=>array(
|
|
'class'=>'ext.xyz.XyzBehavior',
|
|
'property1'=>'value1',
|
|
'property2'=>'value2',
|
|
),
|
|
);
|
|
}
|
|
~~~
|
|
|
|
Widget
|
|
------
|
|
|
|
[Widgets](/doc/guide/basics.view#widget) werden hauptsächlich in
|
|
[Views](/doc/guide/basics.view) verwendet. Eine Widget-Klasse `XyzClass` aus
|
|
der `xyz`-Erweiterung kann im View wie folgt verwendet werden:
|
|
|
|
~~~
|
|
[php]
|
|
// Widget ohne eingebetteten Inhalt
|
|
<?php $this->widget('ext.xyz.XyzClass', array(
|
|
'property1'=>'value1',
|
|
'property2'=>'value2')); ?>
|
|
|
|
// Widget mit eingebettetem Inhalt:
|
|
<?php $this->beginWidget('ext.xyz.XyzClass', array(
|
|
'property1'=>'value1',
|
|
'property2'=>'value2')); ?>
|
|
|
|
...Eingebetteter Inhalt des Widgets...
|
|
|
|
<?php $this->endWidget(); ?>
|
|
~~~
|
|
|
|
Action
|
|
------
|
|
|
|
Mit [Actions](/doc/guide/basics.controller#action) reagiert ein
|
|
[Controller](/doc/guide/basics.controller) auf Requests. Um eine
|
|
Actionklasse `XyzClass` aus der Erweiterung `xyz` in einem
|
|
Controller zu verwenden, überschreibt man in diesem die Methode
|
|
[CController::actions]:
|
|
|
|
~~~
|
|
[php]
|
|
class TestController extends CController
|
|
{
|
|
public function actions()
|
|
{
|
|
return array(
|
|
'xyz'=>array(
|
|
'class'=>'ext.xyz.XyzClass',
|
|
'property1'=>'value1',
|
|
'property2'=>'value2',
|
|
),
|
|
// Andere Actions
|
|
);
|
|
}
|
|
}
|
|
~~~
|
|
|
|
Die Action kann dann über die [Route](/doc/guide/basics.controller#route)
|
|
`test/xyz` aufgerufen werden.
|
|
|
|
Filter
|
|
------
|
|
|
|
[Filter](/doc/guide/basics.controller#filter) werden ebenfalls von
|
|
einem [Controller](/doc/guide/basics.controller) verwendet. Sie übernehmen
|
|
hauptsächlich die Vor- und Nachbearbeitung eines User-Requests, wenn dieser
|
|
von einer [Action](/doc/guide/basics.controller#action) behandelt wird.
|
|
Um eine Filterklasse `XyzClass` aus der Erweiterung `xyz` in einem Controller
|
|
zu verwenden, überschreibt man die Methode [CController::filters]:
|
|
|
|
~~~
|
|
[php]
|
|
class TestController extends CController
|
|
{
|
|
public function filters()
|
|
{
|
|
return array(
|
|
array(
|
|
'ext.xyz.XyzClass',
|
|
'property1'=>'value1',
|
|
'property2'=>'value2',
|
|
),
|
|
// Andere Filter
|
|
);
|
|
}
|
|
}
|
|
~~~
|
|
|
|
Man kann hierbei auch Plus- und Minusoperatoren verwenden, um den Filter
|
|
nur auf bestimmte Actions anzuwenden. Näheres hierzu finden Sie in der
|
|
Dokumentation von [CController].
|
|
|
|
Controller
|
|
----------
|
|
|
|
Ein [Controller](/doc/guide/basics.controller) stellt eine Reihe von Actions
|
|
bereit, die von Benutzern aufgerufen werden können. Um eine
|
|
Controllererweiterung zu verwenden, muss man in der
|
|
[Anwendungskonfiguration](/doc/guide/basics.application#application-configuration)
|
|
die Eigenschaft [CWebApplication::controllerMap] anpassen:
|
|
|
|
~~~
|
|
[php]
|
|
return array(
|
|
'controllerMap'=>array(
|
|
'xyz'=>array(
|
|
'class'=>'ext.xyz.XyzClass',
|
|
'property1'=>'value1',
|
|
'property2'=>'value2',
|
|
),
|
|
// Andere Controller
|
|
),
|
|
);
|
|
~~~
|
|
|
|
Eine Action `a` in diesem Controller kann dann über die
|
|
[Route](/doc/guide/basics.controller#route) `xyz/a` aufgerufen werden.
|
|
|
|
Validator
|
|
---------
|
|
|
|
Validatoren werden hauptsächlich in
|
|
[Modelklassen](/doc/guide/basics.model) (also Ablegern von
|
|
[CFormModel] oder [CActiveRecord]) verwendet.
|
|
Um einen Validator `XyzClass` aus der Erweiterung `xyz` einzusetzen,
|
|
überschreibt man in der abgeleiteten Modelklasse die Methode [CModel::rules]:
|
|
|
|
~~~
|
|
[php]
|
|
class MyModel extends CActiveRecord // oder CFormModel
|
|
{
|
|
public function rules()
|
|
{
|
|
return array(
|
|
array(
|
|
'attr1, attr2',
|
|
'ext.xyz.XyzClass',
|
|
'property1'=>'value1',
|
|
'property2'=>'value2',
|
|
),
|
|
// Andere Prüfregeln
|
|
);
|
|
}
|
|
}
|
|
~~~
|
|
|
|
Konsolenbefehl
|
|
--------------
|
|
|
|
Eine [Konsolenerweiterung](/doc/guide/topics.console)
|
|
fügt dem `yiic`-Befehl in der Regel ein weiteres Kommando hinzu.
|
|
Indem man die Konfiguration der Konslenanwendung anpasst, kann man
|
|
dann z.B. den Befehl `XyzClass` aus der Erweiterung `xyz` verwenden:
|
|
|
|
~~~
|
|
[php]
|
|
return array(
|
|
'commandMap'=>array(
|
|
'xyz'=>array(
|
|
'class'=>'ext.xyz.XyzClass',
|
|
'property1'=>'value1',
|
|
'property2'=>'value2',
|
|
),
|
|
// Andere Kommandos
|
|
),
|
|
);
|
|
~~~
|
|
|
|
Für den `yiic`-Befehl steht nun das Kommand `xyz` zur Verfügung.
|
|
|
|
> Note|Hinweis: Eine Konsolenanwendung verwendet normalerweise eine andere
|
|
Konfigurationsdatei als die Webanwendung. Wenn eine Applikation mit dem Befehl
|
|
`yiic webapp` erstellt wurde, liegt die Konfigurationsdatei für die
|
|
Konsolenanwendung in `protected/yiic` in `protected/config/console.php`, die
|
|
der Webanwendung in `protected/config/main.php`.
|
|
|
|
|
|
Module
|
|
------
|
|
|
|
Bitte beachten Sie das Kapitel über
|
|
[Module](/doc/guide/basics.module#using-module), um mehr über den Einsatz von
|
|
Modulen zu erfahren.
|
|
|
|
Allgemeine Komponenten
|
|
----------------------
|
|
|
|
Um eine allgemeine [Komponente](/doc/guide/basics.component) einzusetzen,
|
|
muss zunächst die Klassendatei eingebunden werden:
|
|
|
|
~~~
|
|
Yii::import('ext.xyz.XyzClass');
|
|
~~~
|
|
|
|
Danach kann man entweder eine Instanz dieser Klasse erzeugen, Eigenschaften
|
|
belegen und Methoden aufrufen. Oder man kann die Klasse erweitern und neue
|
|
Kindklassen davon erstellen.
|
|
|
|
<div class="revision">$Id: extension.use.txt 2890 2011-01-18 15:58:34Z qiang.xue $</div>
|