miércoles, 21 de enero de 2015

Configuraciones

Las configuraciones se utilizan ampliamente en Yii al crear nuevos objetos o inicializar los objetos existentes. Las configuraciones por lo general incluyen el nombre de la clase objeto que se está creando, y una lista de valores iniciales que se deben asignar a las propiedades del objeto. Las configuraciones también pueden incluir una lista de los controladores que deben concederse a las eventos y/o una lista de comportamientos que también serán añadidas al objeto.

A continuación, una configuración para crear e inicializar una conexión de base de datos:

$config = [
    'class' => 'yii\db\Connection',
    'dsn' => 'mysql:host=127.0.0.1;dbname=demo',
    'username' => 'root',
    'password' => '',
    'charset' => 'utf8',
];
$db Yii::createObject($config);

El método Yii::createObject() toma un arreglo configuración como su argumento y crea un objeto creando una instancia de la clase llamada en la configuración. Cuando se crea una instancia del objeto, el resto de la configuración se utiliza para inicializar las propiedades del objeto, controladores de eventos y comportamientos.

Si ya se tiene un objeto, se puede utilizar Yii::configure() para inicializar las propiedades del objeto con un arreglo de configuración:

Yii::configure($object$config);

Nótese que en este caso, el arreglo de configuración no debe tener un elemento class.

Formato de Configuración

El formato de una configuración se puede describir formalmente como:

[
    'class' => 'ClassName',
    'propertyName' => 'propertyValue',
    'on eventName' => $eventHandler,
    'as behaviorName' => $behaviorConfig,
]

donde:

  • class especifica un nombre de clase completo para el objeto que se está creando.
  • propertyName especifica los valores iniciales de la propiedad con nombre. Las índices son los nombres de las propiedades y los valores son los valores iniciales correspondientes. Sólo las variables miembro públicas y propiedades definidas por getters/setters pueden configurarse.
  • on eventName indica los controladores que deberán adjuntarse a los eventos del objeto. Nótese que los índices del arreglo se forman con el prefijo on.
  • as behaviorName indica qué comportamientos deben estar adjuntos al objeto. Nótese que los índices del arreglo se forman con el prefijo as; el valor, $behaviorConfig, representa la configuración para la creación de un comportamiento, como una configuración normal descrita aquí.


A continuación se muestra un ejemplo que muestra una configuración con los valores iniciales de las propiedades, controladores de eventos y comportamientos:

[
    'class' => 'app\components\SearchEngine',
    'apiKey' => 'xxxxxxxx',
    'on search' => function ($event) {
        Yii::info("Término buscado: " $event->keyword);
    },
    'as indexer' => [
        'class' => 'app\components\IndexerBehavior',
        // ... valores iniciales de las propiedades ...
    ],
]

Utilizando Configuraciones

Las configuraciones se utilizan en muchos lugares en Yii. Vamos a describir configuraciones de aplicaciones y configuraciones para widget, dos principales usos de configuraciones.

Configuraciones de aplicación

La configuración de una aplicación es probablemente uno de los más complejos arreglos en Yii. Esto se debe a la clase application tiene un montón de propiedades y eventos configurables. Más importante aún, las propiedades de sus componentes puede recibir una gran variedad de configuraciones para crear componentes que se registran a través de la aplicación. El siguiente es un resumen del archivo de configuración de la aplicación para la plantilla de aplicación básica.

$config = [
    'id' => 'basic',
    'basePath' => dirname(__DIR__),
    'extensions' => require(__DIR__ '/../vendor/yiisoft/extensions.php'),
    'components' => [
        'cache' => [
            'class' => 'yii\caching\FileCache',
        ],
        'mailer' => [
            'class' => 'yii\swiftmailer\Mailer',
        ],
        'log' => [
            'class' => 'yii\log\Dispatcher',
            'traceLevel' => YII_DEBUG 0,
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',
                ],
            ],
        ],
        'db' => [
            'class' => 'yii\db\Connection',
            'dsn' => 'mysql:host=localhost;dbname=stay2',
            'username' => 'root',
            'password' => '',
            'charset' => 'utf8',
        ],
    ],
];

Como se puede notar, la configuración no tiene un índice class. Esto se debe a que se utiliza en el script de entrada, donde ya se le da el nombre de la clase,

(new yii\web\Application($config))->run();

Configuraciones para Widgets

Al utilizar los widgets , a menudo es necesario utilizar las configuraciones para personalizar las propiedades de los mismos. Tanto los métodos yii\base\Widget::widget() y yii\base\Widget::begin() pueden ser utilizados para crear un widget. En ambos casos toman un arreglo de configuración como el siguiente:

