Usar una extensión frecuentemente involucra los siguientes tres pasos:
extensions/xyz
de
directorio base de la aplicación,
donde xyz
es el nombre de la extensión.Cada extensión tiene un nombre que la identifica de manera única contra otras extensiones.
Dada una extensión llamada xyz
, podemos siempre usar el alias de ruta application.extensions.xyz
para encontrar el directorio base que la contiene todos los archivos de xyz
.
Las diferentes extensiones tienen diferentes requerimientos de importación, configuración y uso. En lo que sigue, listaremos escenarios de uso común de extensiones, de acuerdo a la categorización descripta en la introducción.
Para usar un componente de aplicación,
necesitamos primero cambiar la configuración de la aplicación
agregando una nueva entrada a la propiedad components
, como la siguiente:
return array(
// 'preload'=>array('xyz',...),
'components'=>array(
'xyz'=>array(
'class'=>'application.extensions.xyz.XyzClass',
'property1'=>'value1',
'property2'=>'value2',
),
// otras configuraciones de components
),
);
Entonces, podemos acceder al componente en cualquier lugar, usando Yii::app()->xyz
.
El componente será creado cuando se lo acceda por primera vez a menos que lo listemos
en la propiedad preload
.
Los widgets son principalmente usados en las vistas.
Dada una clase widget XyzClass
pertenceciente a la extensión xyz
, podemos usarla en una vista como sigue:
// widget que no necestia contenido del cuerpo $this->widget('application.extensions.xyz.XyzClass', array( 'property1'=>'value1', 'property2'=>'value2')); // widget que puede obtener contenido del cuerpo $this->beginWidget('application.extensions.xyz.XyzClass', array( 'property1'=>'value1', 'property2'=>'value2')); ...contenido del cuerpo del widget... $this->endWidget();
Las acciones son usadas por un controlador
para responder a una solicitud específica del usuario. Dada una clase acción XyzClass
perteneciente a la
extensión xyz
, podemos usarla sobreescribiendo el método CController::actions en nuestra clase controlador:
class TestController extends CController
{
public function actions()
{
return array(
'xyz'=>array(
'class'=>'application.extensions.xyz.XyzClass',
'property1'=>'value1',
'property2'=>'value2',
),
// otras acciones
);
}
}
Entonces, la acción puede ser accedida a través de la ruta
test/xyz
.
Los filtros son también usados por un
controlador. Principalmente pre y post procesan
la solicitud del usuario cuando ésta es manipulada por una acción.
Dado un filtro de clase ZyzClass
perteneciente a la extensión xyz
, podemos
usarlo sobreescribiendo el método CController::filters en nuestra clase controlador.
class TestController extends CController
{
public function filters()
{
return array(
array(
'application.extensions.xyz.XyzClass',
'property1'=>'value1',
'property2'=>'value2',
),
// otros filtros
);
}
}
En lo anterior, podemos usar los operadores más y menos en el primer elemento del arreglo para aplicar el filtro a ciertas acciones solamente. Para más detalles, ver la documentación de CController.
Un controlador provee un conjunto de acciones que pueden ser solicitadas por los usuarios. Para usar una extensión controlador, necesitamos configurar la propiedad CWebApplication::controllerMap en la configuración de la aplicación:
return array(
'controllerMap'=>array(
'xyz'=>array(
'class'=>'application.extensions.xyz.XyzClass',
'property1'=>'value1',
'property2'=>'value2',
),
// otros controladores
),
);
Entonces, una accion a
en el controlador puede ser accedida
a través de la ruta xyz/a
.
A validador es principalmente usado en una clase modelo
(una que herede tanto de CFormModel como de CActiveRecord).
Dado un validador de clase XyzClass
perteneciente a la extensión xyz
, podemos
usarlo sobreescribiendo el método CModel::rules en nuestra clase modelo:
class MyModel extends CActiveRecord // o CFormModel
{
public function rules()
{
return array(
array(
'attr1, attr2',
'application.extensions.xyz.XyzClass',
'property1'=>'value1',
'property2'=>'value2',
),
// otras reglas de validación
);
}
}
Una extensión de comando de consola
usualmente mejora la herramienta yiic
con un comando adicional.
Dado un comando de consola XyzClass
perteneciente a la extensión xyz
,
podemos usarlo configurando la configuración de la aplicación de consola:
return array(
'commandMap'=>array(
'xyz'=>array(
'class'=>'application.extensions.xyz.XyzClass',
'property1'=>'value1',
'property2'=>'value2',
),
// otros comandos
),
);
Entonces, podemos usar la herramienta yiic
equipada con un
comando adicional xyz
.
Nota: Una aplicación de consola usualmente usa un archivo de configuración que es diferente del usado por una aplicación web. Si una aplicación es creada usando el comando
yiic webapp
, entonces el archivo de configuración para la aplicación de consolaprotected/yiic
esprotected/config/console.php
mientras que el archivo de configuración para la aplicación Web esprotected/config/main.php
.
Por favor referirse a la sección acerca de modulos acerca de como usar un módulo.
Para usar un componente genérico, primero necesitamos incluir su clase usando
Yii::import('application.extensions.xyz.XyzClass');
Entonces, podemos crear una instancia de la clase, configurar sus propiedades, y llamar a sus métodos. Podemos tambien heredar de ella para crear nuevas clases hijas.
Signup or Login in order to comment.