use yii\widgets\Menu;

echo Menu::widget([
    'activateItems' => false,
    'items' => [
        ['label' => 'Home''url' => ['site/index']],
        ['label' => 'Products''url' => ['product/index']],
        ['label' => 'Login''url' => ['site/login'], 'visible' => Yii::$app->user->isGuest],
    ],
]);

El código anterior crea un widget Menu e inicializa su propiedad activateItems a false. La propiedad items también se configura con los elementos del menú que se mostrarán.

Archivos de Configuración

Cuando una configuración es muy compleja, una práctica común es almacenarlo en uno o varios archivos PHP, conocidos como archivos de configuración. Un archivo de configuración devuelve un arreglo PHP que representa la configuración. Por ejemplo, es posible mantener una configuración de la aplicación en un archivo llamado web.php como la siguiente:

return [
    'id' => 'basic',
    'basePath' => dirname(__DIR__),
    'extensions' => require(__DIR__ '/../vendor/yiisoft/extensions.php'),
    'components' => require(__DIR__ '/components.php'),
];

Puesto que la configuración de los componentes también es compleja, se la puede almacenar en el archivo components.php e incluirla (require) desde éste archivo web.php tal como lo muestra el ejemplo. A su vez, el archivo components.php tendría:

return [
    'cache' => [
        'class' => 'yii\caching\FileCache',
    ],
    'mailer' => [
        'class' => 'yii\swiftmailer\Mailer',
    ],
    'log' => [
        'class' => 'yii\log\Dispatcher',
        'traceLevel' => YII_DEBUG 0,
        'targets' => [
            [
                'class' => 'yii\log\FileTarget',
            ],
        ],
    ],
    'db' => [
        'class' => 'yii\db\Connection',
        'dsn' => 'mysql:host=localhost;dbname=stay2',
        'username' => 'root',
        'password' => '',
        'charset' => 'utf8',
    ],
];

Para obtener una configuración guardada en un archivo de configuración solamente se la debe incluir utilizando require:

$config = require('path/to/web.php');
(new yii\web\Application($config))->run();

Configuraciones predeterminadas

El método Yii::createObject() se implementa en base a un contenedor de inyección de dependencias. Esto permite especificar un conjunto de las llamadas configuraciones predeterminadas que se aplicarán a todas las instancias de las clases especificadas cuando se creen usando Yii::createObject(). Las configuraciones predeterminadas se pueden especificar llamando a Yii::$container->set() en el código bootstrapping.

Por ejemplo, si se desea personalizar yii\widgets\LinkPager para que al paginar se muestren hasta 5 botones de página (el valor predeterminado es 10) se puede utilizar el siguiente código para tal objetivo:

\Yii::$container->set('yii\widgets\LinkPager', [
    'maxButtonCount' => 5,
]);

En este caso, si no se utilizara la configuración por defecto, habría que configurar maxButtonCount en cada lugar que se pagine.

Variables de Ambiente

Las configuraciones a menudo varían de acuerdo con el entorno en el que una aplicación se ejecuta. Por ejemplo, en el ambiente de desarrollo, es posible que se desee utilizar una base de datos llamada mydb_dev, mientras que en el servidor de producción es posible que se desee utilizar la base de datos mydb_prod base de datos. Para facilitar entornos de conmutación, Yii proporciona una constante llamada YII_ENV que se puede definir en el script de entrada. Por ejemplo,

defined('YII_ENV') or define('YII_ENV''dev');

Se puede definir YII_ENV con uno de los siguientes valores:

  • prod: ambiente de producción. La constante YII_ENV_PROD se evaluará como verdadero. Este es el valor por defecto de YII_ENV si no se lo define.
  • dev: ambiente de desarrollo. La constante YII_ENV_DEV se evaluará como verdadero.
  • test: ambiente de pruebas. La constante YII_ENV_TEST se evaluará como verdadero.

Con estas constantes de ambiente se puede especificar las condiciones iniciales basados en el ambiente actual. Por ejemplo, nuestra configuración de aplicación puede contener el siguiente código para habilitar la barra de depuración y depurador en nuestro ambiente de desarrollo:

$config = [...];

if (YII_ENV_DEV) {
    // configuración para ambiente de desarrollo 'dev'
    $config['bootstrap'][] = 'debug';
    $config['modules']['debug'] = 'yii\debug\Module';
}

return $config;


También te puede interesar:
Comportamientos (Behaviors)
Eventos
Propiedades
Componentes


No hay comentarios.:

Publicar un comentario

Nota: sólo los miembros de este blog pueden publicar comentarios.