Commit 36bebbfe by Carsten Brandt

use id instead of name for anchor references in the guide

fixes #7013
parent 10ba0567
......@@ -20,7 +20,7 @@ if ($data === false) {
```
## Componentes de Caché <a name="cache-components"></a>
## Componentes de Caché <span id="cache-components"></span>
El almacenamiento de datos en caché depende de los llamados *cache components* (componentes de caché) los cuales
representan diferentes tipos de almacenamiento en caché, como por ejemplo en memoria, en archivos o en base de datos.
......@@ -66,7 +66,7 @@ el código que utiliza la caché. Por ejemplo, podrías modificar la configuraci
> Nota: Puedes registrar múltiples componentes de aplicación de caché. El componente llamado `cache` es usado por defecto por muchas clases caché-dependiente (ej. [[yii\web\UrlManager]]).
### Almacenamientos de Caché Soportados <a name="supported-cache-storage"></a>
### Almacenamientos de Caché Soportados <span id="supported-cache-storage"></span>
Yii proporciona varios componentes de caché que pueden almacenar datos en diferentes medios. A continuación
se muestra un listado con los componentes de caché disponibles:
......@@ -84,7 +84,7 @@ se muestra un listado con los componentes de caché disponibles:
> Nota: Puedes utilizar diferentes tipos de almacenamiento de caché en la misma aplicación. Una estrategia común es la de usar almacenamiento de caché en memoria para almacenar datos que son pequeños pero que son utilizados constantemente (ej. datos estadísticos), y utilizar el almacenamiento de caché en archivos o en base de datos para guardar datos que son grandes y utilizados con menor frecuencia (ej. contenido de página).
## API de Caché <a name="cache-apis"></a>
## API de Caché <span id="cache-apis"></span>
Todos los componentes de almacenamiento de caché provienen de la misma clase "padre" [[yii\caching\Cache]] y por lo tanto soportan la siguiente API:
......@@ -111,7 +111,7 @@ $value2 = $cache['var2']; // equivalente a: $value2 = $cache->get('var2');
```
### Claves de Caché <a name="cache-keys"></a>
### Claves de Caché <span id="cache-keys"></span>
Cada elemento de datos almacenado en caché se identifica por una clave. Cuando se almacena un elemento de datos en la memoria caché, se debe especificar una clave. Más tarde, cuando se recupera el elemento de datos de la memoria caché, se debe proporcionar la clave correspondiente.
......@@ -144,7 +144,7 @@ Cuando en un mismo almacenamiento en caché es utilizado por diferentes aplicaci
Para garantizar la interoperabilidad, deberían utilizarse sólo caracteres alfanuméricos.
### Caducidad de Caché <a name="cache-expiration"></a>
### Caducidad de Caché <span id="cache-expiration"></span>
Un elemento de datos almacenado en la memoria caché permanecerá en ella para siempre, a menos que sea removida de alguna manera debido a alguna directiva de caché (ej. el espacio de almacenamiento en caché está lleno y los datos más antiguos se eliminan). Para cambiar este comportamiento, podrías proporcionar un parámetro de caducidad al llamar [[yii\caching\Cache::set()|set()]] para guardar el elemento de datos. El parámetro nos indica por cuántos segundos el elemento se mantendrá válido en memoria caché. Cuando llames [[yii\caching\Cache::get()|get()]] para recuperar el elemento, si el tiempo de caducidad ha pasado, el método devolverá `false`, indicando que el elemento de datos no ha sido encontrado en la memoria caché. Por ejemplo,
......@@ -161,7 +161,7 @@ if ($data === false) {
```
### Dependencias de Caché <a name="cache-dependencies"></a>
### Dependencias de Caché <span id="cache-dependencies"></span>
Además de configurar el tiempo de expiración, los datos almacenados en caché pueden también ser invalidados conforme a algunos cambios en la caché de dependencias. Por ejemplo, [[yii\caching\FileDependency]] representa la dependencia del tiempo de modificación del archivo. Cuando esta dependencia cambia, significa que el archivo correspondiente ha cambiado. Como resultado, cualquier contenido anticuado que sea encontrado en la caché debería ser invalidado y la llamada a [[yii\caching\Cache::get()|get()]] debería retornar falso.
......@@ -191,7 +191,7 @@ Aquí abajo se muestra un sumario de las dependencias disponibles:
con el mismo nombre del grupo a la vez llamando a [[yii\caching\TagDependency::invalidate()]].
## Consultas en Caché <a name="query-caching"></a>
## Consultas en Caché <span id="query-caching"></span>
Las consultas en caché es una característica especial de caché construido sobre el almacenamiento de caché de datos. Se
proporciona para almacenar en caché el resultado de consultas a la base de datos.
......@@ -213,7 +213,7 @@ El almacenamiento en caché de consultas se puede usar para [DAO](db-dao.md), as
> Nota: Algunos DBMS (ej. [MySQL](http://dev.mysql.com/doc/refman/5.1/en/query-cache.html)) también soporta el almacenamiento en caché desde el mismo servidor de la BD. Puedes optar por utilizar cualquiera de los mecanismos de memoria caché. El almacenamiento en caché de consultas previamente descrito tiene la ventaja que de que se puede especificar dependencias de caché de una forma flexible y son potencialmente mucho más eficientes.
### Configuraciones <a name="query-caching-configs"></a>
### Configuraciones <span id="query-caching-configs"></span>
Las consultas en caché tienen tres opciones configurables globales a través de [[yii\db\Connection]]:
......@@ -224,7 +224,7 @@ Las consultas en caché tienen tres opciones configurables globales a través de
Por defecto es `'cache'`. El almacenamiento en caché de consultas se habilita sólo si hay un componente de la aplicación de caché válida.
### Usos <a name="query-caching-usages"></a>
### Usos <span id="query-caching-usages"></span>
Puedes usar [[yii\db\Connection::cache()]] si tienes multiples consultas SQL que necesitas a aprovechar el cacheo de consultas. El uso es de la siguiente manera,
......@@ -287,7 +287,7 @@ $result = $db->cache(function ($db) {
```
### Limitaciones <a name="query-caching-limitations"></a>
### Limitaciones <span id="query-caching-limitations"></span>
El almacenamiento en caché de consultas no funciona con los resultados de consulta que contienen controladores de recursos.
Por ejemplo, cuando se utiliza el tipo de columna `BLOB` en algunos DBMS, el resultado de la consulta devolverá un recurso para manejar los datos de la columna.
......
......@@ -28,14 +28,14 @@ Como en la [caché de datos](caching-data.md), un `$id` (clave) único es necesa
caché.
## Opciones de Caché <a name="caching-options"></a>
## Opciones de Caché <span id="caching-options"></span>
Puedes especificar opciones adicionales para la caché de fragmentos pasando el array de opciones como segundo
parametro del método [[yii\base\View::beginCache()|beginCache()]]. Entre bastidores, este array de opciones se utiliza
para configurar el widget [[yii\widgets\FragmentCache]] que es en realidad el que implementa la funcionalidad de la caché
de fragmentos.
### Duración <a name="duration"></a>
### Duración <span id="duration"></span>
Quizás la opción más utilizada en la caché de fragmentos es [[yii\widgets\FragmentCache::duration|duración]]. Ésta
especifica cuántos segundos el contenido puede permanecer como válido en la memoria caché. El siguiente código almacena
......@@ -53,7 +53,7 @@ if ($this->beginCache($id, ['duration' => 3600])) {
Si la opción no está activada, se tomará el valor por defecto 60, lo que significa que el contenido almacenado en caché expirará en 60 segundos.
### Dependencias <a name="dependencies"></a>
### Dependencias <span id="dependencies"></span>
Como en la [caché de datos](caching-data.md#cache-dependencies), el fragmento de contenido que está siendo almacenado en caché
también puede tener dependencias. Por ejemplo, el contenido de un artículo que se muestre depende de si el mensaje se
......@@ -78,7 +78,7 @@ if ($this->beginCache($id, ['dependency' => $dependency])) {
```
### Variaciones <a name="variations"></a>
### Variaciones <span id="variations"></span>
El contenido almacenado en caché puede variar de acuerdo a ciertos parámetros. Por ejemplo, para una aplicación Web que
soporte multiples idiomas, la misma pieza del código de la vista puede generar el contenido almacenado en caché
......@@ -99,7 +99,7 @@ if ($this->beginCache($id, ['variations' => [Yii::$app->language]])) {
```
### Alternando el Almacenamiento en Caché <a name="toggling-caching"></a>
### Alternando el Almacenamiento en Caché <span id="toggling-caching"></span>
Puede que a veces quieras habilitar la caché de fragmentos únicamente cuando ciertas condiciones se cumplan. Por ejemplo,
para una página que muestra un formulario, tal vez quieras guardarlo en la caché cuando es inicialmente solicitado (a
......@@ -117,7 +117,7 @@ if ($this->beginCache($id, ['enabled' => Yii::$app->request->isGet])) {
```
## Almacenamiento en Caché Anidada <a name="nested-caching"></a>
## Almacenamiento en Caché Anidada <span id="nested-caching"></span>
El almacenamiento en caché de fragmentos se puede anidar. Es decir, un fragmento de caché puede ser encerrado dentro de
otro fragmento que también se almacena en caché. Por ejemplo, los comentarios se almacenan en una caché de fragmento
......@@ -151,7 +151,7 @@ dependencias de las cachés anidadas, de lo contrario los fragmentos internos qu
manteniendo en el fragmento externo.
## Contenido Dinámico <a name="dynamic-content"></a>
## Contenido Dinámico <span id="dynamic-content"></span>
Cuando se usa la caché de fragmentos, podrías encontrarte en la situación que un fragmento grande de contenido es
relavitamente estático excepto en uno u otro lugar. Por ejemplo, la cabeza de una página (header) puede que muestre el
......
......@@ -15,7 +15,7 @@ consultas:
* [[yii\filters\HttpCache::cacheControlHeader|Cache-Control]]
## La Cabecera `Last-Modified` <a name="last-modified"></a>
## La Cabecera `Last-Modified` <span id="last-modified"></span>
La cabecera `Last-Modified` usa un sello de tiempo para indicar si la página ha sido modificada desde que el cliente la
almacena en la caché.
......@@ -59,7 +59,7 @@ regenerar la página, y el navegador usará la versión caché del lado del clie
lado del servidor y la transmisión del contenido de la página son ambos omitidos.
## La Cabecera `ETag` <a name="etag"></a>
## La Cabecera `ETag` <span id="etag"></span>
La cabecera "Entity Tag" (o para abreviar `ETag`) usa un hash para representar el contenido de una página. Si la página
ha sido cambiada, el hash también cambiará. Al comparar el hash guardado en el lado del cliente con el hash generado en
......@@ -113,7 +113,7 @@ expresión sencilla para invalidar la caché si la página ha sido modificada.
> Nota: En cumplimiento con [RFC 7232](http://tools.ietf.org/html/rfc7232#section-2.4),
`HttpCache` enviará ambas cabeceras `ETag` y `Last-Modified` si ambas están configuradas. Y si el clientes envía tanto la cabecera `If-None-Match` como la cabecera `If-Modified-Since`, solo la primera será respetada.
## La Cabecera `Cache-Control` <a name="cache-control"></a>
## La Cabecera `Cache-Control` <span id="cache-control"></span>
La cabecera `Cache-Control` especifica la directiva general de la caché para páginas. Puedes enviarla configurando la
propiedad [[yii\filters\HttpCache::cacheControlHeader]] con el valor de la cabecera. Por defecto, la siguiente cabecera
......@@ -123,7 +123,7 @@ será enviada:
Cache-Control: public, max-age=3600
```
## Limitador de la Sesión de Caché <a name="session-cache-limiter"></a>
## Limitador de la Sesión de Caché <span id="session-cache-limiter"></span>
Cuando una página utiliza la sesión, PHP enviará automáticamente cabeceras HTTP relacionadas con la caché tal y como se
especifican en `session.cache_limiter` de la configuración INI de PHP. Estas cabeceras pueden interferir o deshabilitar
......@@ -134,7 +134,7 @@ automáticamente el envío de estas cabeceras. Si deseas modificar este comporta
para una mejor explicación sobre esos valores.
## Implicaciones SEO <a name="seo-implications"></a>
## Implicaciones SEO <span id="seo-implications"></span>
Los robots de motores de búsqueda tienden a respetar las cabeceras de caché. Dado que algunos `crawlers` tienen limitado
el número de páginas que pueden rastrear por dominios dentro de un cierto período de tiempo, la introducción de cabeceras
......
......@@ -6,7 +6,7 @@ en tu código. Un alias debe comenzar con un cáracter `@` para que así pueda s
Por ejemplo, el alias `@yii` representa la ruta de instalación de la librería Yii, mientras que `@web` representa la
URL base la aplicación que actualmente se está ejecutando.
Definiendo Alias <a name="defining-aliases"></a>
Definiendo Alias <span id="defining-aliases"></span>
----------------
Puedes llamar a [[Yii::setAlias()]] para definir un alias para una determinada ruta de archivo o URL. Por ejemplo,
......@@ -48,7 +48,7 @@ return [
```
Resolución de Alias <a name="resolving-aliases"></a>
Resolución de Alias <span id="resolving-aliases"></span>
-------------------
Puedes llamar [[Yii::getAlias()]] para resolver un alias de raíz en la ruta o URL que representa. El mismo método puede
......@@ -80,7 +80,7 @@ Yii::getAlias('@foo/bar/file.php'); // muestra: /path2/bar/file.php
Si `@foo/bar` no está definido como un alias de raíz, la última declaración mostraría `/path/to/foo/bar/file.php`.
Usando Alias <a name="using-aliases"></a>
Usando Alias <span id="using-aliases"></span>
------------
Los alias son utilizados en muchos lugares en Yii sin necesidad de llamar [[Yii::getAlias()]] para convertirlos en rutas/URLs.
......@@ -98,7 +98,7 @@ $cache = new FileCache([
Por favor, presta atención a la documentación API para ver si una propiedad o el parámetro de un método soporta alias.
Alias Predefinidos <a name="predefined-aliases"></a>
Alias Predefinidos <span id="predefined-aliases"></span>
------------------
Yii predefine un conjunto de alias para aliviar la necesidad de hacer referencia a rutas de archivo o URLs que son
......@@ -118,7 +118,7 @@ mientras que el resto de los alias están definidos en el constructor de la apli
[configuración](concept-configurations.md) de la aplicación.
Alias en Extensiones <a name="extension-aliases"></a>
Alias en Extensiones <span id="extension-aliases"></span>
--------------------
Un alias se define automaticamente por cada [extensión](structure-extensions.md) que ha sido instalada a través de Composer.
......
......@@ -10,7 +10,7 @@ El cargador se instala cuando incluyes el archivo `Yii.php`.
ten en cuenta que el contenido que describimos aquí también se aplica a la autocarga de interfaces y rasgos (Traits).
Usando el Autocargador de Yii <a name="using-yii-autoloader"></a>
Usando el Autocargador de Yii <span id="using-yii-autoloader"></span>
-----------------------------
Para utilizar el cargador automático de clases de Yii, deberías seguir dos reglas básicas cuando desarrolles y nombres tus
......@@ -40,7 +40,7 @@ poner las clases `front-end` bajo el espacio de nombres `frontend` mientras que
`backend`. Esto permitirá que estas clases sean automaticamente cargadas por el autocargador de Yii.
Mapa de Clases <a name="class-map"></a>
Mapa de Clases <span id="class-map"></span>
--------------
El autocargador de clases de Yii soporta el *mapa de clases*, que mapea nombres de clases to sus correpondientes rutas de
......@@ -59,7 +59,7 @@ clases en el proceso [bootstrapping](runtime-bootstrapping.md) de la aplicación
antes de que tus clases sean usadas.
Usando otros Autocargadores <a name="using-other-autoloaders"></a>
Usando otros Autocargadores <span id="using-other-autoloaders"></span>
---------------------------
Debido a que Yii incluye Composer como un gestor de dependencias y extensions, es recomendado que también instales el
......@@ -85,7 +85,7 @@ ser autocargables.
incluirlo en tu [script de entrada](structure-entry-scripts.md).
Carga Automática de Clases de Extensiones <a name="autoloading-extension-classes"></a>
Carga Automática de Clases de Extensiones <span id="autoloading-extension-classes"></span>
-----------------------------------------
El autocargador de Yii es capaz de autocargar clases de [extensiones](structure-extensions.md). El único requirimiento es
......
......@@ -10,7 +10,7 @@ comportamiento puede responder a [eventos](concept-events.md) disparados por el
o adaptar a la ejecución normal del código del componente.
Definiendo comportamientos <a name="defining-behaviors"></a>
Definiendo comportamientos <span id="defining-behaviors"></span>
--------------------------
Para definir un comportamiento, se debe crear una clase que exiende [[yii\base\Behavior]], o se extiende una clase hija. Por ejemplo:
......@@ -95,7 +95,7 @@ function ($event) {
```
Vinculando Comportamientos <a name="attaching-behaviors"></a>
Vinculando Comportamientos <span id="attaching-behaviors"></span>
--------------------------
Puedes vincular un comportamiento a un [[yii\base\Component|componente]] ya sea estática o dinámicamente. La primera forma
......@@ -189,7 +189,7 @@ También puedes asociar comportamientos a traves de [configuraciones](concept-co
Para más detalles, por favor visita la sección [Configuraciones](concept-configurations.md#configuration-format).
Usando comportamientos <a name="using-behaviors"></a>
Usando comportamientos <span id="using-behaviors"></span>
----------------------
Para poder utilizar un comportamiento, primero tienes que unirlo a un [[yii\base\Component|componente]] según las instrucciones anteriores. Una vez que un comportamiento ha sido vinculado a un componente, su uso es sencillo.
......@@ -230,7 +230,7 @@ $behaviors = $component->getBehaviors();
```
Desasociar Comportamientos <a name="detaching-behaviors"></a>
Desasociar Comportamientos <span id="detaching-behaviors"></span>
--------------------------
Para desasociar un comportamiento, puedes llamar el método [[yii\base\Component::detachBehavior()]] con el nombre con el
......@@ -247,7 +247,7 @@ $component->detachBehaviors();
```
Utilizando `TimestampBehavior` <a name="using-timestamp-behavior"></a>
Utilizando `TimestampBehavior` <span id="using-timestamp-behavior"></span>
-----------------------------
Para terminar, vamos a echar un vistazo a [[yii\behaviors\TimestampBehavior]]. Este comportamiento soporta de forma
......@@ -306,7 +306,7 @@ $user->touch('login_time');
```
Comparación con Traits <a name="comparison-with-traits"></a>
Comparación con Traits <span id="comparison-with-traits"></span>
----------------------
Mientras que los comportamientos son similares a [traits](http://www.php.net/traits) en cuanto que ambos "inyectan" sus
......@@ -314,7 +314,7 @@ métodos y propiedades a la clase primaria, son diferentes en muchos aspectos.
tienen sus ventajas y desventajas. Son más como complementos el uno al otro en lugar de alternativas.
### Razones para utilizar comportamientos <a name="pros-for-behaviors"></a>
### Razones para utilizar comportamientos <span id="pros-for-behaviors"></span>
Las clases de comportamientos, como todas las clases, soportan herencias. Traits, por otro lado, pueden ser
considerados como un copia-y-pega de PHP. Ellos no soportan la herencia de clases.
......@@ -331,7 +331,7 @@ automáticamente resuelto respetando al que ha sido asociado primero.
El conflicto de nombres en traits requiere que manualmente sean resueltos cambiando el nombre de las propiedades o métodos afectados.
### Razones para utilizar los Traits <a name="pros-for-traits"></a>
### Razones para utilizar los Traits <span id="pros-for-traits"></span>
Los Traits son mucho más eficientes que los comportamientos debido a que los últimos son objetos que consumen tiempo y
memoria.
......
......@@ -26,7 +26,7 @@ Yii::configure($object, $config);
Tenga en cuenta que en este caso, la matriz de configuración no debe contener un elemento `class`.
## Formato de Configuración <a name="configuration-format"></a>
## Formato de Configuración <span id="configuration-format"></span>
El formato de una configuración se puede describir formalmente como:
......@@ -63,12 +63,12 @@ A continuación se muestra un ejemplo de una configuración con los valores de p
```
## Usando Configuraciones <a name="using-configurations"></a>
## Usando Configuraciones <span id="using-configurations"></span>
Las configuraciones se utilizan en muchos lugares en Yii. Al comienzo de esta sección, hemos demostrado cómo crear un objeto según una configuración mediante el uso de [[Yii::CreateObject()]]. En este apartado, vamos a describir configuraciones de aplicaciones y configuraciones widget - dos principales usos de configuraciones.
### Configuraciones de aplicación <a name="application-configurations"></a>
### Configuraciones de aplicación <span id="application-configurations"></span>
Configuración para una [aplicación](structure-applications.md) es probablemente una de las configuraciones más complejas. Esto se debe a que la clase [[yii\web\Application|aplicación]] tiene un montón de propiedades y eventos configurables. Más importante aún, su propiedad [[yii\web\Application::components|componentes]] que puede recibir una gran variedad de configuraciones para crear componentes que se registran a través de la aplicación. Lo siguiente es un resumen del archivo de configuración de la aplicación para la [plantilla básica de la aplicación](start-installation.md).
......@@ -113,7 +113,7 @@ La configuración no tiene una clave `class`. Esto es porque se utiliza como sig
Para más detalles sobre la configuración de la propiedad `components` de una aplicación se puede encontrar en la sección [Aplicación](structure-applications.md) y la sección [Localizador de Servicio](concept-service-locator.md).
### Configuración Widget <a name="widget-configurations"></a>
### Configuración Widget <span id="widget-configurations"></span>
Cuando se utiliza [widgets](structure-widgets.md), a menudo es necesario utilizar las configuraciones para personalizar las propiedades de widgets. Tanto los metodos [[yii\base\Widget::widget()]] y [[yii\base\Widget::begin()]] pueden usarse para crear un widget. Toman un arreglo de configuración, como el siguiente,
......@@ -135,7 +135,7 @@ El código anterior crea un widget `Menu` e inicializa su propiedad `activeItems
Tenga en cuenta que debido a que el nombre de la clase ya está dado, la matriz de configuración no deben tener la clave `class`.
## Archivos de Configuración <a name="configuration-files"></a>
## Archivos de Configuración <span id="configuration-files"></span>
Cuando una configuración es muy compleja, una práctica común es almacenarla en uno o múltiples archivos PHP, conocidos como *archivos de configuración*. Un archivo de configuración devuelve un array de 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 el siguiente,
......@@ -185,7 +185,7 @@ $config = require('path/to/web.php');
```
## Configuraciones por Defecto <a name="default-configurations"></a>
## Configuraciones por Defecto <span id="default-configurations"></span>
El método [[Yii::createObject()]] es implementado en base a [contenedor de inyección de dependencia](concept-di-container.md). Le permite especificar un conjunto de los llamados *configuraciones predeterminadas* que se aplicarán a todos los casos de las clases especificadas cuando se crean utilizando [[Yii::createObject()]]. Las configuraciones por defecto se puede especificar llamando `Yii::$container->set()` en el código [bootstrapping](runtime-bootstrapping.md).
......@@ -199,7 +199,7 @@ Por ejemplo, si desea personalizar [[yii\widgets\LinkPager]] para que TODO enlac
Sin utilizar las configuraciones predeterminadas, usted tendría que configurar `maxButtonCount` en cada lugar en el que utiliza enlace paginador.
## Constantes de Entorno <a name="environment-constants"></a>
## Constantes de Entorno <span id="environment-constants"></span>
Las configuraciones a menudo varían de acuerdo al entorno en que se ejecuta una aplicación. Por ejemplo, en el entorno de desarrollo, es posible que desee utilizar una base de datos llamada `mydb_dev`, mientras que en servidor de producción es posible que desee utilizar la base de datos `mydb_prod`. Para facilitar la conmutación de entornos, Yii proporciona una constante llamado `YII_ENV` que se puede definir en el [script de entrada](structure-entry-scripts.md) de su aplicación. Por ejemplo,
......
......@@ -6,7 +6,7 @@ objetos dependientes. El [articulo de Martin](http://martinfowler.com/articles/i
explicación de porque son útiles los contenedores de ID. A continuación explicaremos como usar el contenedor de ID que
proporciona Yii.
Inyección de Dependencias <a name="dependency-injection"></a>
Inyección de Dependencias <span id="dependency-injection"></span>
-------------------------
Yii proporciona la función de contenedor de ID mediante la clase [[yii\di\Container]]. Soporta los siguientes tipos
......@@ -16,7 +16,7 @@ de ID:
* Inyección de setters y propiedades;
* Inyección de [llamadas de retorno PHP](http://php.net/manual/es/language.types.callable.php);
### Inyección de Constructores <a name="constructor-injection"></a>
### Inyección de Constructores <span id="constructor-injection"></span>
El contenedor de ID soporta inyección de constructores con la ayuda de los indicios (hint) de tipo para los parámetros del
constructor. Los indicios de tipo le proporcionan información al contenedor para saber cuáles son las clases o
......@@ -37,7 +37,7 @@ $bar = new Bar;
$foo = new Foo($bar);
```
### Inyección de Setters y Propiedades <a name="setter-and-property-injection"></a>
### Inyección de Setters y Propiedades <span id="setter-and-property-injection"></span>
La inyección de setters y propiedades se admite a través de [configuraciones](concept-configurations.md). Cuando se
registra una dependencia o se crea un nuevo objeto, se puede proporcionar una configuración que usará el contenedor
......@@ -69,7 +69,7 @@ $container->get('Foo', [], [
]);
```
### Inyección de Llamadas de retorno PHP <a name="php-callable-injection"></a>
### Inyección de Llamadas de retorno PHP <span id="php-callable-injection"></span>
En este caso, el contenedor usará una llamada de retorno PHP registrada para construir una nueva instancia de una
clase. La llamada de retorno se responsabiliza de que dependencias debe inyectar al nuevo objeto creado. Por ejemplo,
......@@ -82,7 +82,7 @@ $container->set('Foo', function () {
$foo = $container->get('Foo');
```
Registro de dependencias <a name="registering-dependencies"></a>
Registro de dependencias <span id="registering-dependencies"></span>
------------------------
Se puede usar [[yii\di\Container::set()]] para registrar dependencias. El registro requiere un nombre de dependencia
......@@ -150,7 +150,7 @@ $container->setSingleton('yii\db\Connection', [
]);
```
Resolución de Dependencias <a name="resolving-dependencies"></a>
Resolución de Dependencias <span id="resolving-dependencies"></span>
--------------------------
Una ves se hayan registrado las dependencias, se puede usar el contenedor de ID para crear nuevos objetos, y el
......@@ -238,7 +238,7 @@ $finder = new UserFinder($db);
$lister = new UserLister($finder);
```
Uso Practico <a name="practical-usage"></a>
Uso Practico <span id="practical-usage"></span>
------------
Yii crea un contenedor de ID cuando se incluye el archivo `Yii.php` en el
......@@ -300,7 +300,7 @@ instanciada. Esto se debe a que necesitamos indicar al contenedor de ID como tra
Ahora si se accede al contenedor nuevamente, se creará una instancia de `app\components\BookingService` y se inyectará
a como tercer parámetro al constructor del controlador.
Cuando Registrar Dependencias <a name="when-to-register-dependencies"></a>
Cuando Registrar Dependencias <span id="when-to-register-dependencies"></span>
-----------------------------
El registro de dependencias debe hacerse lo antes posible debido a que las dependencias se necesitan cuando se crean
......@@ -311,7 +311,7 @@ nuevos objetos. A continuación se listan practicas recomendadas:
* Siendo desarrolladores de una [extension](structure-extensions.md) redistribuible, podemos registrar dependencias en
la clase de boostraping de la extensión.
Resumen <a name="summary"></a>
Resumen <span id="summary"></span>
-------
Tanto la inyección de dependencias como el [localizador de servicios](concept-service-locator.md) son patrones de
......
......@@ -9,7 +9,7 @@ el correcto envío del mensaje, se puede, simplemente, añadir un código de seg
Yii introduce una clase base [[yii\base\Component]] para soportar eventos. Si una clase necesita lanzar un evento,
este debe extender a [[yii\base\Component]] o a una clase hija.
Gestor de Eventos <a name="event-handlers"></a>
Gestor de Eventos <span id="event-handlers"></span>
-----------------
Un gestor de eventos es una
......@@ -40,7 +40,7 @@ Un gestor de eventos puede obtener la siguiente información acerca de un evento
(se explicará más adelante)
Añadir Gestores de Eventos <a name="attaching-event-handlers"></a>
Añadir Gestores de Eventos <span id="attaching-event-handlers"></span>
--------------------------
Se puede añadir un gestor a un evento llamando al método [[yii\base\Component::on()]]. Por ejemplo:
......@@ -104,7 +104,7 @@ $foo->on(Foo::EVENT_HELLO, function ($event) {
}, $data, false);
```
Lanzamiento de Eventos <a name="triggering-events"></a>
Lanzamiento de Eventos <span id="triggering-events"></span>
----------------------
Los eventos se lanzan llamando al método [[yii\base\Component::trigger()]]. El método requiere un *nombre de evento*,
......@@ -169,7 +169,7 @@ class Mailer extends Component
Cuando se lanza el método [[yii\base\Component::trigger()]], se ejecutarán todos los gestores adjuntos al evento.
Desadjuntar Gestores de Evento <a name="detaching-event-handlers"></a>
Desadjuntar Gestores de Evento <span id="detaching-event-handlers"></span>
------------------------------
Para desadjuntar un gestor de un evento, se puede ejecutar el método [[yii\base\Component::off()]]. Por ejemplo:
......@@ -199,7 +199,7 @@ parámetro:
$foo->off(Foo::EVENT_HELLO);
```
Nivel de Clase (Class-Level) Gestores de Eventos <a name="class-level-event-handlers"></a>
Nivel de Clase (Class-Level) Gestores de Eventos <span id="class-level-event-handlers"></span>
------------------------------------------------
En las subsecciones anteriores se ha descrito como adjuntar un gestor a un evento a *nivel de instancia*. A veces, se
......@@ -260,7 +260,7 @@ Event::off(Foo::className(), Foo::EVENT_HELLO, $handler);
Event::off(Foo::className(), Foo::EVENT_HELLO);
```
Eventos Globales <a name="global-events"></a>
Eventos Globales <span id="global-events"></span>
----------------
Yii soporta los llamados *eventos globales*, que en realidad es un truco basado en el gestor de eventos descrito
......
......@@ -206,7 +206,7 @@ $connection->createCommand()->update('user', ['status' => 1], 'age > 30')->execu
$connection->createCommand()->delete('user', 'status = 0')->execute();
```
Entrecomillado de los Nombres de las Tablas y las Columnas <a name="quoting-table-and-column-names"></a>
Entrecomillado de los Nombres de las Tablas y las Columnas <span id="quoting-table-and-column-names"></span>
----------------------------------------------------------
Para hacer que los nombres de las columnas y las tablas sean seguros para usarse en las consultas, se puede utilizar Yii
......
......@@ -5,7 +5,7 @@ Adicionalmente al [rico conjunto de funciones para arrays de PHP](http://php.net
métodos estáticos adicionales permitiendo trabajar con arrays de manera más eficiente.
## Devolviendo Valores <a name="getting-values"></a>
## Devolviendo Valores <span id="getting-values"></span>
Recuperar valores de un array, un objeto o una estructura compleja usando PHP estándar es bastante
repetitivo. Tienes que comprobar primero si una clave existe con `isset`, después devolver el valor si existe, si no,
......@@ -64,7 +64,7 @@ Después de ejecutar el código el `$array` contendrá `['options' => [1, 2]]` y
`getValue`, `remove` solo soporta nombres clave simples.
## Comprobando la Existencia de Claves <a name="checking-existence-of-keys"></a>
## Comprobando la Existencia de Claves <span id="checking-existence-of-keys"></span>
`ArrayHelper::keyExists` funciona de la misma manera que [array_key_exists](http://php.net/manual/es/function.array-key-exists.php)
excepto que también soporta case-insensitive para la comparación de claves. Por ejemplo,
......@@ -83,7 +83,7 @@ if (!ArrayHelper::keyExists('username', $data1, false) || !ArrayHelper::keyExist
}
```
## Recuperando Columnas <a name="retrieving-columns"></a>
## Recuperando Columnas <span id="retrieving-columns"></span>
A menudo necesitas obtener unos valores de una columna de las filas de datos u objetos de un array. Un ejemplo común es obtener una lista de IDs.
......@@ -107,7 +107,7 @@ $result = ArrayHelper::getColumn($array, function ($element) {
```
## Re-indexar Arrays <a name="reindexing-arrays"></a>
## Re-indexar Arrays <span id="reindexing-arrays"></span>
Con el fin de indexar un array según una clave especificada, se puede usar el método `index`. La entrada del array debe ser
multidimensional o un array de objetos. La clave puede ser un nombre clave del sub-array, un nombre de una propiedad del objeto, o
......@@ -134,7 +134,7 @@ $result = ArrayHelper::index($array, function ($element) {
```
## Construyendo Mapas (Maps) <a name="building-maps"></a>
## Construyendo Mapas (Maps) <span id="building-maps"></span>
Con el fin de construir un mapa (pareja clave-valor) de un array multidimensional o un array de objetos puedes usar el método `map`.
Los parámetros `$from` y `$to` especifican los nombres de las claves o los nombres de las propiedades que serán configuradas en el mapa. Opcionalmente, se puede
......@@ -169,7 +169,7 @@ $result = ArrayHelper::map($array, 'id', 'name', 'class');
```
## Ordenamiento Multidimensional <a name="multidimensional-sorting"></a>
## Ordenamiento Multidimensional <span id="multidimensional-sorting"></span>
El método `multisort` ayuda a ordenar un array de objetos o arrays anidados por una o varias claves. Por ejemplo,
......@@ -209,7 +209,7 @@ El último argumento es un PHP sort flag que toma los mismos valores que los pas
PHP [sort()](http://php.net/manual/es/function.sort.php).
## Detectando Tipos de Array <a name="detecting-array-types"></a>
## Detectando Tipos de Array <span id="detecting-array-types"></span>
Es muy útil saber si un array es indexado o asociativo. He aquí un ejemplo:
......@@ -224,7 +224,7 @@ echo ArrayHelper::isAssociative($associative);
```
## Codificación y Decodificación de Valores HTML <a name="html-encoding-values"></a>
## Codificación y Decodificación de Valores HTML <span id="html-encoding-values"></span>
Con el fin de codificar o decodificar caracteres especiales en un array de strings con entidades HTML puedes usar lo siguiente:
......@@ -237,7 +237,7 @@ Solo los valores se codifican por defecto. Pasando como segundo argumento `false
La codificación utilizará el charset de la aplicación y podría ser cambiado pasandole un tercer argumento.
## Fusionando Arrays <a name="merging-arrays"></a>
## Fusionando Arrays <span id="merging-arrays"></span>
```php
/**
......@@ -257,7 +257,7 @@ La codificación utilizará el charset de la aplicación y podría ser cambiado
```
## Convirtiendo Objetos a Arrays <a name="converting-objects-to-arrays"></a>
## Convirtiendo Objetos a Arrays <span id="converting-objects-to-arrays"></span>
A menudo necesitas convertir un objeto o un array de objetos a un array. El caso más común es convertir los modelos de
active record con el fin de servir los arrays de datos vía API REST o utilizarlos de otra manera. El siguiente código
......
......@@ -10,14 +10,14 @@ que proporciona un conjunto de métodos estáticos para gestionar las etiquetas
> Nota: Si el marcado es casi estático, es preferible usar HTML directamente. No es necesario encapsularlo todo con
llamadas a la clase auxiliar Html.
## Lo fundamental <a name="basics"></a>
## Lo fundamental <span id="basics"></span>
Teniendo en cuenta que la construcción de HTML dinámico mediante la concatenación de cadenas de texto se complica
rápidamente, Yii proporciona un conjunto de métodos para manipular las opciones de etiquetas y la construcción de las
mismas basadas en estas opciones.
### Generación de etiquetas <a name="generating-tags"></a>
### Generación de etiquetas <span id="generating-tags"></span>
El código de generación de etiquetas es similar al siguiente:
......@@ -53,7 +53,7 @@ gestión adicional que se debe conocer:
`'data' => ['params' => ['id' => 1, 'name' => 'yii'], 'status' => 'ok']` se convierte en
`data-params='{"id":1,"name":"yii"}' data-status="ok"`.
### Formación de clases y estilos dinámicamente <a name="forming-css"></a>
### Formación de clases y estilos dinámicamente <span id="forming-css"></span>
Cuando se construyen opciones para etiquetas HTML, a menudo nos encontramos con valores predeterminados que hay que
modificar. Para añadir o eliminar clases CSS se puede usar el siguiente ejemplo:
......@@ -92,7 +92,7 @@ corresponde a nombres y valores de la propiedad CSS correspondiente o a una cade
[[yii\helpers\Html::removeCssStyle()|removeCssStyle()]] acepta un array de propiedades que se eliminarán. Si sólo se
eliminara una propiedad, se puede especificar como una cadena de texto.
## Codificación y Decodificación del contenido <a name="encoding-and-decoding-content"></a>
## Codificación y Decodificación del contenido <span id="encoding-and-decoding-content"></span>
Para que el contenido se muestre correctamente y de forma segura con caracteres especiales HTML el contenido debe ser
......@@ -109,7 +109,7 @@ echo $userName;
$decodedUserName = Html::decode($userName);
```
## Formularios <a name="forms"></a>
## Formularios <span id="forms"></span>
El trato con el marcado de formularios es una tarea repetitiva y propensa a errores. Por esto hay un grupo de métodos
......@@ -118,7 +118,7 @@ para ayudar a gestionarlos.
> Nota: hay que considerar la opción de usar [[yii\widgets\ActiveForm|ActiveForm]] en caso de que se gestionen
formularios que requieran validaciones.
### Creando formularios <a name="creating-forms"></a>
### Creando formularios <span id="creating-forms"></span>
Se puede abrir un formulario con el método [[yii\helpers\Html::beginForm()|beginForm()]] como se muestra a
continuación:
......@@ -139,7 +139,7 @@ El cierre de la etiqueta `form` es simple:
<?= Html::endForm() ?>
```
### Botones <a name="buttons"></a>
### Botones <span id="buttons"></span>
Para generar botones se puede usar el siguiente código:
......@@ -153,7 +153,7 @@ El primer argumento para los tres métodos es el título del botón y el segundo
codificado pero si se usan datos recibidos por el usuario, deben codificarse mediante
[[yii\helpers\Html::encode()|Html::encode()]].
### Inputs <a name="input-fields"></a>
### Inputs <span id="input-fields"></span>
Hay dos grupos en los métodos input. Unos empiezan con `active` y se llaman inputs activos y los otros no empiezan
así. Los inputs activos obtienen datos del modelo y del atributo especificado y los datos de los inputs normales se
......@@ -217,7 +217,7 @@ Si no, se puede usar la lista de opciones (radio list):
<?= Html::activeRadioList($user, 'role', ArrayHelper::map($roleModels, 'id', 'name')) ?>
```
### Etiquetas y Errores <a name="labels-and-errors"></a>
### Etiquetas y Errores <span id="labels-and-errors"></span>
De forma parecida que en los inputs hay dos métodos para generar etiquetas. El activo que obtiene los datos del modelo y
el no-activo que acepta los datos directamente:
......@@ -239,7 +239,7 @@ Para mostrar un error individual:
<?= Html::error($post, 'title', ['class' => 'error']) ?>
```
### Input Names y Values <a name="input-names-and-values"></a>
### Input Names y Values <span id="input-names-and-values"></span>
Existen métodos para obtener names, IDs y values para los campos de entrada (inputs) basados en el modelo. Estos se
usan principalmente internamente pero a veces pueden resultar prácticos:
......@@ -274,7 +274,7 @@ Para obtener el nombre de atributo sin sufijos o prefijos se puede usar el sigui
echo Html::getAttributeName('dates[0]');
```
## Estilos y scripts <a name="styles-and-scripts"></a>
## Estilos y scripts <span id="styles-and-scripts"></span>
Existen dos métodos para generar etiquetas que envuelvan estilos y scripts incrustados (embebbed):
......@@ -323,7 +323,7 @@ Es igual que con las CSS, el primer argumento especifica el enlace al fichero qu
pueden pasar como segundo argumento. En las opciones se puede especificar `condition` del mismo modo que se puede usar
para `cssFile`.
## Enlaces <a name="hyperlinks"></a>
## Enlaces <span id="hyperlinks"></span>
Existe un método para generar hipervínculos a conveniencia:
......@@ -343,7 +343,7 @@ Si se requiere generar enlaces de tipo `mailto` se puede usar el siguiente códi
<?= Html::mailto('Contact us', 'admin@example.com') ?>
```
## Imagenes <a name="images"></a>
## Imagenes <span id="images"></span>
Para generar una etiqueta de tipo imagen se puede usar el siguiente ejemplo:
......@@ -359,7 +359,7 @@ genera
Aparte de los [alias](concept-aliases.md) el primer argumento puede aceptar rutas, parámetros y URLs. Del mismo modo
que [Url::to()](helper-url.md).
## Listas <a name="lists"></a>
## Listas <span id="lists"></span>
Las listas desordenadas se puede generar como se muestra a continuación:
......
......@@ -40,7 +40,7 @@ Las siguientes clases helper del núcleo son proporcionadas en los releases de Y
- VarDumper
Personalizando Las Clases Helper <a name="customizing-helper-classes"></a>
Personalizando Las Clases Helper <span id="customizing-helper-classes"></span>
--------------------------------
Para personalizar una clase helper del núcleo (ej. [[yii\helpers\ArrayHelper]]), deberías crear una nueva clase extendiendo
......
......@@ -111,7 +111,7 @@ y entonces ejecutar la acción. La identidad del usuario autenticado puede ser r
Si la autenticación falla, una respuesta con estado HTTP 401 será devuelta junto con otras cabeceras apropiadas (tal como la cabecera para autenticación básica HTTP `WWW-Authenticate`).
## Autorización <a name="authorization"></a>
## Autorización <span id="authorization"></span>
Después de que un usuario se ha autenticado, probablementer querrás comprobar si él o ella tiene los permisos para realizar
la acción solicitada. Este proceso es llamado *autorización (authorization)* y está cubierto en detalle en la [Sección de Autorización](security-authorization.md).
......
......@@ -25,7 +25,7 @@ algunas de las cuales se describen en detalle en las siguientes secciones:
* La autorización del usuario de acuerdo a la acción y recurso solicitado.
## Creando Clases de Controlador <a name="creating-controller"></a>
## Creando Clases de Controlador <span id="creating-controller"></span>
Al crear una nueva clase de controlador, una convención para nombrar la clase del controlador es utilizar
el nombre del tipo de recurso en singular. Por ejemplo, para servir información de usuario,
......@@ -45,7 +45,7 @@ public function actionView($id)
```
## Filtros <a name="filters"></a>
## Filtros <span id="filters"></span>
La mayoría de las características API REST son proporcionadas por [[yii\rest\Controller]] son implementadas en los términos de [filtros](structure-filters.md).
En particular, los siguientes filtros se ejecutarán en el orden en que aparecen:
......@@ -76,14 +76,14 @@ public function behaviors()
```
## Extendiendo `ActiveController` <a name="extending-active-controller"></a>
## Extendiendo `ActiveController` <span id="extending-active-controller"></span>
Si tu clase controlador extiende de [[yii\rest\ActiveController]], debe establecer
su propiedad [[yii\rest\ActiveController::modelClass||modelClass]] con el nombre de la clase del recurso
que planeas servir a través de este controlador. La clase debe extender de [[yii\db\ActiveRecord]].
### Personalizando Acciones <a name="customizing-actions"></a>
### Personalizando Acciones <span id="customizing-actions"></span>
Por defecto, [[yii\rest\ActiveController]] provee de las siguientes acciones:
......@@ -120,7 +120,7 @@ public function prepareDataProvider()
Por favor, consulta las referencias de clases de acciones individuales para aprender las opciones de configuración disponibles para cada una.
### Realizando Comprobación de Acceso <a name="performing-access-check"></a>
### Realizando Comprobación de Acceso <span id="performing-access-check"></span>
Al exponer los recursos a través de RESTful APIs, a menudo es necesario comprobar si el usuario actual tiene permiso
para acceder y manipular el/los recurso solicitado/s. Con [[yii\rest\ActiveController]], esto puede lograrse
......
......@@ -40,7 +40,7 @@ La siguiente lista sumariza los códigos de estado HTTP que son usados por el fr
* `500`: Error interno del servidor. Esto puede estar causado por errores internos del programa.
## Personalizando la Respuesta al Error <a name="customizing-error-response"></a>
## Personalizando la Respuesta al Error <span id="customizing-error-response"></span>
A veces puedes querer personalizar el formato de la respuesta del error por defecto . Por ejemplo, en lugar de depender
del uso de diferentes estados HTTP para indicar los diferentes errores, puedes querer usar siempre el estado HTTP 200
......
......@@ -23,7 +23,7 @@ Supongamos que deseas exponer los datos de los usuarios vía APIs RESTful. Los d
y ya tienes creado la clase [[yii\db\ActiveRecord|ActiveRecord]] `app\models\User` para acceder a los datos del usuario.
## Creando un controlador <a name="creating-controller"></a>
## Creando un controlador <span id="creating-controller"></span>
Primero, crea una clase controladora `app\controllers\UserController` como la siguiente,
......@@ -42,7 +42,7 @@ La clase controladora extiende de [[yii\rest\ActiveController]]. Especificado po
como `app\models\User`, el controlador sabe que modelo puede ser usado para recoger y manipular sus datos.
## Configurando las reglas de las URL <a name="configuring-url-rules"></a>
## Configurando las reglas de las URL <span id="configuring-url-rules"></span>
A continuación, modifica la configuración del componente `urlManager` en la configuración de tu aplicación:
......@@ -61,7 +61,7 @@ La configuración anterior principalmente añade una regla URL para el controlad
que los datos de user pueden ser accedidos y manipulados con URLs amigables y verbos HTTP significativos.
## Habilitando entradas JSON <a name="enabling-json-input"></a>
## Habilitando entradas JSON <span id="enabling-json-input"></span>
Para permitir que la API acepte datos de entrada con formato JSON, configura la propiedad [[yii\web\Request::$parsers|parsers]]
del componente de aplicación `request` para usar [[yii\web\JsonParser]] para entradas JSON:
......@@ -78,7 +78,7 @@ del componente de aplicación `request` para usar [[yii\web\JsonParser]] para en
`application/x-www-form-urlencoded` y `multipart/form-data` como formatos de entrada.
## Probándolo <a name="trying-it-out"></a>
## Probándolo <span id="trying-it-out"></span>
Con la mínima cantidad de esfuerzo, tienes ya finalizado tu tarea de crear las APIs RESTful
para acceder a los datos de user. Las APIs que tienes creado incluyen:
......@@ -188,7 +188,7 @@ Por ejemplo, la URL `http://localhost/users?fields=id,email` sólo devolverá lo
> Puedes y deberías filtrar estos campos como se describe en la sección [Response Formatting](rest-response-formatting.md).
## Resumen <a name="summary"></a>
## Resumen <span id="summary"></span>
Utilizando el framework Yii API RESTful, implementa un punto final API en términos de una acción de un controlador, y utiliza
un controlador para organizar las acciones que implementan los puntos finales para un sólo tipo de recurso.
......
......@@ -12,7 +12,7 @@ Mientras que no hay restricción a cómo representar un recurso, en YII usualmen
En esta sección, vamos principalmente a describir como la clase con recursos que extiende de [[yii\base\Model]] (o sus clases hijas) puede especificar qué datos puede ser devueltos vía las APIs RESTful. Si la clase de los recursos no extiende de [[yii\base\Model]], entonces todas las variables públicas miembro serán devueltas.
## Campos (fields) <a name="fields"></a>
## Campos (fields) <span id="fields"></span>
Cuando incluimos un recurso en una respuesta de la API RESTful, el recurso necesita ser serializado en una cadena.
Yii divide este proceso en dos pasos. Primero, el recurso es convertido en un array por [[yii\rest\Serializer]].
......@@ -37,7 +37,7 @@ http://localhost/users?fields=id,email&expand=profile
```
### Sobreescribiendo `fields()` <a name="overriding-fields"></a>
### Sobreescribiendo `fields()` <span id="overriding-fields"></span>
Por defecto, [[yii\base\Model::fields()]] devuelve todos los atributos de los modelos como si fueran campos, mientras [[yii\db\ActiveRecord::fields()]] sólo devuelve los atributos que tengan datos en la base de datos.
......@@ -79,7 +79,7 @@ public function fields()
> quitar `auth_key`, `password_hash` y `password_reset_token`.
### Sobreescribiendo `extraFields()` <a name="overriding-extra-fields"></a>
### Sobreescribiendo `extraFields()` <span id="overriding-extra-fields"></span>
Por defecto, [[yii\base\Model::extraFields()]] no devuelve nada, mientras que [[yii\db\ActiveRecord::extraFields()]] devuelve los nombres de las relaciones que tienen datos (populated) obtenidos de la base de datos.
......@@ -114,7 +114,7 @@ la petición `http://localhost/users?fields=id,email&expand=profile` puede devol
```
## Enlaces (Links) <a name="links"></a>
## Enlaces (Links) <span id="links"></span>
[HATEOAS](http://en.wikipedia.org/wiki/HATEOAS), es una abreviación de Hipermedia es el Motor del Estado de la Aplicación (Hypermedia as the Engine of Application State), promueve que las APIs RESTfull devuelvan información que permita a los clientes descubrir las acciones que soportan los recursos devueltos. El sentido de HATEOAS es devolver un conjunto de hiperenlaces con relación a la información, cuando los datos de los recursos son servidos por las APIs.
......@@ -152,7 +152,7 @@ Cuando un objeto `User` es devuelto en una respuesta, puede contener un elemento
```
## Colecciones <a name="collections"></a>
## Colecciones <span id="collections"></span>
Los objetos de los recursos pueden ser agrupados en *collections*. Cada colección contiene una lista de recursos objeto del mismo tipo.
......
......@@ -13,7 +13,7 @@ con el formato de la respuesta:
componente de la aplicación [[yii\web\Response::formatters|response]].
## Negociación de contenido (Content Negotiation) <a name="content-negotiation"></a>
## Negociación de contenido (Content Negotiation) <span id="content-negotiation"></span>
Yii soporta la negociación de contenido a través del filtro [[yii\filters\ContentNegotiator]]. La clase de controlador base
del API RESTful [[yii\rest\Controller]] está equipada con este filtro bajo el nombre `contentNegotiator`.
......@@ -81,7 +81,7 @@ Las claves de la propiedad `formats` son los tipos MIME soportados, mientras que
los cuales deben ser soportados en [[yii\web\Response::formatters]].
## Serialización de Datos <a name="data-serializing"></a>
## Serialización de Datos <span id="data-serializing"></span>
Como hemos descrito antes, [[yii\rest\Serializer]] es la pieza central responsable de convertir
objetos recurso o colecciones en arrays. Reconoce objetos tanto implementando [[yii\base\ArrayableInterface]]
......
......@@ -15,7 +15,7 @@ El [[yii\web\ErrorHandler|error handler]] esta habilitado de forma predeterminad
constante `YII_ENABLE_ERROR_HANDLER` con valor false en el
[script de entrada (entry script)](structure-entry-scripts.md) de la aplicación.
## Uso del Gestor de Errores <a name="using-error-handler"></a>
## Uso del Gestor de Errores <span id="using-error-handler"></span>
El [[yii\web\ErrorHandler|error handler]] se registra como un
[componente de aplicación](structure-application-components.md) llamado `errorHandler`. Se puede configurar en la
......@@ -61,7 +61,7 @@ use yii\web\NotFoundHttpException;
throw new NotFoundHttpException();
```
## Personalizar la Visualización de Errores <a name="customizing-error-display"></a>
## Personalizar la Visualización de Errores <span id="customizing-error-display"></span>
El [[yii\web\ErrorHandler|error handler]] ajusta la visualización del error conforme al valor de la constante
`YII_DEBUG`. Cuando `YII_DEBUG` es `true` (es decir, en modo depuración (debug)), el gestor de errores mostrara las
......@@ -85,7 +85,7 @@ Se pueden configurar las propiedades [[yii\web\ErrorHandler::errorView|errorView
[[yii\web\ErrorHandler::exceptionView|exceptionView]] el gestor de errores para usar nuestros propias vistas para
personalizar la visualización de los errores.
### Uso de Acciones de Error <a name="using-error-actions"></a>
### Uso de Acciones de Error <span id="using-error-actions"></span>
Una mejor manera de personalizar la visualización de errores es usar un [acción](structure-controllers.md) de error
dedicada. Para hacerlo, primero se debe configurar la propiedad [[yii\web\ErrorHandler::errorAction|errorAction]] del
......@@ -153,7 +153,7 @@ a las siguientes variables si se define el error como un [[yii\web\ErrorAction]]
> Información: Tanto la [plantilla de aplicación básica](start-installation.md) como la
[plantilla de aplicación avanzada](tutorial-advanced-app.md), ya incorporan la acción de error y la vista de error.
### Personalizar el Formato de Respuesta de Error <a name="error-format"></a>
### Personalizar el Formato de Respuesta de Error <span id="error-format"></span>
El gestor de errores muestra los errores de siguiente la configuración del formato de las
[respuestas](runtime-responses.md). Si el [[yii\web\Response::format response format]] es `html`, se usará la vista de
......
......@@ -16,7 +16,7 @@ Usar el framework de registro de anotaciones de Yii involucra los siguientes pas
En esta sección, se describirán principalmente los dos primeros pasos.
## Anotación de Messages <a name="log-messages"></a>
## Anotación de Messages <span id="log-messages"></span>
Registrar mensajes de anotación es tan simple como llamar a uno de los siguientes métodos de registro de anotaciones.
......@@ -60,7 +60,7 @@ linea anterior de código se llamara dentro de este método.
finalizado, el objeto de registro llamará [[yii\log\Dispatcher|message dispatcher]] para enviar los mensajes de
registro registrados a los [destiinos de registros](#log-targets).
## Destino de Registros <a name="log-targets"></a>
## Destino de Registros <span id="log-targets"></span>
Un destino de registro es una instancia de la clase [[yii\log\Target]] o de una clase hija. Este filtra los
mensajes de registro por sus niveles de severidad y sus categorías y después los exporta a algún medio. Por ejemplo,
......@@ -120,7 +120,7 @@ información de configuración y uso.
A continuación, se describirá las características más comunes de todos los destinos de registros.
### Filtrado de Mensajes <a name="message-filtering"></a>
### Filtrado de Mensajes <span id="message-filtering"></span>
Se pueden configurar las propiedades [[yii\log\Target::levels|levels]] y [[yii\log\Target::categories|categories]]
para cada destino de registros, con estas se especifican los niveles de severidad y las categorías de mensajes que
......@@ -176,7 +176,7 @@ de advertencia de las categorías que coincidan con alguno de los siguientes pat
ejemplo, la excepción [[yii\web\NotFoundHttpException]] causará un mensaje de error del tipo
`yii\web\HttpException:404`.
### Formato de los Mensajes <a name="message-formatting"></a>
### Formato de los Mensajes <span id="message-formatting"></span>
Los destinos exportan los mensajes de registro filtrados en cierto formato. Por ejemplo, is se instala un
destino de registros de la calse [[yii\log\FileTarget]], encontraremos un registro similar en el archivo de
......@@ -227,7 +227,7 @@ Se puede configurar `logVars` para que sea un array vacío para deshabilitar tot
contexto. O si se desea implementar un método propio de proporcionar información de contexto se puede sobrescribir el
método [[yii\log\Target::getContextMessage()]].
### Nivel de Seguimiento de Mensajes <a name="trace-level"></a>
### Nivel de Seguimiento de Mensajes <span id="trace-level"></span>
Durante el desarrollo, a veces se quiere visualizar de donde proviene cada mensaje de registro. Se puede lograr
configurando la propiedad [[yii\log\Dispatcher::traceLevel|traceLevel]] del componente `log` como en el siguiente
......@@ -253,7 +253,7 @@ si `YII_DEBUG` está deshabilitado, no se incluirá información de la pila de l
> Información: Obtener información de la pila de llamadas no es trivial. Por lo tanto, sólo se debe usar esta
característica durante el desarrollo o cuando se depura la aplicación.
### Liberación (Flushing) y Exportación de Mensajes <a name="flushing-exporting"></a>
### Liberación (Flushing) y Exportación de Mensajes <span id="flushing-exporting"></span>
Como se ha comentado anteriormente, los mensajes de registro se mantienen en un array por el
[[yii\log\Logger|logger object]]. Para limitar el consumo de memoria de este array, el componente encargado del
......@@ -315,7 +315,7 @@ return [
> Nota: El uso frecuente de liberación y exportación puede degradar el rendimiento de la aplicación.
### Conmutación de Destinos de Registros <a name="toggling-log-targets"></a>
### Conmutación de Destinos de Registros <span id="toggling-log-targets"></span>
Se puede habilitar o deshabilitar un destino de registro configuración su propiedad
[[yii\log\Target::enabled|enabled]]. Esto se puede llevar a cabo a mediante la configuración del destino de
......@@ -346,14 +346,14 @@ return [
];
```
### Creación de Nuevos Destinos <a name="new-targets"></a>
### Creación de Nuevos Destinos <span id="new-targets"></span>
La creación de nuevas clases de destinos de registro es muy simple. Se necesita implementar el método
[[yii\log\Target::export()]] enviando el contenido del array [[yii\log\Target::messages]] al medio designado. Se puede
llamar al método [[yii\log\Target::formatMessage()]] para formatear los mensajes. Se pueden encontrar más detalles de
destinos de registros en las clases incluidas en la distribución de Yii.
## Perfilado de Rendimiento <a name="performance-profiling"></a>
## Perfilado de Rendimiento <span id="performance-profiling"></span>
El Perfilado de rendimiento es un tipo especial de registro de mensajes que se usa para medir el tiempo que tardan en
ejecutarse ciertos bloques de código y encontrar donde están los cuellos de botella de rendimiento. Por ejemplo, la
......
......@@ -7,7 +7,7 @@ objeto request correspondiente a través del [componente de aplicación](structu
que, por defecto, es una instancia de [[yii\web\Request]]. En esta sección se describirá como hacer uso de este
componente en las aplicaciones.
## Parámetros de Request <a name="request-parameters"></a>
## Parámetros de Request <span id="request-parameters"></span>
Para obtener los parámetros de la petición, se puede llamar a los métodos [[yii\web\Request::get()|get()]] y
[[yii\web\Request::post()|post()]] del componente `request`. Estos devuelven los valores de `$_GET` y `$_POST`,
......@@ -58,7 +58,7 @@ $param = $request->getBodyParam('id');
se acceda a él a través de los métodos descritos anteriormente. Se puede personalizar la manera en como los
parámetros se convierten configurando la propiedad [[yii\web\Request::parsers]].
## Métodos de Request <a name="request-methods"></a>
## Métodos de Request <span id="request-methods"></span>
Se puede obtener el método HTTP usado por la petición actual a través de la expresión `Yii::$app->request->method`. Se
proporcionan un conjunto de propiedades booleanas para comprobar si el método actual es de un cierto tipo. Por ejemplo:
......@@ -72,7 +72,7 @@ if ($request->isPost) { // el método de la request es POST }
if ($request->isPut) { // el método de la request es PUT }
```
## URLs de Request <a name="request-urls"></a>
## URLs de Request <span id="request-urls"></span>
El componente `request` proporciona muchas maneras de inspeccionar la URL solicitada actualmente.
......@@ -95,7 +95,7 @@ varias partes de la URL explicadas en los siguientes puntos:
* [[yii\web\Request::serverName|serverName]]: devuelve `example.com`, que es el nombre del host dentro de la URL.
* [[yii\web\Request::serverPort|serverPort]]: devuelve 80, que es el puerto que usa el servidor web.
## Cabeceras HTTP <a name="http-headers"></a>
## Cabeceras HTTP <span id="http-headers"></span>
Se pueden obtener la información de las cabeceras HTTP a través de [[yii\web\HeaderCollection|header collection]]
devueltas por la propiedad [[yii\web\Request::headers]]. Por ejemplo:
......@@ -130,7 +130,7 @@ lista de idiomas soportados por la aplicación, comparados con
diatónicamente el content type y el idioma que debe usarse en la respuesta. El filtro implementa la negociación de
contenido en la parte superior de las propiedades y métodos descritos anteriormente.
## Información del cliente <a name="client-information"></a>
## Información del cliente <span id="client-information"></span>
Se puede obtener el nombre del host y la dirección IP de la máquina cliente a través de
[[yii\web\Request::userHost|userHost]] y [[yii\web\Request::userIP|userIP]], respectivamente. Por ejemplo:
......
......@@ -13,7 +13,7 @@ usuario final tal y como se explica a continuación.
En esta sección, se describirá como generar y enviar respuestas a usuarios finales.
## Códigos de Estado <a name="status-code"></a>
## Códigos de Estado <span id="status-code"></span>
Una de las primeras cosas que debería hacerse cuando se genera una respuesta es indicar si la petición se ha
gestionado correctamente. Esto se indica asignando la propiedad [[yii\web\Response::statusCode]] a la que se le puede
......@@ -56,7 +56,7 @@ Si la excepción que se quiere lanzar no se encuentra en la lista anterior, se p
throw new \yii\web\HttpException(402);
```
## Cabeceras HTTP <a name="http-headers"></a>
## Cabeceras HTTP <span id="http-headers"></span>
Se puede enviar cabeceras HTTP modificando el [[yii\web\Response::headers|header collection]] en el componente
`response`. Por ejemplo:
......@@ -78,7 +78,7 @@ $values = $headers->remove('Pragma');
Además, las nuevas cabeceras registradas no se enviarán al usuario hasta que se llame al método
[[yii\web\Response::send()]].
## Cuerpo de la Respuesta<a name="response-body"></a>
## Cuerpo de la Respuesta<span id="response-body"></span>
La mayoría de las respuestas deben tener un cuerpo que contenga el contenido que se quiere mostrar a los usuarios
finales.
......@@ -160,7 +160,7 @@ public function actionInfo()
`response` en la configuración de la aplicación. Sin embargo, se puede usar la
[inyección de dependencias](concept-di-container.md) para aplicar la configuración común al nuevo objeto response.
## Redirección del Navegador <a name="browser-redirection"></a>
## Redirección del Navegador <span id="browser-redirection"></span>
La redirección del navegador se basa en el envío de la cabecera HTTP `Location`. Debido a que esta característica se
usa comúnmente, Yii proporciona soporte especial para ello.
......@@ -202,7 +202,7 @@ JavaScript, incluyendo la redirección de navegador basada en la cabecera `X-Red
fichero JavaScript (registrándolo *asset bundle* [[yii\web\YiiAsset]]), no se necesitará escribir nada más para tener
soporte en redirecciones AJAX.
## Enviar Archivos <a name="sending-files"></a>
## Enviar Archivos <span id="sending-files"></span>
Igual que con la redirección, el envío de archivos es otra característica que se basa en cabeceras HTTP especificas.
Yii proporciona un conjunto de métodos para dar soporte a varias necesidades del envío de ficheros. Todos ellos
......@@ -242,7 +242,7 @@ algunos servidores Web populares.
- Nginx: [X-Accel-Redirect](http://wiki.nginx.org/XSendfile)
- Cherokee: [X-Sendfile and X-Accel-Redirect](http://www.cherokee-project.com/doc/other_goodies.html#x-sendfile)
## Enviar la Respuesta <a name="sending-response"></a>
## Enviar la Respuesta <span id="sending-response"></span>
El contenido en una respuesta no se envía al usuario hasta que se llama al método [[yii\web\Response::send()]]. De
forma predeterminada, se llama a este método automáticamente al final de [[yii\base\Application::run()]]. Sin embargo,
......
......@@ -37,7 +37,7 @@ los parámetros.
```
## Formatos de URL <a name="url-formats"></a>
## Formatos de URL <span id="url-formats"></span>
El [[yii\web\UrlManager|URL manager]] soporta dos formatos de URL: el formato predeterminado de URL y el formato URL
amigable (pretty URL).
......@@ -59,7 +59,7 @@ Se puede cambiar entre los dos formatos de URL conmutando la propiedad
[[yii\web\UrlManager::enablePrettyUrl|enablePrettyUrl]] del [[yii\web\UrlManager|URL manager]] sin cambiar ningún
otro código de aplicación.
## Enrutamiento <a name="routing"></a>
## Enrutamiento <span id="routing"></span>
El Enrutamiento involucra dos pasos. El primero, la petición (request) entrante se convierte en una ruta y sus
parámetros de consulta asociados. En el segundo paso, se crea la correspondiente
......@@ -92,7 +92,7 @@ acción. Empezando por la primera parte de la ruta, la aplicación, sigue los si
Si ocurre algún error entre alguno de los pasos anteriores, se lanzará una excepción de tipo
[[yii\web\NotFoundHttpException]], indicando el fallo de proceso de enrutamiento.
### Ruta Predeterminada <a name="default-route"></a>
### Ruta Predeterminada <span id="default-route"></span>
Cuando una petición se convierte en una ruta vacía, se usa la llamada *ruta predeterminada*. Por defecto, la ruta
predeterminada es `site/index`, que hace referencia a la acción `index` del controlador `site`. Se puede personalizar
......@@ -107,7 +107,7 @@ aplicación como en el siguiente ejemplo:
```
### Ruta `catchAll` <a name="catchall-route"></a>
### Ruta `catchAll` <span id="catchall-route"></span>
A veces, se puede querer poner la aplicación Web en modo de mantenimiento temporalmente y mostrar la misma pagina de
información para todas las peticiones. Hay varias maneras de lograr este objetivo. Pero una de las maneras más simples
......@@ -126,7 +126,7 @@ Con la anterior configuración, se usar la acción `site/offline` para gestionar
La propiedad `catchAll` debe tener un array cuyo primer elemento especifique una ruta, y el resto de elementos
(pares nombre-valor) especifiquen los parámetros [ligados a la acción](structure-controllers.md#action-parameters).
## Creación de URLs <a name="creating-urls"></a>
## Creación de URLs <span id="creating-urls"></span>
Yii proporciona un método auxiliar (helper method) [[yii\helpers\Url::to()]] para crear varios tipos de URLs a partir
de las rutas dadas y sus parámetros de consulta asociados. Por ejemplo,
......@@ -222,7 +222,7 @@ echo Url::previous();
```
## Uso de URLs Amigables <a name="using-pretty-urls"></a>
## Uso de URLs Amigables <span id="using-pretty-urls"></span>
Para utilizar URLs amigables, hay que configurar el componente `ulrManager` en la configuración de la aplicación como
en el siguiente ejemplo:
......@@ -265,7 +265,7 @@ amigable. El resto de propiedades son opcionales. Sin embargo, la anterior confi
[Instalación](start-installation.md#recommended-apache-configuration).
### Regalas de URL <a name="url-rules"></a>
### Regalas de URL <span id="url-rules"></span>
Una regla de URL es una instancia de [[yii\web\UrlRule]] o de una clase hija. Cada URL consiste en un patrón utilizado
para cotejar la parte de información de ruta de las URLs, una ruta, y algunos parámetros de consulta. Una URL puede
......@@ -317,7 +317,7 @@ De forma predeterminada si no se especifica la opción `class` en la configuraci
predeterminada [[yii\web\UrlRule]].
### Parameters Asociativos <a name="named-parameters"></a>
### Parameters Asociativos <span id="named-parameters"></span>
Una regla de URL puede asociarse a una determinado grupo de parámetros de consulta que se hayan sido especificados en
el patrón con el formato `<ParamName:RegExp>`, donde `ParamName` especifica el nombre del parámetro y `RegExp` es una
......@@ -369,7 +369,7 @@ Y cuando las se usen las reglas para crear URLs:
la parte de información de la ruta y todos los parámetros como parte de la consulta.
### Parametrización de Rutas <a name="parameterizing-routes"></a>
### Parametrización de Rutas <span id="parameterizing-routes"></span>
Se pueden incrustar nombres de parámetros en la ruta de una regla de URL. Esto permite a la regla de URL poder ser
usada para que coincida con varias rutas. Por ejemplo, la siguiente regla incrusta los parámetros `controller` y
......@@ -423,7 +423,7 @@ La regla anterior puede usarse para convertir o crear cualquiera de las siguient
Sin usar ningún parámetro opcional, se tendrían que crear 4 reglas para lograr el mismo resultado.
### Reglas con Nombres de Servidor <a name="rules-with-server-names"></a>
### Reglas con Nombres de Servidor <span id="rules-with-server-names"></span>
Es posible incluir nombres de servidores Web en los parámetros de las URLs. Esto es practico principalmente cuando una
aplicación debe tener distintos comportamientos paro diferentes nombres de servidores Web. Por ejemplo, las siguientes
......@@ -453,7 +453,7 @@ ejemplo, la siguiente regla convertirá la URL `http://en.example.com/posts` en
permitirá que la aplicación se pueda desarrollar en cualquier directorio sin la necesidad de cambiar el código de la
aplicación.
### Sufijos de URL <a name="url-suffixes"></a>
### Sufijos de URL <span id="url-suffixes"></span>
Se puede querer añadir sufijos a las URLs para varios propósitos. Por ejemplo, se puede añadir `.html`a las URLs para
que parezcan URLs para paginas HTML estáticas; también se puede querer añadir `.json` a las URLs para indicar el tipo
......@@ -512,7 +512,7 @@ siguiente configuración contiene una regla de URL personalizada que usa el sufi
```
### Métodos HTTP <a name="http-methods"></a>
### Métodos HTTP <span id="http-methods"></span>
Cuando se implementan APIs RESTful, normalmente se necesita que ciertas URLs se conviertan en otras de acuerdo con el
método HTTP que se esté usando. Esto se puede hacer fácilmente prefijando los métodos HTTP soportados como los
......@@ -538,7 +538,7 @@ convertirá en `post/view`.
el desarrollo de APIs RESTful.
### Personalización de Reglas <a name="customizing-rules"></a>
### Personalización de Reglas <span id="customizing-rules"></span>
En los anteriores ejemplos, las reglas de URL se han declarado principalmente en términos de pares de patrón-ruta.
Este es un método de acceso directo que se usa a menudo. En algunos escenarios, se puede querer personalizar la regla
......@@ -562,7 +562,7 @@ array completo de configuración para especificar una regla. El siguiente ejempl
usará la clase predeterminada [[yii\web\UrlRule]].
### Adición de Reglas Dinámicamente <a name="adding-rules"></a>
### Adición de Reglas Dinámicamente <span id="adding-rules"></span>
Las reglas de URL se pueden añadir dinámicamente en el [[yii\web\UrlManager|URL manager]]. A menudo se necesita por
[módulos](structure-modules.md) redistribubles que se encargan de gestionar sus propias reglas de URL. Para que las
......@@ -583,7 +583,7 @@ public function bootstrap($app)
Hay que tener en cuenta se deben añadir estos módulos en [[yii\web\Application::bootstrap]] para que puedan participar
en el proceso de [bootstrapping](runtime-bootstrapping.md)
### Creación de Clases de Reglas <a name="creating-rules"></a>
### Creación de Clases de Reglas <span id="creating-rules"></span>
A pesar del hecho de que de forma predeterminada la clase [[yii\web\UrlRule]] lo suficientemente flexible para la
mayoría de proyectos, hay situaciones en las que se tiene que crear una clase de reglas propia. Por ejemplo, en un
......@@ -642,7 +642,7 @@ Y usa la nueva clase de regla en la configuración de [[yii\web\UrlManager::rule
]
```
## Consideración del Rendimiento <a name="performance-consideration"></a>
## Consideración del Rendimiento <span id="performance-consideration"></span>
Cuando se desarrolla una aplicación Web compleja, es importante optimizar las reglas de URL para que tarden el mínimo
tiempo posible en convertir las peticiones y crear URLs.
......
......@@ -4,12 +4,12 @@ Sesiones (Sessions) y Cookies
Las sesiones y las cookies permiten la persistencia de datos a través de múltiples peticiones de usuario. En PHP plano, debes acceder a ellos a través de las variables globales `$_SESSION` y `$_COOKIE`, respectivamente. Yii encapsula las sesiones y las cookies como objetos y por lo tanto te permite acceder a ellos de manera orientada a objetos con estupendas mejoras adicionales.
## Sesiones <a name="sessions"></a>
## Sesiones <span id="sessions"></span>
Como las [peticiones](runtime-requests.md) y las [respuestas](runtime-responses.md), puedes acceder a las sesiones vía el [componente de la aplicación](structure-application-components.md) `session` el cual es una instancia de [[yii\web\Session]], por defecto.
### Abriendo y cerrando sesiones <a name="opening-closing-sessions"></a>
### Abriendo y cerrando sesiones <span id="opening-closing-sessions"></span>
Para abrir y cerrar una sesión, puedes hacer lo siguiente:
......@@ -32,7 +32,7 @@ $session->destroy();
Puedes llamar a [[yii\web\Session::open()|open()]] y [[yii\web\Session::close()|close()]] múltiples veces sin causar errores. Esto ocurre porque internamente los métodos verificarán primero si la sesión está ya abierta.
### Accediendo a los datos de sesión <a name="access-session-data"></a>
### Accediendo a los datos de sesión <span id="access-session-data"></span>
Para acceder a los datos almacenados en sesión, puedes hacer lo siguiente:
......@@ -114,7 +114,7 @@ $session['captcha.lifetime'] = 3600;
Para un mejor rendimiento y legibilidad del código, recomendamos la última solución. Es decir, en vez de almacenar un array como una única variable de sesión, almacena cada elemento del array como una variable de sesión que comparta el mismo prefijo clave con otros elementos del array.
### Personalizar el almacenamiento de sesión <a name="custom-session-storage"></a>
### Personalizar el almacenamiento de sesión <span id="custom-session-storage"></span>
Por defecto la clase [[yii\web\Session]] almacena los datos de sesión como ficheros en el servidor. Yii también provee de las siguientes clases de sesión que implementan diferentes almacenamientos de sesión:
......@@ -161,7 +161,7 @@ donde 'BLOB' se refiere al BLOB-type de tu DBMS preferida. Abajo está el tipo B
> Nota: De acuerdo con la configuración de php.ini `session.hash_function`, puedes necesitar ajustar el tamaño de la columna `id`. Por ejemplo, si `session.hash_function=sha256`, deberías usar el tamaño 64 en vez de 40.
### Flash Data <a name="flash-data"></a>
### Flash Data <span id="flash-data"></span>
Flash data es una clase especial de datos de sesión que, una vez se inicialice en la primera petición, estará sólo disponible durante la siguiente petición y automáticamente se borrará después. Flash data es comúnmente usado para implementar mensajes que deberían ser mostrados una vez a usuarios finales, tal como mostrar un mensaje de confirmación después de que un usuario envíe un formulario con éxito.
......@@ -207,13 +207,13 @@ $alerts = $session->getFlash('alerts');
del mismo nombre. Esto ocurre porque el último método elimina el flash data dentro del array así que puedes añadir un nuevo flash data con el mismo nombre. Como resultado, cuando llamas a [[yii\web\Session::getFlash()]], puedes encontrarte algunas veces que te está devolviendo un array mientras que otras veces te está devolviendo un string, esto depende del orden que invoques a estos dos métodos.
## Cookies <a name="cookies"></a>
## Cookies <span id="cookies"></span>
Yii representa cada cookie como un objeto de [[yii\web\Cookie]]. Tanto [[yii\web\Request]] como [[yii\web\Response]]
mantienen una colección de cookies vía la propiedad de llamada `cookies`. La colección de cookie en la antigua representación son enviadas en una petición, mientras la colección de cookie en esta última representa las cookies que van a ser enviadas al usuario.
### Leyendo Cookies <a name="reading-cookies"></a>
### Leyendo Cookies <span id="reading-cookies"></span>
Puedes recuperar las cookies en la petición actual usando el siguiente código:
......@@ -240,7 +240,7 @@ if (isset($cookies['language'])) ...
```
### Enviando Cookies <a name="sending-cookies"></a>
### Enviando Cookies <span id="sending-cookies"></span>
Puedes enviar cookies a usuarios finales usando el siguiente código:
......@@ -265,7 +265,7 @@ Además de [[yii\web\Cookie::name|name]], [[yii\web\Cookie::value|value]] las pr
> Nota: Para mayor seguridad, el valor por defecto de [[yii\web\Cookie::httpOnly]] es true. Esto ayuda a mitigar el riesgo del acceso a la cookie protegida por script desde el lado del cliente (si el navegador lo soporta). Puedes leer el [httpOnly wiki article](https://www.owasp.org/index.php/HttpOnly) para más detalles.
### Validación de la Cookie <a name="cookie-validation"></a>
### Validación de la Cookie <span id="cookie-validation"></span>
Cuando estás leyendo y enviando cookies a través de los componentes `request` y `response` como mostramos en las dos últimas subsecciones, cuentas con el añadido de seguridad de la validación de cookies el cual protege las cookies de ser modificadas en el lado del cliente. Esto se consigue con la firma de cada cookie con una cadena hash, el cual permite a la aplicación saber si una cookie ha sido modificada en el lado del cliente o no. Si es así, la cookie no será accesible a través de [[yii\web\Request::cookies|cookie collection]] del componente `request`.
......
......@@ -18,7 +18,7 @@ En particular, deberás ser capaz de crear una base de datos y saber ejecutar co
base de datos.
Preparando una Base de Datos <a name="preparing-database"></a>
Preparando una Base de Datos <span id="preparing-database"></span>
----------------------------
Para empezar, crea una base de datos llamada `yii2basic` de la cual tomarás los datos en la aplicación.
......@@ -50,7 +50,7 @@ Al final, tendrás una base de datos llamada `yii2basic`, y dentro de esta, una
registros en ella.
Configurando una conexión a la Base de Datos <a name="configuring-db-connection"></a>
Configurando una conexión a la Base de Datos <span id="configuring-db-connection"></span>
--------------------------------------------
Asegúrate de tener instalado la extensión de PHP [PDO](http://www.php.net/manual/es/book.pdo.php) y el driver
......@@ -83,7 +83,7 @@ La conexión a la base de datos realizada anteriormente puede ser accedida media
Para más información, consulta la sección [Configuraciones](concept-configurations.md).
Creando un Active Record <a name="creating-active-record"></a>
Creando un Active Record <span id="creating-active-record"></span>
------------------------
Para representar y extraer datos de la tabla `country`, crea una clase [Active Record](db-active-record.md)
......@@ -131,7 +131,7 @@ Puedes encontrar información más detallada acerca de [Active Record](db-active
puedes utilizar un método de acceso de bajo nivel llamado [Data Access Objects](db-dao.md).
Creando una Acción <a name="creating-action"></a>
Creando una Acción <span id="creating-action"></span>
------------------
Para mostrar el país a los usuarios, necesitas crear una acción. En vez de hacerlo en el controlador `site`
......@@ -188,7 +188,7 @@ Al final, la acción `index` renderiza una vista llamada `index` y le pasa los d
de paginación relacionada.
Creando una Vista <a name="creating-view"></a>
Creando una Vista <span id="creating-view"></span>
-----------------
Bajo el directorio `views`, crea primero un sub-directorio llamado `country`. Este será usado para contener
......@@ -220,7 +220,7 @@ El widget `LinkPager` muestra una lista de botones que representan las páginas
de ellas mostrará los datos de países de la página correspondiente.
Probándolo <a name="trying-it-out"></a>
Probándolo <span id="trying-it-out"></span>
----------
Para ver cómo funciona, utiliza a la siguiente URL en tu navegador:
......@@ -252,7 +252,7 @@ Entre bastidores, [[yii\data\Pagination|Pagination]] está realizando su magia.
siguientes cinco países para mostrar.
Resumen <a name="summary"></a>
Resumen <span id="summary"></span>
-------
En esta sección has aprendido cómo trabajar con una base de datos. También has aprendido cómo traer y mostrar
......
......@@ -15,7 +15,7 @@ A través de este tutorial, aprenderás
* Cómo construir un formulario HTML en una [vista](structure-views.md).
Creando un Modelo <a name="creating-model"></a>
Creando un Modelo <span id="creating-model"></span>
-----------------
Para representar los datos ingresados por un usuario, crea una clase modelo `EntryForm` cómo se muestra abajo y
......@@ -60,7 +60,7 @@ de los datos se mostrará en la propiedad [[yii\base\Model::hasErrors|hasErrors]
[[yii\base\Model::getErrors|errors]] puedes aprender cuales son los errores de validación que tiene el modelo.
Creando una Acción <a name="creating-action"></a>
Creando una Acción <span id="creating-action"></span>
------------------
Luego, crea una acción `entry` en el controlador `site`, como lo hiciste en la sección anterior.
......@@ -112,7 +112,7 @@ mostrada, y mostrará el formulario HTML junto con los mensajes de error de vali
En el código de arriba, el componente `request` es utilizado para acceder los datos `$_POST`.
Creando Vistas <a name="creating-views"></a>
Creando Vistas <span id="creating-views"></span>
--------------
Finalmente, crea dos vistas llamadas `entry-confirm` y `entry` que sean mostradas por la acción `entry`,
......@@ -160,7 +160,7 @@ y el segundo del dato "email". Después de los campos de input, el método [[yii
es llamado para general el botón de submit (enviar).
Probándolo <a name="trying-it-out"></a>
Probándolo <span id="trying-it-out"></span>
----------
Para ver cómo funciona, utiliza tu navegador para ir al siguiente URL:
......@@ -182,7 +182,7 @@ mostrando los datos que acabas de ingresar.
### Magia Explicada <a name="magic-explained"></a>
### Magia Explicada <span id="magic-explained"></span>
Te estarás preguntando cómo funciona toda esa automatización del formulario HTML, porque parece casi mágico que pueda
mostrar una etiqueta para cada campo de input y mostrar los mensajes de error si no ingresas los datos correctamente
......@@ -208,7 +208,7 @@ el siguiente código:
código de tus vistas en widgets reutilizables para simplificar el desarrollo de las vistas en un futuro.
Resumen <a name="summary"></a>
Resumen <span id="summary"></span>
-------
En esta sección, has tocado cada parte del patrón de diseño MVC. Ahora has aprendido
......
......@@ -13,7 +13,7 @@ A lo largo de este tutorial, aprenderás
* Cómo personalizar el código generado por Gii.
Comenzando con Gii <a name="starting-gii"></a>
Comenzando con Gii <span id="starting-gii"></span>
------------------
[Gii](tool-gii.md) está provisto por Yii en forma de [módulo](structure-modules.md). Puedes habilitar Gii
......@@ -47,7 +47,7 @@ http://hostname/index.php?r=gii
![Gii](images/start-gii.png)
Generando una Clase Active Record <a name="generating-ar"></a>
Generando una Clase Active Record <span id="generating-ar"></span>
---------------------------------
Para poder generar una clase Active Record con Gii, selecciona "Model Generator" (haciendo click en el vínculo que existe en la página inicial del modulo Gii). Después, completa el formulario de la siguiente manera,
......@@ -71,7 +71,7 @@ Después, verás una página de confirmación indicando que el código ha sido g
ha sido sobrescrito con el nuevo código generado.
Generando código de ABM (CRUD en inglés) <a name="generating-crud"></a>
Generando código de ABM (CRUD en inglés) <span id="generating-crud"></span>
----------------------------------------
En computación, CRUD es el acrónimo de Crear, Obtener, Actualizar y Borrar (del inglés: Create, Read, Update y Delete)
......@@ -90,7 +90,7 @@ Si has creado previamente los archivos `controllers/CountryController.php` y
`views/country/index.php` (en la sección sobre bases de datos de esta guía), asegúrate de seleccionar el checkbox "overwrite" para reemplazarlos. (Las versiones anteriores no disponían de un soporte ABM (CRUD) completo.)
Probándolo <a name="trying-it-out"></a>
Probándolo <span id="trying-it-out"></span>
----------
Para ver cómo funciona, accede desde tu navegador a la siguiente URL:
......@@ -122,7 +122,7 @@ o por si desearas personalizarlos:
sección [Gii](tool-gii.md).
Resumen <a name="summary"></a>
Resumen <span id="summary"></span>
-------
En esta sección, has aprendido a utilizar Gii para generar el código que implementa completamente las características
......
......@@ -15,7 +15,7 @@ A lo largo de este tutorial, aprenderás tres cosas:
3. Cómo una aplicación envía peticiones a las [acciones](structure-controllers.md#creating-actions).
Creando una Acción <a name="creating-action"></a>
Creando una Acción <span id="creating-action"></span>
------------------
Para la tarea "Hola", crearás una [acción](structure-controllers.md#creating-actions) `say` que lee
......@@ -70,7 +70,7 @@ El resultado es devuelto al método de la acción. Ese resultado será recibido
navegador (como parte de una página HTML completa).
Creando una Vista <a name="creating-view"></a>
Creando una Vista <span id="creating-view"></span>
-----------------
Las [vistas](structure-views.md) son scripts que escribes para generar una respuesta de contenido.
......@@ -95,7 +95,7 @@ De hecho, la vista `say` es sólo un script PHP que es ejecutado por el método
El contenido impreso por el script de la vista será regresado a la aplicación como la respuesta del resultado. La aplicación a cambio mostrará el resultado al usuario final.
Probándolo <a name="trying-it-out"></a>
Probándolo <span id="trying-it-out"></span>
----------
Después de crear la acción y la vista, puedes acceder a la nueva página abriendo el siguiente URL:
......@@ -127,7 +127,7 @@ el método `SiteController::actionSay()` será llamado para manejar el requerimi
al nombre de clase del controlador `PostComentarioController`.
Resumen <a name="summary"></a>
Resumen <span id="summary"></span>
-------
En esta sección, has tocado las partes del controlador y la vista del patrón de diseño MVC.
......
......@@ -7,7 +7,7 @@ Es preferible usar la primera forma, ya que te permite instalar [extensiones](st
> Nota: A diferencia de Yii 1, la instalación estándar de Yii 2 resulta en la descarga e instalación tanto del framework como del esqueleto de la aplicación.
Instalando a través de Composer <a name="installing-via-composer"></a>
Instalando a través de Composer <span id="installing-via-composer"></span>
-------------------------------
Si aún no tienes Composer instalado, puedes hacerlo siguiendo las instrucciones que se encuentran en
......@@ -39,7 +39,7 @@ El comando anterior instala Yii dentro del directorio `basic`.
> Ten en cuenta que la versión de desarrollo de Yii no debería ser usada para producción ya que podría romper el funcionamiento actual de la aplicación.
Instalando desde un Archivo Comprimido <a name="installing-from-archive-file"></a>
Instalando desde un Archivo Comprimido <span id="installing-from-archive-file"></span>
--------------------------------------
Instalar Yii desde un archivo comprimido involucra dos pasos:
......@@ -48,7 +48,7 @@ Instalar Yii desde un archivo comprimido involucra dos pasos:
2. Descomprimirlo en un directorio accesible vía Web.
Otras Opciones de Instalación <a name="other-installation-options"></a>
Otras Opciones de Instalación <span id="other-installation-options"></span>
-----------------------------
Las instrucciones anteriores muestran cómo instalar Yii, lo que también crea una aplicación Web lista para ser usada.
......@@ -62,7 +62,7 @@ Pero también hay otras opciones de instalación disponibles:
deberías considerar instalar el [Template de Aplicación Avanzada](tutorial-advanced-app.md).
Verificando las Instalación <a name="verifying-installation"></a>
Verificando las Instalación <span id="verifying-installation"></span>
---------------------------
Después de la instalación, puedes acceder a la aplicación instalada a través de la siguiente URL:
......@@ -92,7 +92,7 @@ También deberías instalar la [Extensión de PHP PDO](http://www.php.net/manual
(como `pdo_mysql` para bases de datos MySQL), si tu aplicación lo necesitara.
Configurando Servidores Web <a name="configuring-web-servers"></a>
Configurando Servidores Web <span id="configuring-web-servers"></span>
---------------------------
> Información: Puedes saltear esta sección por ahora si sólo estás probando Yii sin intención de poner la aplicación en un servidor de producción.
......@@ -115,7 +115,7 @@ la configuración del servidor Web, aún puedes ajustar la estructura de la apli
la sección [Entorno de Hosting Compartido](tutorial-shared-hosting.md) para más detalles.
### Configuración Recomendada de Apache <a name="recommended-apache-configuration"></a>
### Configuración Recomendada de Apache <span id="recommended-apache-configuration"></span>
Utiliza la siguiente configuración del archivo `httpd.conf` de Apache dentro de la configuración del virtual host. Ten en cuenta
que deberás reemplazar `path/to/basic/web` con la ruta real a `basic/web`.
......@@ -138,7 +138,7 @@ DocumentRoot "path/to/basic/web"
```
### Configuración Recomendada de Nginx <a name="recommended-nginx-configuration"></a>
### Configuración Recomendada de Nginx <span id="recommended-nginx-configuration"></span>
Deberías haber instalado PHP como un [FPM SAPI](http://php.net/install.fpm) para utilizar [Nginx](http://wiki.nginx.org/).
Utiliza la siguiente configuración de Nginx, reemplazando `path/to/basic/web` con la ruta real a `basic/web` y `mysite.local` con el
......
......@@ -12,7 +12,7 @@ y cómo la aplicación maneja los requests en general.
Dependiendo de tus necesidades, por favor ajusta dichas URLs.
Funcionalidad <a name="functionality"></a>
Funcionalidad <span id="functionality"></span>
-------------
La aplicación básica contiene 4 páginas:
......@@ -32,7 +32,7 @@ Esta es la útil [herramienta de depuración](tool-debugger.md) provista por Yii
tal como los mensajes de log, response status, las consultas ejecutadas a la base de datos, y más.
Estructura de la aplicación <a name="application-structure"></a>
Estructura de la aplicación <span id="application-structure"></span>
---------------------------
Los archivos y directorios más importantes en tu aplicación son (asumiendo que la raíz de la aplicación es `basic`):
......@@ -74,7 +74,7 @@ y la envía al resto de los elementos MVC. Los [widgets](structure-widgets.md) s
para ayudar a construir elementos de interfáz complejos y dinámicos.
Ciclo de Vida de una Petición (Request) <a name="request-lifecycle"></a>
Ciclo de Vida de una Petición (Request) <span id="request-lifecycle"></span>
---------------------------------------
El siguiente diagrama muestra cómo una aplicación maneja una petición.
......
......@@ -48,7 +48,7 @@ Por ejemplo:
y utilizarlo únicamente cuando sea necesario.
## Componentes del Núcleo de la Aplicación <a name="core-application-components"></a>
## Componentes del Núcleo de la Aplicación <span id="core-application-components"></span>
Yii define un grupo de componentes del *núcleo* con IDs fijos y configuraciones por defecto. Por ejemplo,
el componente [[yii\web\Application::request|request]] es utilizado para recolectar información acerca
......
......@@ -11,13 +11,13 @@ de tener que buscar los archivos e incluirlos manualmente. Y cuando se actualice
usará de forma automática la nueva versión de los archivos asset.
En este tutorial, se describirá la poderosa capacidad que proporciona la gestión de assets en Yii.
## Asset Bundles <a name="asset-bundles"></a>
## Asset Bundles <span id="asset-bundles"></span>
Yii gestiona los assets en unidades de *asset bundle*. Un asset bundle es simplemente un conjunto de assets
localizados en un directorio. Cuando se registra un asset bundle en una [vista](structure-views.md), éste incluirá los
archivos CSS y JavaScript del bundle en la página Web renderizada.
## Definición de Asset Bundles <a name="defining-asset-bundles"></a>
## Definición de Asset Bundles <span id="defining-asset-bundles"></span>
Los asset bundles son descritos como clases PHP que extienden a [[yii\web\AssetBundle]]. El nombre del bundle es
simplemente su correspondiente nombre de la classe PHP que debe ser [autocargable](concept-autoloading.md). En una
......@@ -89,7 +89,7 @@ A continuación se explicarán más detalladamente las propiedades del [[yii\web
directorio Web.
Solo se usa si se especifica la propiedad [[yii\web\AssetBundle::sourcePath|sourcePath]].
### Ubicación de los Assets <a name="asset-locations"></a>
### Ubicación de los Assets <span id="asset-locations"></span>
Según la localización de los assets, se pueden clasificar como:
......@@ -118,7 +118,7 @@ fuente, en directorios que no son accesibles para la Web, se tiene que especific
por defecto por el [[yii\web\AssetManager|asset manager]] para guardar los archivos asset publicados temporalmente y
pueden ser eliminados.
### Dependencias de los Asset <a name="asset-dependencies"></a>
### Dependencias de los Asset <span id="asset-dependencies"></span>
Cuando se incluyen múltiples archivos CSS o JavaScript en una página Web, tienen que cumplir ciertas órdenes para
evitar problemas de sobrescritura. Por ejemplo, si se usa un widget jQuery UI en una página Web, tenemos que
......@@ -133,7 +133,7 @@ que los archivos de los dos bundles dependientes.
Las dependencias son transitivas. Esto significa, que si un bundle A depende de un bundle B que depende de C, A
dependerá de C, también.
### Opciones de los Assets <a name="asset-options"></a>
### Opciones de los Assets <span id="asset-options"></span>
Se pueden especificar las propiedades [[yii\web\AssetBundle::cssOptions|cssOptions]] y
[[yii\web\AssetBundle::jsOptions|jsOptions]] para personalizar la forma en que los archivos CSS y JavaScript serán
......@@ -205,7 +205,7 @@ class FontAwesomeAsset extends AssetBundle
El ejemplo anterior define un asset bundle para el ["fontawesome" package](http://fontawesome.io/). Especificando
la opción de publicación `beforeCopy`, solo los subdirectorios `fonts` y `css` serán publicados.
### Bower y NPM Assets <a name="bower-npm-assets"></a>
### Bower y NPM Assets <span id="bower-npm-assets"></span>
La mayoría de paquetes JavaScript/CSS se gestionan con [Bower](http://bower.io/) y/o [NPM](https://www.npmjs.org/).
Si tu aplicación o extensión usa estos paquetes, se recomienda seguir los siguientes pasos para gestionar los assets en
......@@ -223,7 +223,7 @@ Si tu aplicación o extensión usa estos paquetes, se recomienda seguir los sigu
subdirectorio como valor del [[yii\web\AssetBundle::sourcePath|sourcePath]]. Por ejemplo, [[yii\web\JqueryAsset]]
usa `@bower/jquery/dist` en vez de `@bower/jquery`.
## Uso de Asset Bundles <a name="using-asset-bundles"></a>
## Uso de Asset Bundles <span id="using-asset-bundles"></span>
Para usar un asset bundle, debe registrarse con una [vista](structure-views.md) llamando al método
[[yii\web\AssetBundle::register()]]. Por ejemplo, en plantilla de vista se puede registrar un asset bundle como en el
......@@ -249,7 +249,7 @@ los archivos CSS y JavaScript listados en los bundles registrados. El orden de e
las dependencias entre los bundles registrados y los otros assets listados en las propiedades
[[yii\web\AssetBundle::css]] y [[yii\web\AssetBundle::js]].
### Personalización de Asset Bundles <a name="customizing-asset-bundles"></a>
### Personalización de Asset Bundles <span id="customizing-asset-bundles"></span>
Yii gestiona los asset bundles a través de un componente de aplicación llamado `assetManager` que está implementado
por [[yii\web\AssetManager]]. Configurando la propiedad [[yii\web\AssetManager::bundles]], se puede personalizar el
......@@ -311,7 +311,7 @@ return [
Además se pueden deshabilitar *todos* los asset bundles asignando `false` a [[yii\web\AssetManager::bundles]].
### Mapeo de Assets (Asset Mapping) <a name="asset-mapping"></a>
### Mapeo de Assets (Asset Mapping) <span id="asset-mapping"></span>
A veces se puede querer "arreglar" rutas de archivos incorrectos/incompatibles usadas en múltiples asset bundles.
Por ejemplo, el bundle A usa `jquery.min.js` con versión 1.11.1, y el bundle B usa `jquery.js` con versión 2.11.1.
......@@ -343,7 +343,7 @@ Por ejemplo, un archivo asset `mi/ruta/a/jquery.js` concuerda con la clave `jque
> Nota: Sólo los assets especificados usando rutas relativas están sujetos al mapeo de assets. Y las rutas de los
assets destino deben ser tanto URLs absolutas o rutas relativas a [[yii\web\AssetManager::basePath]].
### Publicación de Asset <a name="asset-publishing"></a>
### Publicación de Asset <span id="asset-publishing"></span>
Como se ha comentado anteriormente, si un asset bundle se encuentra en un directorio que no es accesible por la Web,
este asset será copiado a un directorio Web cuando se registre el bundle con una vista. Este proceso se llama
......@@ -371,7 +371,7 @@ return [
Con la anterior configuración, el gestor de assets creará un enlace simbólico a la ruta de origen del asset bundle
cuando éste sea publicado. Esto es más rápido que copiar archivos y también asegura que siempre estén actualizados.
## Los Asset Bundles más Comunes <a name="common-asset-bundles"></a>
## Los Asset Bundles más Comunes <span id="common-asset-bundles"></span>
El código del núcleo de Yii tiene definidos varios asset bundles. Entre ellos, los siguientes bundles son los más
usados y pueden referenciarse en códigos de aplicaciones o extensiones.
......@@ -389,7 +389,7 @@ Si el código depende de jQuery, jQuery UI o Bootstrap, se pueden usar estos ass
crear versiones propias. Si la configuración predeterminada de estos bundles no satisface las necesidades, se puede
personalizar como se describe en la subsección [Personalización de Asset Bundles](#customizing-asset-bundles).
## Conversión de Assets <a name="asset-conversion"></a>
## Conversión de Assets <span id="asset-conversion"></span>
En lugar de escribir código CSS y/o JavaScript directamente, los desarrolladores a menudo escriben código usando una
sintaxis extendida y usan herramientas especiales para convertirlos en CSS/JavaScript. Por ejemplo, para código CSS se
......@@ -464,7 +464,7 @@ de destino de los archivos asset.
monitorear y convertir automáticamente los assets de sintaxis extendidas. En este caso, se deben listar los archivos
CSS/JavaScript resultantes en lugar de los archivos de originales.
## Combinación y Compresión de Assets <a name="combining-compressing-assets"></a>
## Combinación y Compresión de Assets <span id="combining-compressing-assets"></span>
Una página web puede incluir muchos archivos CSS y/o JavaScript. Para reducir el número de peticiones (requests)
HTTP y el tamaño total de descarga de estos archivos, una práctica común es combinar y comprimir uno o
......@@ -490,7 +490,7 @@ Usando este propuesta, cuando se registre un asset bundle en una vista, se gener
asset bundle para el grupo al que pertenece el bundle original. Y como resultado, los archivos combinados/comprimidos
se incluyen en la página, en lugar de los originales.
### Un Example <a name="example"></a>
### Un Example <span id="example"></span>
Vamos a usar un ejemplo para explicar la propuesta anterior.
......@@ -566,7 +566,7 @@ return [
Es decir, el array de configuración del asset bundle se guarda en `asset-prod.php` para el modo de producción, y
`assets-del.php` para los otros modos.
### Uso del Comando `asset` <a name="using-asset-command"></a>
### Uso del Comando `asset` <span id="using-asset-command"></span>
Yii proporciona un comando de consola llamado `asset` para automatizar el enfoque descrito.
......
......@@ -8,7 +8,7 @@ los controladores analizarán los datos que entran en el `request`, los pasan a
modelos resultantes a las [vistas](structure-views.md), y finalmente generan los `responses` (respuestas) de salida.
## Acciones <a name="actions"></a>
## Acciones <span id="actions"></span>
Los Controladores están compuestos por *acciones* que son las unidades más básicas a las que los usuarios pueden
dirigirse y solicitar ejecución. Un controlador puede tener una o múltiples acciones.
......@@ -62,7 +62,7 @@ el navegador a la acción `view` con el ID del modelo recientemente creado. De o
la vista `create` a través de la cual el usuario puede completar los campos necesarios.
## Routes <a name="routes"></a>
## Routes <span id="routes"></span>
Los usuarios ejecutan las acciones a través de las llamadas *routes* (rutas). una ruta es una cadena que consiste en las siguientes partes:
......@@ -88,7 +88,7 @@ será ejecutado. Para más detalles acerca de cómo las son resueltas en accione
la sección [Routing](runtime-routing.md).
## Creando Controladores <a name="creating-controllers"></a>
## Creando Controladores <span id="creating-controllers"></span>
En [[yii\web\Application|aplicaciones Web]], los controladores deben extender de [[yii\web\Controller]] o cualquier
clase hija. De forma similar los controladores de [[yii\console\Application|aplicaciones de consola]], deben extender
......@@ -105,7 +105,7 @@ class SiteController extends Controller
```
### IDs de Controladores <a name="controller-ids"></a>
### IDs de Controladores <span id="controller-ids"></span>
Normalmente, un controlador está diseñado para manejar los `requests` de acuerdo a un tipo de recurso.
Por esta razón, los IDs de controladores son a menudo sustantivos de los tipos de recurso que están manejando.
......@@ -119,7 +119,7 @@ Los guiones en un ID de controlador son utilizados para separar palabras, mientr
organizar los controladores en sub-directorios.
### Nombres de Clases de Controladores <a name="controller-class-naming"></a>
### Nombres de Clases de Controladores <span id="controller-class-naming"></span>
Los nombres de clases de controladores pueden ser derivados de los IDs de acuerdo a las siguientes reglas:
......@@ -146,7 +146,7 @@ en `@app/controllers/admin/Post2CommentController.php`.
tus controladores en varias categorías pero sin utilizar [módulos](structure-modules.md).
### Controller Map <a name="controller-map"></a>
### Controller Map <span id="controller-map"></span>
Puedes configurar [[yii\base\Application::controllerMap|controller map]] (mapeo de controladores) para superar las restricciones
de los IDs de controladores y sus nombres de clase descritos arriba. Esto es principalmente útil cuando estás utilizando un
......@@ -173,7 +173,7 @@ Puedes configurar [[yii\base\Application::controllerMap|controller map]] en la
```
### Controller por Defecto <a name="default-controller"></a>
### Controller por Defecto <span id="default-controller"></span>
Cada aplicación tiene un controlador por defecto especificado a través de la propiedad [[yii\base\Application::defaultRoute]].
Cuando un `request` no especifica una [ruta](#ids-routes), se utilizará la ruta especificada en esta propiedad.
......@@ -189,7 +189,7 @@ Puedes cambiar el controlador por defecto con la siguiente [configuración de la
```
## Creando Acciones <a name="creating-actions"></a>
## Creando Acciones <span id="creating-actions"></span>
Crear acciones puede ser tan simple como definir un llamado *método de acción* en una clase controlador. Un método de acción es
un método *public* cuyo nombre comienza con la palabra `action`. El valor de retorno de uno de estos métodos representa
......@@ -215,7 +215,7 @@ class SiteController extends Controller
```
### IDs de Acciones <a name="action-ids"></a>
### IDs de Acciones <span id="action-ids"></span>
Una acción está a menudo diseñada para realizar una manipulación particular de un recurso. Por esta razón,
los IDs de acciones son usualmente verbos, como `view` (ver), `update` (actualizar), etc.
......@@ -231,7 +231,7 @@ si no tienes intenciones de volver a utilizarlas. Las acciones independientes, p
creadas para ser reutilizadas en otros controladores o para ser redistribuidas como [extensiones](structure-extensions.md).
### Acciones en Línea <a name="inline-actions"></a>
### Acciones en Línea <span id="inline-actions"></span>
Como acciones en línea nos referimos a acciones que son definidas en términos de métodos como acabamos de describir.
......@@ -254,7 +254,7 @@ si planeas reutilizar la misma acción en diferentes lugares, o quieres redistri
deberías considerar definirla como un *acción independiente*.
### Acciones Independientes <a name="standalone-actions"></a>
### Acciones Independientes <span id="standalone-actions"></span>
Las acciones independientes son acciones definidas en términos de clases de acción que extienden de [[yii\base\Action]] o cualquiera de sus clases hijas.
Por ejemplo, en Yii se encuentran las clases [[yii\web\ViewAction]] y [[yii\web\ErrorAction]], de las cuales ambas son acciones independientes.
......@@ -302,7 +302,7 @@ class HelloWorldAction extends Action
```
### Resultados de Acción <a name="action-results"></a>
### Resultados de Acción <span id="action-results"></span>
El valor de retorno de una método de acción o del método `run()` de una acción independiente son significativos. Este se refiere
al resultado de la acción correspondiente.
......@@ -329,7 +329,7 @@ public function actionForward()
```
### Parámetros de Acción <a name="action-parameters"></a>
### Parámetros de Acción <span id="action-parameters"></span>
Los métodos de acción para acciones en línea y el método `run()` de acciones independientes pueden tomar parámetros,
llamados *parámetros de acción*. Sus valores son obtenidos del `request`. Para [[yii\web\Application|aplicaciones Web]],
......@@ -381,7 +381,7 @@ Los ejemplos de arriba muestran principalmente como funcionan los parámetros de
por favor consulta la sección [Comandos de Consola](tutorial-console.md) para más detalles.
### Acción por Defecto <a name="default-action"></a>
### Acción por Defecto <span id="default-action"></span>
Cada controlador tiene una acción por defecto especificada a través de la propiedad [[yii\base\Controller::defaultAction]].
Cuando una [ruta](#ids-routes) contiene sólo el ID del controlador, implica que se está solicitando la acción por defecto
......@@ -407,7 +407,7 @@ class SiteController extends Controller
```
## Ciclo de Vida del Controlador <a name="controller-lifecycle"></a>
## Ciclo de Vida del Controlador <span id="controller-lifecycle"></span>
Cuando se procesa un `request`, la [aplicación](structure-applications.md) creará un controlador
basado en la [ruta](#routes) solicitada. El controlador entonces irá a través del siguiente ciclo de vida
......@@ -433,7 +433,7 @@ para completar el `request`:
6. La aplicación tomará el resultado de la acción y lo asignará al [response](runtime-responses.md).
## Buenas Prácticas <a name="best-practices"></a>
## Buenas Prácticas <span id="best-practices"></span>
En una aplicación bien diseñada, los controladores son a menudo muy pequeños con cada acción conteniendo unas pocas líneas de código.
Si tu controlador se torna muy complejo, es usualmente un indicador de que deberías realizar una refactorización y mover algo de
......
......@@ -23,7 +23,7 @@ El script de entrada principalmente hace los siguientes trabajos:
* Crear y configurar una instancia de [aplicación](structure-applications.md);
* Llamar a [[yii\base\Application::run()]] para procesar la petición entrante.
## Aplicaciones Web <a name="web-applications"></a>
## Aplicaciones Web <span id="web-applications"></span>
El siguiente código es el script de entrada para la [Plantilla de Aplicación web Básica](start-installation.md).
......@@ -46,7 +46,7 @@ $config = require(__DIR__ . '/../config/web.php');
(new yii\web\Application($config))->run();
```
## Aplicaciones de consola <a name="console-applications"></a>
## Aplicaciones de consola <span id="console-applications"></span>
De la misma manera, el siguiente código es el script de entrada para la [aplicación de consola](tutorial-console.md):
......@@ -81,7 +81,7 @@ $exitCode = $application->run();
exit($exitCode);
```
## Definición de Constantes <a name="defining-constants"></a>
## Definición de Constantes <span id="defining-constants"></span>
El script de entrada es el mejor lugar para definir constantes globales. Yii soporta las siguientes tres constantes:
......
......@@ -11,7 +11,7 @@ proceso de desarrollo. También se puede empaquetar código propio para comparti
propósitos generales los paquetes de software pueden usarse sin Yii, nos referiremos a ellos usando los términos
"paquetes" (package) o "librerías" (library).
## Uso de Extensiones <a name="using-extensions"></a>
## Uso de Extensiones <span id="using-extensions"></span>
Para usar una extension, primero tenemos que instalarla. La mayoría de extensiones se usan como paquetes
[Composer](https://getcomposer.org/) que se pueden instalar mediante los dos simples siguientes pasos:
......@@ -71,7 +71,7 @@ Image::thumbnail('@webroot/img/test-image.jpg', 120, 120)
> Información: Las clases de extensiones se cargan automáticamente gracias a
[autocarga de clases de Yii](concept-autoloading.md).
### Instalación Manual de Extensiones <a name="installing-extensions-manually"></a>
### Instalación Manual de Extensiones <span id="installing-extensions-manually"></span>
En algunas ocasiones excepcionales es posible que tengamos que instalar alguna o todas las extensiones manualmente, en lugar de utilizar Composer. Para lograrlo, debemos:
......@@ -96,7 +96,7 @@ aplicación:
]
```
## Creación de Extensiones <a name="creating-extensions"></a>
## Creación de Extensiones <span id="creating-extensions"></span>
Podemos considerar la creación de una extensión cuando tengamos la necesidad de compartir nuestro código. Cada
extensión puede contener el código que se desee, puede ser una clase de ayuda (helper class), un widget, un módulo,
......@@ -115,7 +115,7 @@ Más adelante se encuentran los pasos básicos que deben seguirse para crear una
3. Registrar la extensión en un repositorio de Composer como puede ser [Packagist](https://packagist.org/), para que
los otros usuarios puedan encontrarlo e instalarla mediante Composer.
### `composer.json` <a name="composer-json"></a>
### `composer.json` <span id="composer-json"></span>
Cada paquete de Composer tiene que tener un archivo `composer.json` en su directorio raíz. El archivo contiene los
metadatos relacionados con el paquete. Se pueden encontrar especificaciones completas acerca de este fichero en el
......@@ -162,7 +162,7 @@ muestra el archivo `composer.json` para la extensión `yiisoft/yii2-imagine`:
}
```
#### Nombre del Paquete<a name="package-name"></a>
#### Nombre del Paquete<span id="package-name"></span>
Cada paquete Composer debe tener un nombre de paquete que identifique de entre todos los otros paquetes. El formato
del nombre del paquete es `nombreProveedor/nombreProyecto`. Por ejemplo, el nombre de paquete `yiisoft/yii2-imagine`,
......@@ -175,7 +175,7 @@ Recomendamos usar el prefijo `yii2-` al nombre del proyecto para paquetes que re
ejemplo, `minombre/yii2-miwidget`. Esto permite ver a los usuarios más fácilmente si un paquete es una extensión de
Yii 2.
#### Tipo de Paquete <a name="package-type"></a>
#### Tipo de Paquete <span id="package-type"></span>
Es importante que se especifique el tipo del paquete de la extensión como `yii2-extension` para que el paquete pueda
ser reconocido como una extensión de Yii cuando se esté instalando.
......@@ -185,7 +185,7 @@ se actualizará automáticamente para incluir la información acerca de la nueva
aplicaciones Yii pueden saber que extensiones están instaladas. (se puede acceder a esta información mediante
[[yii\base\Application::extensions]]).
#### Dependencias <a name="dependencies"></a>
#### Dependencias <span id="dependencies"></span>
La extensión depende de Yii (por supuesto). Por ello se debe añadir (`yiisoft/yii2`) a la lista en la entrada
`required` del archivo `composer.json`. Si la extensión también depende de otras extensiones o de terceras
......@@ -216,7 +216,7 @@ referencia a estos dos directorios usando los alias `@bower/NombrePaquete` and `
Para obtener más detalles acerca de la gestión de assets, puede hacerse referencia a la sección
[Assets](structure-assets.md#bower-npm-assets).
#### Autocarga de Clases <a name="class-autoloading"></a>
#### Autocarga de Clases <span id="class-autoloading"></span>
Para que se aplique la autocarga a clases propias mediante la autocarga de clases de Yii o la autocarga de clases de
Composer, debemos especificar la entrada `autoload` en el archivo `composer.json` como se puede ver a continuación:
......@@ -239,13 +239,13 @@ Cuando se instala la extensión en una aplicación, Yii creara un [alias](concep
todos los namespaces raíz, que harán referencia al directorio correspondiente del namespace. Por ejemplo, la anterior
declaración `autoload` corresponderá a un alias llamado `@yii/imagine`.
### Prácticas Recomendadas <a name="recommended-practices"></a>
### Prácticas Recomendadas <span id="recommended-practices"></span>
Dado que las extensiones están destinadas a ser utilizadas por otras personas, a menudo es necesario hacer un esfuerzo
extra durante el desarrollo. A continuación presentaremos algunas practicas comunes y recomendadas para la creación de
extensiones de alta calidad.
#### Namespaces <a name="namespaces"></a>
#### Namespaces <span id="namespaces"></span>
Para evitar colisiones de nombres y permitir que las clases usen la autocarga en extensiones propias, se deben usar
namespaces y nombres de clase siguiendo el [estándar PSR-4](http://www.php-fig.org/psr/psr-4/) o el
......@@ -258,7 +258,7 @@ similar al nombre del paquete pero este no debe contener el prefijo `yii2-`. Por
No se puede usar `yii`, `yii2` o `yiisoft` como nombre de proveedor. Estos nombres están reservados para usarse en el
código del núcleo de Yii.
#### Clases de Bootstrapping <a name="bootstrapping-classes"></a>
#### Clases de Bootstrapping <span id="bootstrapping-classes"></span>
A veces, se puede querer que nuestras extensiones ejecuten algo de código durante el
[proceso de bootstrapping](runtime-bootstrapping.md) de una aplicación. Por ejemplo, queremos que nuestra extensión
......@@ -302,7 +302,7 @@ a continuación,
Cuando se instala la extensión en la aplicación, Yii automáticamente instancia la clase de bootstrapping y llama a su
método [[yii\base\BootstrapInterface::bootstrap()|bootstrap()]] durante el proceso de bootstrapping para cada petición.
#### Trabajar con Bases de Datos<a name="working-with-databases"></a>
#### Trabajar con Bases de Datos<span id="working-with-databases"></span>
Puede darse el caso en que la extensión necesite acceso a bases de datos. No se debe asumir que las aplicaciones que
usen la extensión siempre usarán `Yii::$db` como conexión de BBDD. Se debe crear una propiedad `db` para las clases
......@@ -317,7 +317,7 @@ Si nuestra extensión necesita crear tablas especificas en la BBDD o hacer cambi
- intentar hacer las migraciones aplicables a varios Sistemas de Gestión de BBDD;
- evitar usar [Active Record](db-active-record.md) en las migraciones.
#### Uso de Assets <a name="using-assets"></a>
#### Uso de Assets <span id="using-assets"></span>
Si nuestra aplicación es un widget o un módulo, hay posibilidades de que requiera [assets](structure-assets.md) para
poder funcionar. Por ejemplo, un modulo puede mostrar algunas páginas de que contengan archivos JavaScript y/o CSS.
......@@ -331,7 +331,7 @@ se instalan en una aplicación, hay dos maneras de hacer los assets accesibles v
Recomendamos el uso de la segunda propuesta para que la extensión sea más fácil de usar para usuarios. Se puede hacer
referencia a la sección [Assets](structure-assets.md) para encontrar más detalles acerca de como trabajar con ellos.
#### Internacionalización y Localización <a name="i18n-l10n"></a>
#### Internacionalización y Localización <span id="i18n-l10n"></span>
Puede que las extensiones propias se usen en aplicaciones que den soporte a diferentes idiomas! Por ello, si nuestra
extensión muestra contenido a los usuarios finales, se debe intentar [internacionalizar y localizar](tutorial-i18n.md)
......@@ -345,7 +345,7 @@ la extensión. En particular,
Se pueden encontrar más detalles en la sección [internacionalización](tutorial-i18n.md).
#### Testing <a name="testing"></a>
#### Testing <span id="testing"></span>
Para conseguir que las aplicaciones propias se ejecuten sin problemas y no causen problemas a otros usuarios, deben
ejecutarse test a las extensiones antes de ser publicadas al público.
......@@ -356,12 +356,12 @@ de prueba para asegurarnos de que todo está correcto. Yii proporciona soporte p
pruebas unitarias (unit tests), pruebas de aceptación (acceptance tests) y pruebas de funcionalidad
(functionality tests), más fácilmente. Se pueden encontrar más detalles en la sección [Testing](test-overview.md).
#### Versiones <a name="versioning"></a>
#### Versiones <span id="versioning"></span>
Se debe asignar un número de versión cada vez que se lance una nueva distribución. (ej. `1.0.1`). Recomendamos
seguir la práctica [Versionamiento Semántico](http://semver.org/lang/es/) para determinar que números se deben usar.
#### Lanzamientos <a name="releasing"></a>
#### Lanzamientos <span id="releasing"></span>
Para dar a conocer nuestra extensión a terceras personas, debemos lanzara al público.
......@@ -395,7 +395,7 @@ mencionados a continuación para facilitar a otra gente el uso de nuestra extens
[estilo de código del núcleo del framework](https://github.com/yiisoft/yii2/wiki/Core-framework-code-style) para
obtener más detalles.
## Extensiones del Núcleo <a name="core-extensions"></a>
## Extensiones del Núcleo <span id="core-extensions"></span>
Yii proporciona las siguientes extensiones del núcleo que son desarrolladas y mantenidas por el equipo de desarrollo
de Yii. Todas ellas están registradas en [Packagist](https://packagist.org/) y pueden ser instaladas fácilmente como
......
......@@ -10,7 +10,7 @@ ser enviado al usuario final.
Un filtro puede consistir en un pre-filtro (lógica de filtrado aplicada *antes* de las acciones) y/o un post-filtro
(lógica de filtro aplicada *después* de las acciones).
## Uso de Filtros <a name="using-filters"></a>
## Uso de Filtros <span id="using-filters"></span>
Los filtros son esencialmente un tipo especial de [comportamientos (behaviors)](concept-behaviors.md).
Por lo tanto, usar filtros es lo mismo que [uso de comportamientos](concept-behaviors.md#attaching-behaviors). Se
......@@ -65,7 +65,7 @@ Cuando se configuran múltiples filtros para una misma acción, se aplican de ac
- Aplica los filtros declarados en el modulo en orden inverso al de aparición en `behaviors()`.
- Aplica los filtros declarados en la aplicación en orden inverso al de aparición en `behaviors()`.
##Creación de Filtros <a name="creating-filters"></a>
##Creación de Filtros <span id="creating-filters"></span>
Para crear un nuevo filtro de acción, hay que extender a [[yii\base\ActionFilter]] y sobrescribir los métodos
[[yii\base\ActionFilter::beforeAction()|beforeAction()]] y/o [[yii\base\ActionFilter::afterAction()|afterAction()]].
......@@ -100,12 +100,12 @@ class ActionTimeFilter extends ActionFilter
}
```
## Filtros del Núcleo <a name="core-filters"></a>
## Filtros del Núcleo <span id="core-filters"></span>
Yii proporciona una serie de filtros de uso general, que se encuentran principalmente en `yii\filters` namespace. En
adelante introduciremos estos filtros brevemente.
### [[yii\filters\AccessControl|AccessControl]] <a name="access-control"></a>
### [[yii\filters\AccessControl|AccessControl]] <span id="access-control"></span>
AccessControl proporciona control de acceso simple basado en un conjunto de [[yii\filters\AccessControl::rules|rules]].
En concreto, antes de ejecutar una acción, AccessControl examinará la lista de reglas y encontrará la primera que
......@@ -142,7 +142,7 @@ public function behaviors()
Para conocer más detalles acerca del control de acceso en general, refiérase a la sección de
[Autorización](security-authorization.md)
### Filtros del Método de Autenticación <a name="auth-method-filters"></a>
### Filtros del Método de Autenticación <span id="auth-method-filters"></span>
Los filtros del método de autenticación se usan para autenticar a un usuario utilizando varios métodos, tales como la
[Autenticación de acceso básico HTTP](http://es.wikipedia.org/wiki/Autenticaci%C3%B3n_de_acceso_b%C3%A1sica),
......@@ -230,7 +230,7 @@ use yii\web\Response;
será utilizando el primer elemento de formato e idioma de la lista [[formats]] y [[lenguages]].
### [[yii\filters\HttpCache|HttpCache]] <a name="http-cache"></a>
### [[yii\filters\HttpCache|HttpCache]] <span id="http-cache"></span>
HttpCache implementa un almacenamiento caché del lado del cliente utilizando las cabeceras HTTP 'Last-Modified' y
'Etag'. Por ejemplo:
......@@ -255,7 +255,7 @@ public function behaviors()
Para conocer más detalles acerca de HttpCache refiérase a la sección [almacenamiento caché HTTP](caching-http.md).
### [[yii\filters\PageCache|PageCache]] <a name="page-cache"></a>
### [[yii\filters\PageCache|PageCache]] <span id="page-cache"></span>
PageCache implementa una caché por parte del servidor de paginas enteras. En el siguiente ejemplo, se aplica PageCache
a la acción 'index' para generar una cache de la pagina entera durante 60 segundos como máximo o hasta que el contador
......@@ -287,14 +287,14 @@ public function behaviors()
Por favor refiérase a [Caché de Páginas](caching-page.md) para obtener más detalles acerca de como usar PageCache.
### [[yii\filters\RateLimiter|RateLimiter]] <a name="rate-limiter"></a>
### [[yii\filters\RateLimiter|RateLimiter]] <span id="rate-limiter"></span>
RateLimiter implementa un algoritmo de para limitar la tasa de descarga basándose en
(leaky bucket algorithm)[http://en.wikipedia.org/wiki/Leaky_bucket]. Este se utiliza sobre todo en la implementación
de APIs RESTful. Por favor, refiérase a la sección (limite de tasa)[rest-rate-limiting.md] para obtener más detalles
acerca de el uso de este filtro.
### [[yii\filters\VerbFilter|VerbFilter]] <a name="verb-filter"></a>
### [[yii\filters\VerbFilter|VerbFilter]] <span id="verb-filter"></span>
VerbFilter comprueba que los métodos de las peticiones HTTP estén permitidas para las acciones solicitadas. Si no
están permitidas, lanzara una excepción de tipo HTTP 405. En el siguiente ejemplo, se declara VerbFilter para
......@@ -320,7 +320,7 @@ public function behaviors()
}
```
### [[yii\filters\Cors|Cors]] <a name="cors"></a>
### [[yii\filters\Cors|Cors]] <span id="cors"></span>
(CORS)[https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS] es un mecanismo que permite a diferentes
recursos (por ejemplo: fuentes, JavaScript, etc) de una pagina Web ser solicitados por otro dominio diferente al
......
......@@ -22,7 +22,7 @@ La clase 'modelo' también es una base para modelos más avanzados, tales como [
componentes de Yii construidos para dar soporte a [[yii\base\Model]], por lo general, es la clase base preferible
para un modelo.
### Atributos <a name="attributes"></a>
### Atributos <span id="attributes"></span>
Los modelos representan los datos de negocio en términos de *atributos*. Cada atributos es como una propiedad
públicamente accesible de un modelo. El método [[yii\base\Model::attributes()]] especifica qué atributos tiene la
......@@ -55,7 +55,7 @@ foreach ($model as $name => $value) {
}
```
### Definir Atributos <a name="defining-attributes"></a>
### Definir Atributos <span id="defining-attributes"></span>
Por defecto, si un modelo extiende directamente a [[yii\base\Model]], todas sus variables miembro no estáticas son
atributos. Por ejemplo, la siguiente clase modelo 'ContactForm' tiene cuatro atributos: 'name', 'email', 'subject',
......@@ -81,7 +81,7 @@ de las columnas de la tabla de la base de datos asociada como el nombre de sus a
también puede necesitar sobrescribir los métodos mágicos como `__get()`, `__set()` de modo que se puede acceder a los
atributos como a propiedades de objetos normales.
### Etiquetas de atributo <a name="attribute-labels"></a>
### Etiquetas de atributo <span id="attribute-labels"></span>
Cuando se muestran valores o se obtienen entradas para atributos, normalmente se necesita mostrar etiquetas asociadas
a los atributos. Por ejemplo, dado un atributo con nombre 'segundoApellido', es posible que se quiera mostrar la
......@@ -149,7 +149,7 @@ que se esta usando el modelo, se pueden devolver diferentes etiquetas para un mi
> Información: Estrictamente hablando, los atributos son parte de las [vistas](structure-views.md). Pero declarar las
etiquetas en los modelos, a menudo, es muy conveniente y puede generar a un código muy limpio y reutilizable.
## Escenarios <a name="scenarios"></a>
## Escenarios <span id="scenarios"></span>
Un modelo puede usarse en diferentes *escenarios*. Por ejemplo, un modelo 'Usuario', puede ser utilizado para recoger
entradas de inicio de sesión de usuarios, pero también puede usarse para generar usuarios. En diferentes escenarios,
......@@ -224,7 +224,7 @@ La característica escenario se usa principalmente en las [validaciones](#valida
[asignación masiva de atributos](#massive-assignment). Aunque también se puede usar para otros propósitos. Por
ejemplo, se pueden declarar [etiquetas de atributo](#attribute-labels) diferentes basándose en el escenario actual.
## Reglas de Validación <a name="validation-rules"></a>
## Reglas de Validación <span id="validation-rules"></span>
Cuando un modelo recibe datos del usuario final, estos deben ser validados para asegurar que cumplan ciertas reglas
(llamadas *reglas de validación*, también conocidas como *reglas de negocio*). Por ejemplo, dado un modelo
......@@ -294,7 +294,7 @@ Si no se especifica la propiedad 'on', la regla se aplicará en todos los escena
Un atributo será validado si y sólo si es un atributo activo declarado en 'scenarios()' y esta asociado con una o más
reglas activas declaradas en 'rules()'.
## Asignación Masiva <a name="massive-assignment"></a>
## Asignación Masiva <span id="massive-assignment"></span>
La asignación masiva es una buena forma de rellenar los atributos de un modelo con las entradas de usuario en una
única línea de código. Rellena los atributos de un modelo asignando los datos de entrada directamente a las
......@@ -316,7 +316,7 @@ $model->subject = isset($data['subject']) ? $data['subject'] : null;
$model->body = isset($data['body']) ? $data['body'] : null;
```
### Atributos Seguros <a name="safe-attributes"></a>
### Atributos Seguros <span id="safe-attributes"></span>
La asignación masiva sólo se aplica a los llamados *atributos seguros* qué son los atributos listados en
[[yii\base\Model::scenarios()]] para el actual [[yii\base\Model::scenario|scenario]] del modelo. Por ejemplo, si en el
......@@ -355,7 +355,7 @@ public function rules()
}
```
### Atributos Inseguros <a name="unsafe-attributes"></a>
### Atributos Inseguros <span id="unsafe-attributes"></span>
Como se ha descrito anteriormente, el método [[yii\base\Model::scenarios()]] sirve para dos propósitos: determinar qué
atributos deben ser validados y determinar qué atributos son seguros. En situaciones poco comunes, se puede querer
......@@ -379,7 +379,7 @@ que hacer explícitamente como en el ejemplo:
$model->secret = $secret;
```
## Exportación de Datos <a name="data-exporting"></a>
## Exportación de Datos <span id="data-exporting"></span>
A menudo necesitamos exportar modelos a diferentes formatos. Por ejemplo, se puede querer convertir un conjunto de
modelos a formato JSON o Excel. El proceso de exportación se puede dividir en dos pasos independientes. En el primer
......@@ -403,7 +403,7 @@ elementos de datos, llamados *campos*, queremos poner en el array resultante y e
hecho, es la manera por defecto de exportar modelos en desarrollo de servicios Web RESTful, tal y como se describe en
[Formatos de Respuesta](rest-response-formatting.md).
### Campos <a name="fields"></a>
### Campos <span id="fields"></span>
Un campo es simplemente un elemento nombrado en el array resultante de ejecutar el método [[yii\base\Model::toArray()]]
de un modelo.
......@@ -464,7 +464,7 @@ examinar los datos para asegurar que no contienen información sensible. Si exis
sobrescribir 'fields()' para filtrarla. En el anterior ejemplo, se filtra 'aut_key', 'password_hash' y
'password_reset_token'.
## Mejores Prácticas <a name="best-practices"></a>
## Mejores Prácticas <span id="best-practices"></span>
Los modelos son los lugares centrales para representar datos de negocio, reglas y lógica. Estos a menudo necesitan ser
reutilizados en diferentes lugares. En una aplicación bien diseñada, los modelos normalmente son más grandes que los
......
......@@ -7,7 +7,7 @@ finales pueden acceder a los controladores de un módulo cuando éste está inst
mini-aplicaciones. Los módulos difieren de las [aplicaciones](structure-applications.md) en que los módulos no pueden
ser desplegados solos y tienen que residir dentro de aplicaciones.
## Creación de Módulos<a name="creating-modules"></a>
## Creación de Módulos<span id="creating-modules"></span>
Un módulo está organizado de tal manera que contiene un directorio llamado [[yii\base\Module::basePath|base path]] del
módulo. Dentro de este directorio, hay subdirectorios tales como 'controllers', 'models', 'views', que contienen
......@@ -26,7 +26,7 @@ forum/
index.php archivo de vista del index
```
### Clases Módulo <a name="module-classes"></a>
### Clases Módulo <span id="module-classes"></span>
Cada módulo debe tener una única clase módulo que extiende a [[yii\base\Module]]. La clase debe encontrarse
directamente debajo del [[yii\base\Module::basePath|base path]] y debe ser [autocargable](concept-autoloading.md).
......@@ -78,7 +78,7 @@ return [
];
```
### Controladores en Módulos <a name="controllers-in-modules"></a>
### Controladores en Módulos <span id="controllers-in-modules"></span>
Cuando se crean controladores en un modelo, una convención es poner las clases controlador debajo del sub-espacio de
nombres de ‘controllers’ del espacio de nombres de la clase módulo. Esto también significa que los archivos de la
......@@ -102,7 +102,7 @@ Se puede personalizar el espacio de nombres de las clases controlador configuran
nombres, se puede hacer accesible configurando la propiedad [[yii\base\Module::controllerMap]], similar a
[como se hace en una aplicación](structure-applications.md#controller-map).
### Vistas en Módulos <a name="views-in-modules"></a>
### Vistas en Módulos <span id="views-in-modules"></span>
Las vistas en un módulo deben alojarse en el directorio ‘views’ dentro del módulo del
[[yii\base\Module::basePath|base path]]. Las vistas renderizadas por un controlador en el módulo, deben alojarse en el
......@@ -115,7 +115,7 @@ controladores del módulo. El layout debe alojarse en el directorio ‘views/lay
la propiedad [[yii\base\Module::layout]] para apuntar al nombre del layout. Si no se configura la propiedad ‘layout’,
se usar el layout de la aplicación.
## Uso de los Módulos <a name="using-modules"></a>
## Uso de los Módulos <span id="using-modules"></span>
Para usar un módulo en una aplicación, simplemente se tiene que configurar la aplicación añadiendo el módulo en la
propiedad [[yii\base\Application::modules|modules]] de la aplicación. El siguiente ejemplo de la
......@@ -136,7 +136,7 @@ La propiedad [[yii\base\Application::modules|modules]] contiene un array de conf
array representa un *ID de módulo* que identifica de forma única el módulo de entre todos los módulos de la
aplicación, y el correspondiente valor del array es la [configuración](concept-configurations.md) para crear el módulo.
### Rutas <a name="routes"></a>
### Rutas <span id="routes"></span>
De Igual manera que el acceso a los controladores en una aplicación, las [rutas](structure-controllers.md#routes) se
utiliza para dirigirse a los controladores en un módulo. Una ruta para un controlador dentro de un módulo debe empezar
......@@ -146,7 +146,7 @@ módulo. Si la ruta sólo contiene el ID del módulo, entonces la propiedad [[yi
defecto es ‘default’, determinara que controlador/acción debe usarse. Esto significa que la ruta ‘forum’ representaría
el controlador ‘default’ en el módulo ‘forum’.
### Acceder a los Módulos <a name="accessing-modules"></a>
### Acceder a los Módulos <span id="accessing-modules"></span>
Dentro de un módulo, se puede necesitar obtener la instancia de la [clase módulo](#module-classes) para poder acceder
al ID del módulo, componentes del módulo, etc. Se puede hacer usando la siguiente declaración:
......@@ -185,7 +185,7 @@ ejemplo:
$maxPostCount = $module->params['maxPostCount'];
```
### Bootstrapping Módulos <a name="bootstrapping-modules"></a>
### Bootstrapping Módulos <span id="bootstrapping-modules"></span>
Puede darse el caso en que necesitemos que un módulo se ejecute en cada petición. El módulo [[yii\debug\Module|debug]]
es un ejemplo. Para hacerlo, tenemos que listar los IDs de los módulos en la propiedad
......@@ -205,7 +205,7 @@ Por ejemplo, la siguiente configuración de aplicación se asegura de que el mó
]
```
## Módulos anidados <a name="nested-modules"></a>
## Módulos anidados <span id="nested-modules"></span>
Los módulos pueden ser anidados sin límite de niveles. Es decir, un módulo puede contener un módulo y éste a la vez
contener otro módulo. Nombramos *padre* al primero mientras que al segundo lo nombramos *hijo*. Los módulos hijo se
......@@ -238,7 +238,7 @@ ejemplo, la ruta ‘forum/admin/dashboard/index’ representa la acción ‘inde
directamente a su padre. La propiedad [[yii\base\Application::loadedModules]] contiene una lista de los módulos
cargados, incluyendo los hijos directos y los anidados, indexados por sus nombres de clase.
## Mejores Prácticas <a name="best-practices"></a>
## Mejores Prácticas <span id="best-practices"></span>
Es mejor usar los módulos en grandes aplicaciones en las que sus funcionalidades puedan ser divididas en diferentes
grupos, cada uno compuesto por funcionalidades directamente relacionadas. Cada grupo de funcionalidades se puede
......
......@@ -18,7 +18,7 @@ Hay un buen número de widgets incluidos en Yii, tales como [[yii\widgets\Active
En adelante, introduciremos las nociones básicas acerca de los widgets. Por favor, refiérase a la documentación de la
API de clases si quiere aprender más acerca de el uso de un widget en particular.
## Uso de los Widgets <a name="using-widgets"></a>
## Uso de los Widgets <span id="using-widgets"></span>
Los Widgets son usados principalmente en las [vistas](structure-views.md). Se puede llamar al método
[[yii\base\Widget::widget()]] para usar un widget en una vista. El método obtiene un array de
......@@ -69,7 +69,7 @@ Hay que tener en cuenta que a diferencia de [[yii\base\Widget::widget()]] que de
del widget, el método [[yii\base\Widget::begin()]] devuelve una instancia del widget que se puede usar para generar el
contenido del widget.
## Creación Widgets <a name="creating-widgets"></a>
## Creación Widgets <span id="creating-widgets"></span>
Para crear un widget, se debe extender a [[yii\base\Widget]] y sobrescribir los métodos [[yii\base\Widget::init()]]
y/o [[yii\base\Widget::run()]]. Normalmente el método 'init()' debería contener el código que estandariza las
......@@ -176,7 +176,7 @@ ejemplo representará el fichero de la vista `@app/components/views/hello.php`,
encuentre en `@app/components`. Se puede sobrescribir el método [[yii\base\Widget::getViewPath()]] para personalizar
el directorio que contenga los ficheros de la vista del widget.
## Mejores Prácticas <a name="best-practices"></a>
## Mejores Prácticas <span id="best-practices"></span>
Los widgets son una manera orientada a objetos de reutilizar código de las vistas.
......
......@@ -18,7 +18,7 @@ La propiedad [[yii\validators\Validator::builtInValidators]] declara todos los a
A continuación, vamos a describir el uso principal y las propiedades de cada validador del núcleo.
## [[yii\validators\BooleanValidator|boolean]] <a name="boolean"></a>
## [[yii\validators\BooleanValidator|boolean]] <span id="boolean"></span>
```php
[
......@@ -40,7 +40,7 @@ Este validador comprueba si el valor de la entrada (input) es booleano.
> Nota: Ya que los datos enviados con la entrada, vía formularios HTML,son todos cadenas (strings), usted debe normalmente dejar la propiedad [[yii\validators\BooleanValidator::strict|strict]] a false.
## [[yii\captcha\CaptchaValidator|captcha]] <a name="captcha"></a>
## [[yii\captcha\CaptchaValidator|captcha]] <span id="captcha"></span>
```php
[
......@@ -56,7 +56,7 @@ Este validador es usualmente usado junto con [[yii\captcha\CaptchaAction]] y [[y
- `skipOnEmpty`: cuando la validación puede saltarse si la entrada está vacía. Por defecto a false, lo caul permite que la entrada sea necesaria (required).
## [[yii\validators\CompareValidator|compare]] <a name="compare"></a>
## [[yii\validators\CompareValidator|compare]] <span id="compare"></span>
```php
[
......@@ -83,7 +83,7 @@ Este validador compara el valor especificado por la entrada con otro valor y, se
* `<=`: comprueba si el valor siendo validado es menor o igual que el valor con el que se compara
## [[yii\validators\DateValidator|date]] <a name="date"></a>
## [[yii\validators\DateValidator|date]] <span id="date"></span>
```php
[
......@@ -101,7 +101,7 @@ Opcionalmente, puede convertir el valor de entrada en una fecha/tiempo UNIX y al
- `timestampAttribute`: el nombre del atributo al cual este validador puede asignar el fecha/hora UNIX convertida desde la entrada fecha/hora.
## [[yii\validators\DefaultValueValidator|default]] <a name="default"></a>
## [[yii\validators\DefaultValueValidator|default]] <span id="default"></span>
```php
[
......@@ -132,7 +132,7 @@ function foo($model, $attribute) {
> Info: Cómo determinar si un valor está vacío o no, es un tópico separado cubierto en la sección [Valores Vacíos](input-validation.md#handling-empty-inputs) .
## [[yii\validators\NumberValidator|double]] <a name="double"></a>
## [[yii\validators\NumberValidator|double]] <span id="double"></span>
```php
[
......@@ -147,7 +147,7 @@ Esta validador comprueba si el valor de entrada es un número de tipo doble. Es
- `min`: el valor límite inferior (incluido) de el valor. Si no tiene valor, significa que no se comprueba el valor inferior.
## [[yii\validators\EmailValidator|email]] <a name="email"></a>
## [[yii\validators\EmailValidator|email]] <span id="email"></span>
```php
[
......@@ -166,7 +166,7 @@ Este validador comprueba si el valor de entrada es una dirección válida de ema
Por defecto a false. Dese cuenta que para poder usar la validación de IDN has de instalar y activar la extensión de PHP `intl`, o será lanzada una excepción.
## [[yii\validators\ExistValidator|exist]] <a name="exist"></a>
## [[yii\validators\ExistValidator|exist]] <span id="exist"></span>
```php
[
......@@ -200,7 +200,7 @@ Este validador comprueba si el valor de entrada puede ser encontrado en una colu
- `allowArray`: indica cuando permitir que el valor de entrada sea un array. Por defecto a false.Si la propiedad es true y la entrada es un array, cada elemento del array debe existir en la columna destino. Nota que esta propiedad no puede ser true si estás validando, por el contrario, múltiple columnas poniendo el valor del atributo `targetAttribute` como que es un array.
## [[yii\validators\FileValidator|file]] <a name="file"></a>
## [[yii\validators\FileValidator|file]] <span id="file"></span>
```php
[
......@@ -224,7 +224,7 @@ Este validador comprueba que el fichero subido es el adecuado.
`FileValidator` es usado con [[yii\web\UploadedFile]]. Por favor, refiérase a la sección [Subida de ficheros](input-file-upload.md) para una completa cobertura sobre la subida de ficheros y llevar a cabo la validación de los ficheros subidos.
## [[yii\validators\FilterValidator|filter]] <a name="filter"></a>
## [[yii\validators\FilterValidator|filter]] <span id="filter"></span>
```php
[
......@@ -249,7 +249,7 @@ Este validador no valida datos. En su lugar, aplica un filtro sobre el valor de
> Consejo (Tip): Si quieres recortar los valores de entrada, puedes usar directamente el validador [Recorte (trim)](#trim).
## [[yii\validators\ImageValidator|image]] <a name="image"></a>
## [[yii\validators\ImageValidator|image]] <span id="image"></span>
```php
[
......@@ -269,7 +269,7 @@ Este validador comprueba si el valor de entrada representa un fichero de imagen
- `maxHeight`: el máximo alto de la imagen. Por defecto a null, indicando que no hay límite superior.
## [[yii\validators\RangeValidator|in]] <a name="in"></a>
## [[yii\validators\RangeValidator|in]] <span id="in"></span>
```php
[
......@@ -286,7 +286,7 @@ Este validador comprueba si el valor de entrada puede encontrarse entre determin
- `allowArray`: si se permite que el valor de entrada sea un array. Cuando es true y el valor de entrada es un array, cada elemento en el array debe de ser encontrado en la lista de valores determinada,o la validación fallará.
## [[yii\validators\NumberValidator|integer]] <a name="integer"></a>
## [[yii\validators\NumberValidator|integer]] <span id="integer"></span>
```php
[
......@@ -301,7 +301,7 @@ Esta validador comprueba si el valor de entrada es un entero.
- `min`: el valor inferior (incluido). Si no tiene valor, significa que el validador no comprueba el límite inferior.
## [[yii\validators\RegularExpressionValidator|match]] <a name="match"></a>
## [[yii\validators\RegularExpressionValidator|match]] <span id="match"></span>
```php
[
......@@ -316,7 +316,7 @@ Este validador comprueba si el valor de entrada coincide con la expresión regul
- `not`: indica cuando invertir el resultado de la validación. Por defecto a false, significando que la validación es exitosa solamente si el valor de entrada coincide con el patrón. Si esta propiedad está a true, la validación es exitosa solamente si el valor de entrada NO coincide con el patrón.
## [[yii\validators\NumberValidator|number]] <a name="number"></a>
## [[yii\validators\NumberValidator|number]] <span id="number"></span>
```php
[
......@@ -331,7 +331,7 @@ Este validador comprueba si el valor de entrada es un número. Es equivalente al
- `min`: el valor inferior límite (incluido) . Si no tiene valor, significa que el validador no comprueba el valor límite inferior.
## [[yii\validators\RequiredValidator|required]] <a name="required"></a>
## [[yii\validators\RequiredValidator|required]] <span id="required"></span>
```php
[
......@@ -350,7 +350,7 @@ El validador comprueba si el valor de entrada es provisto y no está vacío.
> Info: Como determinar si un valor está vacío o no es un tópico separado cubierto en la sección [Valores vacíos](input-validation.md#handling-empty-inputs).
## [[yii\validators\SafeValidator|safe]] <a name="safe"></a>
## [[yii\validators\SafeValidator|safe]] <span id="safe"></span>
```php
[
......@@ -362,7 +362,7 @@ El validador comprueba si el valor de entrada es provisto y no está vacío.
Este validador no realiza validación de datos. En lugar de ello, es usado para marcar un atributo como seguro [atributos seguros](structure-models.md#safe-attributes).
## [[yii\validators\StringValidator|string]] <a name="string"></a>
## [[yii\validators\StringValidator|string]] <span id="string"></span>
```php
[
......@@ -383,7 +383,7 @@ Este validador comprueba si el valor de entrada es una cadena válida con determ
- `encoding`: la codificación de la cadena de entrada a ser validada. Si no tiene valor, usará el valor de la aplicación [[yii\base\Application::charset|charset]] que por defecto es `UTF-8`.
## [[yii\validators\FilterValidator|trim]] <a name="trim"></a>
## [[yii\validators\FilterValidator|trim]] <span id="trim"></span>
```php
[
......@@ -395,7 +395,7 @@ Este validador comprueba si el valor de entrada es una cadena válida con determ
Este validador no realiza validación de datos. En cambio, recorta los espacios que rodean el valor de entrada. Nota que si el valor de entrada es un array, se ignorará este validador.
## [[yii\validators\UniqueValidator|unique]] <a name="unique"></a>
## [[yii\validators\UniqueValidator|unique]] <span id="unique"></span>
```php
[
......@@ -425,7 +425,7 @@ Este validador comprueba si el valor de entrada es único en una columna de una
Esto puede ser una cadena o un array representando la condición adicional a la consulta (Referirse a [[yii\db\Query::where()]] para el formato de la condición de la consulta), o una función anónima de la forma `function ($query)`, donde `$query` es el objeto [[yii\db\Query|Query]] que puedes modificar en la función.
## [[yii\validators\UrlValidator|url]] <a name="url"></a>
## [[yii\validators\UrlValidator|url]] <span id="url"></span>
```php
[
......
......@@ -4,12 +4,12 @@ Trabajando con código de terceros
De tiempo en tiempo, puede necesitar usar algún código de terceros en sus aplicaciones Yii. O puedes querer usar Yii como una librería en otros sistemas de terceros. En esta sección, te enseñaremos cómo conseguir estos objetivos.
## Usando librerías de terceros en Yii <a name="using-libs-in-yii"></a>
## Usando librerías de terceros en Yii <span id="using-libs-in-yii"></span>
Para usar una librería en una aplicación Yii, primeramente debes de asegurarte que las clases een la librería son incluidas adecuadamente o pueden ser cargadas de forma automática.
### Usando Paquetes de Composer <a name="using-composer-packages"></a>
### Usando Paquetes de Composer <span id="using-composer-packages"></span>
Muchas librerías de terceros son liberadas en términos de paquetes [Composer](https://getcomposer.org/).
Puedes instalar este tipo de librerias siguiendo dos sencillos pasos:
......@@ -28,7 +28,7 @@ require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
```
### Usando librerías Descargadas <a name="using-downloaded-libs"></a>
### Usando librerías Descargadas <span id="using-downloaded-libs"></span>
Si la librería no es liberada como un paquete de Composer, debes de seguir sus instrucciones de instalación para instalarla.
En muchos casos, puedes necesitar descargar manualmente el fichero de la versión y desempaquetarlo en el directorio `BasePath/vendor` , donde `BasePath` representa el [camino base (base path)](structure-applications.md#basePath) de tu aplicación.
......@@ -57,7 +57,7 @@ Yii::$classMap['Class2'] = 'path/to/Class2.php';
```
## Usando Yii en Sistemas de Terceros <a name="using-yii-in-others"></a>
## Usando Yii en Sistemas de Terceros <span id="using-yii-in-others"></span>
Debido a que Yii provee muchas posibilidades excelentes, a veces puedes querer usar alguna de sus características para permitir el desarrollo o mejora de sistemas de terceros, como es WordPress, Joomla, o aplicaciones desarrolladas usando otros frameworks de PHP. Por ejemplo, puedes queres usar la clase [[yii\helpers\ArrayHelper]] o usar la característica [Active Record](db-active-record.md) en un sistema de terceros. Para lograr este objetivo, principalmente necesitas realizar dos pasos: instalar Yii , e iniciar Yii.
......@@ -86,7 +86,7 @@ Como en una aplicación Yii, debes configurar la instancia de la aplicación bas
Ahora puedes usar muchas características provistas por Yii. Por ejemplo, puedes crear clases Active Record y usarlas para trabajar con bases de datos.
## Usando Yii 2 con Yii 1 <a name="using-both-yii2-yii1"></a>
## Usando Yii 2 con Yii 1 <span id="using-both-yii2-yii1"></span>
Si estaba usando Yii 1 previamente, es como si tuvieras una aplicación Yii 1 funcionando. En vez de reescribir toda la aplicación en Yii 2, puedes solamente mejorarla usando alguna de las características sólo disponibles en Yii 2.
......
......@@ -18,7 +18,7 @@ En particulier, vous devez savoir créer une base de données, et exécuter des
gestion de bases de données.
Préparer la Base de Données <a name="preparing-database"></a>
Préparer la Base de Données <span id="preparing-database"></span>
--------------------
Pour commencer, créez une base de données appelée `yii2basic`, depuis laquelle vous irez chercher les données dans
......@@ -50,7 +50,7 @@ INSERT INTO `country` VALUES ('US','United States',278357000);
A ce niveau, vous avez une base de données appelée `yii2basic`, et dedans, une table `country` comportant trois colonnes, contenant dix lignes de données.
Configurer une Connexion à la BDD <a name="configuring-db-connection"></a>
Configurer une Connexion à la BDD <span id="configuring-db-connection"></span>
---------------------------
Avant de continuer, assurons nous que vous avez installé à la fois l'extension PHP
......@@ -85,7 +85,7 @@ On peut accéder à connexion à la BDD configurée ci-dessus depuis le code de
Pour plus d'informations, merci de vous référer à la section [Configurations](concept-configurations.md).
Créer un Active Record <a name="creating-active-record"></a>
Créer un Active Record <span id="creating-active-record"></span>
-------------------------
Pour représenter et aller chercher des données dans la table `country`, créez une classe dérivée d'[Active Record](db-active-record.md) appelée `Country`, et enregistrez la dans le fichier `models/Country.php`.
......@@ -132,7 +132,7 @@ Vous pouvez trouver plus d'informations dans la section [Active Record](db-activ
[Data Access Objects](db-dao.md).
Créer une Action <a name="creating-action"></a>
Créer une Action <span id="creating-action"></span>
------------------
Pour exposer les données pays aux utilisateurs, vous devez créer une action. Plutôt que de placer la nouvelle action
......@@ -188,7 +188,7 @@ Pour limiter le nombre de pays retournés par chaque requête, la requête est p
A la fin du code, l'action `index` effectue le rendu d'une vue nommée `index`, et lui transmet les données pays ainsi que les informations de pagination.
Créer une Vue <a name="creating-view"></a>
Créer une Vue <span id="creating-view"></span>
---------------
Dans le dossier `views`, commencez par créer un sous-dossier nommé `country`. Ce dossier sera utilisé pour contenir
......@@ -219,7 +219,7 @@ Dans la deuxième partie, un widget [[yii\widgets\LinkPager]] est rendu en utili
Le widget `LinkPager` affiche une liste de boutons de pages. Le fait de cliquer sur l'un deux rafraichit les données pays dans la page correspondante.
Essayer <a name="trying-it-out"></a>
Essayer <span id="trying-it-out"></span>
-------------
Pour voir comment tout le code ci-dessus fonctionne, utilisez votre navigateur pour accéder à l'URL suivant :
......@@ -253,7 +253,7 @@ En coulisse, [[yii\data\Pagination|Pagination]] fournit toutes les fonctionnalit
affichés.
Résumé <a name="summary"></a>
Résumé <span id="summary"></span>
-------
Dans cette section, vous avez appris comment travailler avec une base de données. Vous avez également appris comment
......
......@@ -17,7 +17,7 @@ formulaire
* Construire un formulaire HTML dans une [vue](structure-views.md)
Créer un Modèle <a name="creating-model"></a>
Créer un Modèle <span id="creating-model"></span>
----------------
Les données demandées à l'utilisateur seront représentées par une classe de modèle `EntryForm` comme montrée ci-dessous
......@@ -81,7 +81,7 @@ if ($model->validate()) {
```
Créer une Action <a name="creating-action"></a>
Créer une Action <span id="creating-action"></span>
------------------
Maintenant, vous allez créer une action `entry` dans le contrôleur `site` qui utilisera le nouveau modèle. Le processus
......@@ -138,7 +138,7 @@ valides. En pratique, vous devriez envisager d'utiliser [[yii\web\Controller::re
[problèmes de multiple soumission de formulaire](http://fr.wikipedia.org/wiki/Post-Redirect-Get).
Créer des Vues <a name="creating-views"></a>
Créer des Vues <span id="creating-views"></span>
--------------
Enfin, créez deux fichiers de vue nommés `entry-confirm` et `entry`. Ceux-ci seront rendus par l'action `entry`,
......@@ -187,7 +187,7 @@ donnée "email". Après les champs de saisie, la méthode [[yii\helpers\Html::su
bouton de soumission.
Essayer <a name="trying-it-out"></a>
Essayer <span id="trying-it-out"></span>
-------------
Pour voir comment ça fonctionne, utilisez votre navigateur pour accéder à l'URL suivante :
......@@ -210,7 +210,7 @@ page affichant les données que vous venez de saisir.
### La Magie expliquée <a name="magic-explained"></a>
### La Magie expliquée <span id="magic-explained"></span>
Vous vous demandez peut-être comment le formulaire HTML fonctionne en coulisse, parce qu'il semble presque magique
qu'il puisse afficher une étiquette pour chaque champ de saisie et afficher sans rafraichir la page des messages
......@@ -241,7 +241,7 @@ Vous pouvez personnaliser une étiquette dans une vue en employant le code suiva
Comme vous l'apprendrez plus tard, écrire un widget et aussi extrêmement simple. Vous voudrez sans doute transformer une grande partie de votre code de vues en widgets réutilisables pour simplifier les développements de vues futurs.
Résumé <a name="summary"></a>
Résumé <span id="summary"></span>
-------
Dans cette section du guide, vous avez touché toutes les parties du patron de conception MVC. Vous avez appris à créer
......
......@@ -13,7 +13,7 @@ Au long de ce tutoriel, vous apprendrez comment :
* Personnaliser le code généré par Gii
Démarrer Gii <a name="starting-gii"></a>
Démarrer Gii <span id="starting-gii"></span>
------------
[Gii](tool-gii.md) est fourni dans Yii en tant que [module](structure-modules.md). Vous pouvez activer Gii en le
......@@ -60,7 +60,7 @@ http://hostname/index.php?r=gii
![Gii](images/start-gii.png)
Générer une Classe Active Record <a name="generating-ar"></a>
Générer une Classe Active Record <span id="generating-ar"></span>
---------------------------------
Pour utiliser Gii pour générer une classe Active Record, sélectionnez le "Model Generator" (en cliquant sur le lien
......@@ -85,7 +85,7 @@ Ensuite, vous verrez une page de confirmation indiquant que le code a été gén
existant, vous verrez également un message indiquant qu’il a été écrasé par le code nouvellement généré.
Générer du Code CRUD <a name="generating-crud"></a>
Générer du Code CRUD <span id="generating-crud"></span>
--------------------
CRUD signifie Create, Read, Update, and Delete (Créer, Lire, Mettre à Jour et Supprimer), représentant le quatre tâches
......@@ -108,7 +108,7 @@ Si vous aviez précédemment créé les fichiers `controllers/CountryController
(Les versions précédentes n’avaient pas de fonctionnalités CRUD).
Essayer <a name="trying-it-out"></a>
Essayer <span id="trying-it-out"></span>
-------------
Pour voir comment ça fonctionne, utilisez votre navigateur pour accéder à l’URL suivant :
......@@ -142,7 +142,7 @@ fonctionnalités sont implémentées, ou les personnaliser :
à la section [Gii](tool-gii.md).
Résumé <a name="summary"></a>
Résumé <span id="summary"></span>
-------
Dans cette section, vous avez appris à utiliser Gii pour générer le code qui implémente une fonctionnalité CRUD
......
......@@ -14,7 +14,7 @@ A travers ce tutoriel, vous apprendrez trois choses :
3. comment une application distribue les requêtes aux [actions](structure-controllers.md#creating-actions).
Créer une Action <a name="creating-action"></a>
Créer une Action <span id="creating-action"></span>
------------------
Pour la tâche "Hello", vous allez créer une [action](structure-controllers.md#creating-actions) `dire` qui reçoit un paramètre
......@@ -54,7 +54,7 @@ La méthode action de notre exemple prend un paramètre `$message`, dont la vale
Au sein de la méthode action, [[yii\web\Controller::render()|render()]] est appelé pour effectuer le rendu d'un fichier [vue](structure-views.md) appelé `dire`. Le paramètre `message` est également transmis à la vue afin qu'il puisse y être utilisé. Le résultat du rendu est renvoyé à l'utilisateur par la méthode action. Ce résultat sera reçu par l'application et présenté à l'utilisateur dans le navigateur (en tant qu'élément d'une page HTML complète).
Créer une Vue <a name="creating-view"></a>
Créer une Vue <span id="creating-view"></span>
---------------
Les [vues](structure-views.md) sont des scripts qu'on écrit pour générer le contenu d'une réponse.
......@@ -78,7 +78,7 @@ En réalité, la vue `dire` est simplement un script PHP exécuté par la métho
Le contenu affiché par le script de vue sera renvoyé à l'application en tant que résultat de réponse. L'application renverra à son tour ce résultat à l'utilisateur.
Essayer <a name="trying-it-out"></a>
Essayer <span id="trying-it-out"></span>
-------------
Après avoir créé l'action et la vue, vous pouvez accéder à la nouvelle page en accédant à l'URL suivant :
......@@ -105,7 +105,7 @@ sera comprise comme la classe contrôleur `SiteController` et l'action `dire`. I
au nom de classe contrôleur `PosterCommentaireController`.
Résumé <a name="summary"></a>
Résumé <span id="summary"></span>
-------
Dans cette section, vous avez touché aux parties contrôleur et vue du patron de conception MVC.
......
......@@ -7,7 +7,7 @@ La première méthode est conseillée, étant donné qu'elle permet d'installer
> Remarque : Contrairement à Yii 1, les installations standards de Yii 2 auront pour résultat le téléchargement et l'installation du framework, ainsi que d'un squelette d'application.
Installer via Composer <a name="installing-via-composer"></a>
Installer via Composer <span id="installing-via-composer"></span>
----------------------
Si vous n'avez pas déjà installé Composer, vous pouvez le faire en suivant les instructions sur le site [getcomposer.org](https://getcomposer.org/download/).
......@@ -33,7 +33,7 @@ Cette commande installera Yii dans le dossier `basic`.
> Notez que la version de développement de Yii ne doit pas être utilisée en production, vu qu'elle pourrait *casser* votre code existant.
Installer depuis une archive <a name="installing-from-archive-file"></a>
Installer depuis une archive <span id="installing-from-archive-file"></span>
----------------------------
Installer Yii depuis une archive se fait en deux étapes :
......@@ -42,7 +42,7 @@ Installer Yii depuis une archive se fait en deux étapes :
2. Décompressez l'archive dans un dossier accessible via le Web.
Autres options d'installation <a name="other-installation-options"></a>
Autres options d'installation <span id="other-installation-options"></span>
-----------------------------
Les instructions d'installation ci-dessus montrent comment installer Yii, ce qui installe également une application Web de base qui fonctionne *out of the box*.
......@@ -54,7 +54,7 @@ Mais il y a d'autres options d'installation disponibles :
* Si vous voulez commencer par une application plus sophistiquée, mieux adaptée aux environnements d'équipe de développement, vous pouvez envisager l'installation du [Modèle d'application avancée](tutorial-advanced-app.md).
Vérifier l'installation <a name="verifying-installation"></a>
Vérifier l'installation <span id="verifying-installation"></span>
-----------------------
Après l'installation, vous pouvez utiliser votre navigateur pour accéder à l'application Yii avec l'URL suivante :
......@@ -80,7 +80,7 @@ Vous devriez voir dans votre navigateur la page ci-dessus. Sinon, merci de véri
Vous devez configurer votre installation de PHP afin qu'elle réponde aux exigences minimales de Yii. Le plus important étant que vous ayez PHP 5.4 ou plus. Si votre application a besoin d'une base de données, vous devez également installer l'[extension PHP PDO](http://www.php.net/manual/en/pdo.installation.php) ainsi qu'un pilote correspondant à votre système de base de données (par exemple `pdo_mysql` pour MySQL).
Configuration du serveur Web <a name="configuring-web-servers"></a>
Configuration du serveur Web <span id="configuring-web-servers"></span>
----------------------------
> Remarque : Si vous voulez juste tester Yii sans intention de l'utiliser sur un serveur de production, vous pouvez ignorer ce paragraphe.
......@@ -95,7 +95,7 @@ Vous pouvez également cacher `index.php` dans l'URL, comme décrit dans la part
> Remarque: Si votre application s'exécute dans un environnement d'hébergement mutualisé où vous n'avez pas la permission de modifier la configuration du serveur Web, vous pouvez ajuster la structure de votre application pour une meilleure sécurité. Merci de lire la partie [Environnement d'hébergement mutualisé](tutorial-shared-hosting.md) pour en savoir plus.
### Configuration Apache recommandée <a name="recommended-apache-configuration"></a>
### Configuration Apache recommandée <span id="recommended-apache-configuration"></span>
Utilisez la configuration suivante dans `httpd.conf`, ou dans la configuration de votre hôte virtuel. Notez que vous devez remplacer `path/to/basic/web` par le chemin vers le dossier `basic/web`.
......@@ -117,7 +117,7 @@ DocumentRoot "path/to/basic/web"
```
### Configuration Nginx recommandée <a name="recommended-nginx-configuration"></a>
### Configuration Nginx recommandée <span id="recommended-nginx-configuration"></span>
Pour utiliser Nginx, vous devez avoir installé PHP en utilisant [FPM SAPI](http://php.net/install.fpm).
Utilisez la configuration Nginx suivante, en remplaçant `path/to/basic/web` par le chemin vers le dossier `basic/web` et `mysite.local` par le nom d'hôte de votre serveur.
......
......@@ -11,7 +11,7 @@ de votre configuration. Cette section vous initiera aux fonctionnalités intégr
Pour vos besoins, merci d'ajuster les URLs dans notre description comme il convient.
Fonctionnalité <a name="Functionality"></a>
Fonctionnalité <span id="Functionality"></span>
--------------
L'application basique installée contient quatre pages :
......@@ -29,7 +29,7 @@ Vous devriez également voir une barre d'outils en bas de votre fenêtre de navi
C'est un [outil de débogage](tool-debugger.md) utile fourni par Yii pour enregistrer et afficher de nombreuses informations de débogage, telles que des messages de logs, statuts de réponses, les requêtes lancées vers la base de données, et ainsi de suite.
Structure de l'Application <a name="application-structure"></a>
Structure de l'Application <span id="application-structure"></span>
---------------------
Les répertoires et fichiers les plus importants de votre application sont (en supposant que le répertoire racine de l'application est `basic`) :
......@@ -69,7 +69,7 @@ et distribue la requête aux éléments MVC. Les [Widgets](structure-widgets.md)
pour aider à créer des éléments d'interface complexes et dynamiques.
Cycle de vie d'une requête <a name="request-lifecycle"></a>
Cycle de vie d'une requête <span id="request-lifecycle"></span>
-----------------
Le diagramme suivant présente la manière dont une application traite une requête.
......
......@@ -23,7 +23,7 @@ Les scipts de démarrage effectuent principalement les tâches suivantes :
* Appeler [[yii\base\Application::run()]] pour traiter la requête entrante.
## Applications Web <a name="web-applications"></a>
## Applications Web <span id="web-applications"></span>
Ce qui suit est le code du script de démarrage du [Modèle Basique d'Application Web](start-installation.md).
......@@ -47,7 +47,7 @@ $config = require(__DIR__ . '/../config/web.php');
```
## Applications Console <a name="console-applications"></a>
## Applications Console <span id="console-applications"></span>
De même, le code qui suit est le code du script de démarrage d'une application console :
......@@ -83,7 +83,7 @@ exit($exitCode);
```
## Définir des Constantes <a name="defining-constants"></a>
## Définir des Constantes <span id="defining-constants"></span>
Les scripts de démarrage sont l'endroit idéal pour définir des constantes globales. Yii supporte les trois constantes suivantes :
......
......@@ -8,7 +8,7 @@ semplicemente eseguendo un comando.
> Nota: diversamente da Yii 1, le installazioni standard di Yii 2 comportano il download e l'installazione sia del framework che dello scheletro dell'applicazione
Installazione via Composer <a name="installing-via-composer"></a>
Installazione via Composer <span id="installing-via-composer"></span>
--------------------------
Se non hai già installato Composer puoi farlo seguendo le istruzioni al sito
......@@ -49,7 +49,7 @@ installa Yii in una directory di nome `basic`. Puoi scegliere un nome diverso, s
> il tuo codice.
Installazione da un archivio <a name="installing-from-archive-file"></a>
Installazione da un archivio <span id="installing-from-archive-file"></span>
----------------------------
L'installazione da un archivio compresso comporta tre passaggi:
......@@ -65,7 +65,7 @@ L'installazione da un archivio compresso comporta tre passaggi:
```
Altre modalità di installazione <a name="other-installation-options"></a>
Altre modalità di installazione <span id="other-installation-options"></span>
-------------------------------
Le istruzioni sopra elencate mostrano come installare Yii, e creano inoltre un'applicazione web base funzionante.
......@@ -79,7 +79,7 @@ Ma ci sono altre opzioni disponibili per l'installazione:
[template di applicazione avanzata](tutorial-advanced-app.md).
Verifica dell'installazione <a name="verifying-installation"></a>
Verifica dell'installazione <span id="verifying-installation"></span>
---------------------------
Dopo l'installazione puoi usare il tuo browser per accedere all'applicazione Yii installata con l'URL seguente:
......@@ -110,7 +110,7 @@ PHP 5.4 o successivo. Devi inoltre installare le [estensioni PDO di PHP](http://
di database di PDO (come ad esempio `pdo_mysql` per i database MySQL), se la tua applicazione richiede un database.
Configurazione del webserver <a name="configuring-web-servers"></a>
Configurazione del webserver <span id="configuring-web-servers"></span>
----------------------------
> Informazione: puoi saltare questa parte per ora se stai solo provando Yii e non hai intenzione di installarlo su un server di produzione.
......@@ -135,7 +135,7 @@ configurazione del webserver, ma dovrai comunque correggere la struttura della t
riferimento alla sezione [ambienti di hosting condiviso](tutorial-shared-hosting.md) per maggiori dettagli.
### Configurazione consigliata di Apache <a name="recommended-apache-configuration"></a>
### Configurazione consigliata di Apache <span id="recommended-apache-configuration"></span>
Usa questa configurazione nel file `httpd.conf` di Apache o nella definizione del tuo *VirtualHost*. Tieni presente che dovrai
modificare `path/to/basic/web` con il percorso reale della tua `basic/web`.
......@@ -158,7 +158,7 @@ DocumentRoot "path/to/basic/web"
```
### Configurazione consigliata di Nginx <a name="recommended-nginx-configuration"></a>
### Configurazione consigliata di Nginx <span id="recommended-nginx-configuration"></span>
Devi aver installato PHP con il demone [FPM](http://php.net/install.fpm) per usare [Nginx](http://wiki.nginx.org/).
Usa questa configurazione per Nginx, sostituendo `path/to/basic/web` con il percorso reale di `basic/web` e `mysite.local` con
......
......@@ -22,7 +22,7 @@ if ($data === false) {
```
## キャッシュコンポーネント <a name="cache-components"></a>
## キャッシュコンポーネント <span id="cache-components"></span>
データキャッシュはメモリ、ファイル、データベースなどさまざまなキャッシュストレージを表す、いわゆるキャッシュコンポーネントに依存しています。
......@@ -64,7 +64,7 @@ if ($data === false) {
> ヒント: キャッシュコンポーネントは複数登録することができます。`cache` という名前のコンポーネントはキャッシュに依存したクラスによってデフォルトで使用されています (例えば [[yii\web\UrlManager]] など) 。
### サポートされているキャッシュストレージ <a name="supported-cache-storage"></a>
### サポートされているキャッシュストレージ <span id="supported-cache-storage"></span>
Yii はさまざまなキャッシュストレージをサポートしています。以下は概要です:
......@@ -81,7 +81,7 @@ Yii 縺ッ縺輔∪縺悶∪縺ェ繧ュ繝」繝す繝・繧ケ繝医Ξ繝シ繧ク繧偵し繝昴繝医@縺ヲ縺∪
> ヒント: 同じアプリケーション内で異なるキャッシュを使用することもできます。一般的なやり方として、小さくとも常に使用されるデータ (例えば、統計データなど) を格納する場合はメモリベースのキャッシュストレージを使用し、大きくて使用頻度の低いデータを格納する場合はファイルベース、またはデータベースのキャッシュストレージを使用します (例えば、ページコンテンツなど) 。
## キャッシュ API <a name="cache-apis"></a>
## キャッシュ API <span id="cache-apis"></span>
すべてのキャッシュコンポーネントが同じ基底クラス [[yii\caching\Cache]] を持っているので、以下の API をサポートしています。
......@@ -107,7 +107,7 @@ $value2 = $cache['var2']; // $value2 = $cache->get('var2'); 縺ィ蜷檎ュ
```
### キャッシュのキーについて <a name="cache-keys"></a>
### キャッシュのキーについて <span id="cache-keys"></span>
キャッシュに格納される各データは、一意のキーによって識別されるため、キャッシュ内にデータを格納するときはキーを指定する必要があります。あとでキャッシュからデータを取得するときは、それに対応するキーを用意する、といった感じです。
......@@ -141,7 +141,7 @@ $value2 = $cache['var2']; // $value2 = $cache->get('var2'); 縺ィ蜷檎ュ
相互運用性を確保するために、英数字のみを使用する必要があります。
### キャッシュの有効期限 <a name="cache-expiration"></a>
### キャッシュの有効期限 <span id="cache-expiration"></span>
キャッシュに格納されたデータは、いくつかのキャッシュポリシー (例えば、キャッシュスペースがいっぱいになったときは最も古いデータが削除される、など) の実施で除去されない限り、永遠に残り続けます。この動作を変えるために [[yii\caching\Cache::set()|set()]] で有効期限パラメータを指定することができます。パラメータはキャッシュ内に何秒間有効であるかを示します。[[yii\caching\Cache::get()|get()]] でデータを取得する際に有効期限が切れていた場合は、キャッシュ内にデータが見つからなかったことを示す false が返されます。例えば、
......@@ -158,7 +158,7 @@ if ($data === false) {
```
### キャッシュの依存関係 <a name="cache-dependencies"></a>
### キャッシュの依存関係 <span id="cache-dependencies"></span>
有効期限の設定に加えて、キャッシュされたデータにはいわゆる *キャッシュの依存関係* の変化によって無効にすることもできます。例えば [[yii\caching\FileDependency]] はファイルの更新時刻の依存関係を表しています。依存関係が変更されたときに、対応するファイルが更新されることを意味しています。その結果、キャッシュ内で見つかった古いファイルのコンテンツは、無効とされるべきであり [[yii\caching\Cache::get()|get()]] は false を返します。
......@@ -188,7 +188,7 @@ $data = $cache->get($key);
- [[yii\caching\TagDependency]]: 一つまたは複数のタグを持つキャッシュされたデータを関連付けます。[[yii\caching\TagDependency::invalidate()]] を呼び出すことによって指定されたタグ(複数可)と、キャッシュされたデータを無効にすることができます。
## クエリキャッシュ <a name="query-caching"></a>
## クエリキャッシュ <span id="query-caching"></span>
クエリキャッシュは、データキャッシュ上に構築された特別なキャッシュ機能で、データベースのクエリ結果をキャッシュするために提供されています。
......@@ -209,7 +209,7 @@ $result = $db->cache(function ($db) {
> 情報: いくつかの DBMS (例えば [MySQL](http://dev.mysql.com/doc/refman/5.1/ja/query-cache.html)) でもデータベースのサーバサイドのクエリキャッシュをサポートしています。どちらのクエリキャッシュメカニズムも選べますが、前述した Yii のクエリキャッシュを使用することによって、キャッシュの依存関係を柔軟に指定できたり、潜在的にもより効率的でしょう。
### 設定 <a name="query-caching-configs"></a>
### 設定 <span id="query-caching-configs"></span>
クエリキャッシュは [[yii\db\Connection]] を通して 3 つのグローバルな設定可能オプションがあります:
......@@ -218,7 +218,7 @@ $result = $db->cache(function ($db) {
* [[yii\db\Connection::queryCache|queryCache]]: これはキャッシュコンポーネントの ID を表します。デフォルトは `'cache'`。有効なキャッシュコンポーネントが存在する場合にのみ、クエリキャッシュが使用可能になります。
### 使い方 <a name="query-caching-usages"></a>
### 使い方 <span id="query-caching-usages"></span>
クエリキャッシュを使用する必要がある複数の SQL クエリを持っている場合は [[yii\db\Connection::cache()]] を使用することができます。使い方としては以下のように、
......@@ -281,7 +281,7 @@ $result = $db->cache(function ($db) {
```
### 制約 <a name="query-caching-limitations"></a>
### 制約 <span id="query-caching-limitations"></span>
リソースハンドルを返すようなクエリにはクエリキャッシュは働きません。例えばいくつかの DBMS において BLOB 型のカラムを用いる場合、クエリ結果はカラムデータについてリソースハンドルを返します。
......
......@@ -19,11 +19,11 @@ if ($this->beginCache($id)) {
[データキャッシュ](caching-data.md) と同様に、キャッシュされたコンテンツを識別するためにユニークな `$id` が必要になります。
## キャッシュのオプション <a name="caching-options"></a>
## キャッシュのオプション <span id="caching-options"></span>
[[yii\base\View::beginCache()|beginCache()]] メソッドの 2 番目のパラメータを配列にすることで、フラグメントキャッシュに関する追加のオプションを指定することもできます。裏で、この配列のオプションは実際にフラグメントキャッシュ機能を実装している [[yii\widgets\FragmentCache]] ウィジェットを構成するために使用されます。
### 持続時間 <a name="duration"></a>
### 持続時間 <span id="duration"></span>
おそらくフラグメントキャッシュで通常よく使われるであろうオプションは [[yii\widgets\FragmentCache::duration|duration]] でしょう。このオプションにはコンテンツがどれだけの時間キャッシュ内において有効であるかを指定します。以下のコードは最大で 1 時間コンテンツの断片をキャッシュします:
......@@ -40,7 +40,7 @@ if ($this->beginCache($id, ['duration' => 3600])) {
オプションがセットされていない場合は、デフォルトである 60 が使われ、つまり有効期限が 60 秒間のキャッシュされたコンテンツを意味します。
### 依存関係 <a name="dependencies"></a>
### 依存関係 <span id="dependencies"></span>
[データキャッシュ](caching-data.md#cache-dependencies) と同様に、キャッシュされたコンテンツの断片は依存関係を持つことができます。例えば、表示されている投稿の内容は、投稿が変更されたか否かに依存する、といった具合です。
......@@ -61,7 +61,7 @@ if ($this->beginCache($id, ['dependency' => $dependency])) {
```
### バリエーション <a name="variations"></a>
### バリエーション <span id="variations"></span>
キャッシュされたコンテンツはいくつかのパラメータによって変化させることもできます。例えば、複数の言語をサポートしているウェブアプリケーションに対して、ビューコードの同じ部分を、異なる言語で生成することができます。現在のアプリケーションの言語に応じて、キャッシュされたコンテンツに変更を加えるといったことが可能になります。
......@@ -77,7 +77,7 @@ if ($this->beginCache($id, ['variations' => [Yii::$app->language]])) {
```
### トグルキャッシュ <a name="toggling-caching"></a>
### トグルキャッシュ <span id="toggling-caching"></span>
また、ある条件が満たされた場合にのみフラグメントキャッシュを有効にすることもできます。たとえば、フォームが表示されているページに対して、最初の (GET リクエストによる) リクエストの場合だけはキャッシュしたいと思いますが、その後の (POST リクエストによる) フォームの表示では、フォームにユーザ入力が含まれている可能性があるため、キャッシュをすべきではありません。これを行うには、以下のように [[yii\widgets\FragmentCache::enabled|enabled]] オプションをセットします:
......@@ -91,7 +91,7 @@ if ($this->beginCache($id, ['enabled' => Yii::$app->request->isGet])) {
```
## キャッシュのネスト <a name="nested-caching"></a>
## キャッシュのネスト <span id="nested-caching"></span>
フラグメントキャッシュはネストすることができます。つまり、キャッシュされる断片を、より大きなキャッシュされる断片で囲むことができます。例えば、コメントが内側のフラグメントキャッシュ内にキャッシュされ、それらが外側のフラグメントキャッシュに記事内容と一緒にキャッシュされます。以下のコードは 2 つのフラグメントキャッシュをどのようにネストできるかを示したものです:
......@@ -116,7 +116,7 @@ if ($this->beginCache($id1)) {
ネストされたキャッシュには、異なるキャッシュオプションを設定することができます。 たとえば、上記の例における内側のキャッシュと外側のキャッシュに対して、異なる持続期間の値を設定する事が可能です。 これによって、外側のキャッシュでキャッシュされたデータが無効になった場合でも、内側のキャッシュが有効な内側の断片を提供することが可能になります。 しかし、その逆は真ではありません。 外側のキャッシュが有効であると判断された場合には、内側のキャッシュが無効になった後でも、外側のキャッシュが古くなったコンテンツのコピーを提供し続けます。 ネストされたキャッシュの持続時間や依存関係の設定を間違うと、無効になった内側のキャッシュデータが外側のキャッシュに残り続けることになるので、注意が必要です。
## ダイナミックコンテンツ <a name="dynamic-content"></a>
## ダイナミックコンテンツ <span id="dynamic-content"></span>
フラグメントキャッシュを使用する際、出力全体が比較的静的で、一ヶ所ないし数ヶ所だけが例外的に動的であるというような状況に遭遇します。例えば、ページ上部にはメインメニューバーと現在のユーザの名前とが一緒に表示される場合があります。他には、リクエスト毎に実行しなければいけない PHP のコードが含まれている場合(例えば、アセットバンドルを登録するためのコード)などです。この両方の問題は、いわゆる *ダイナミックコンテンツ* 機能によって解決することができます。
......
......@@ -10,7 +10,7 @@ HTTP キャッシュ
* [[yii\filters\HttpCache::cacheControlHeader|Cache-Control]]
## `Last-Modified` ヘッダ <a name="last-modified"></a>
## `Last-Modified` ヘッダ <span id="last-modified"></span>
`Last-Modified` ヘッダは、クライアントがそれをキャッシュする時から、ページが変更されたかどうかを示すために、タイムスタンプを使用しています。
......@@ -46,7 +46,7 @@ public function behaviors()
上記のコードは `index` アクションでのみ HTTP キャッシュを有効にしている状態です。投稿の最終更新時刻に基づいて `Last-Modified` を生成する必要があります。ブラウザが初めて `index` ページにアクセスすると、ページはサーバ上で生成されブラウザに送信されます。もしブラウザが再度同じページにアクセスし、その期間中に投稿に変更がない場合は、ブラウザはクライアントサイドにキャッシュしたものを使用するので、サーバはページを再生成することはありません。その結果、サーバサイドのレンダリング処理とページコンテンツの送信は両方ともスキップされます。
## `ETag` ヘッダ <a name="etag"></a>
## `ETag` ヘッダ <span id="etag"></span>
"Entity Tag" (略して `ETag`) ヘッダはページコンテンツを表すためにハッシュを使用します。ページが変更された場合ハッシュも同様に変更されます。サーバサイドで生成されたハッシュとクライアントサイドで保持しているハッシュを比較することによって、ページが変更されたかどうか、また再送信するべきかどうかを決定します。
......@@ -87,7 +87,7 @@ ETag はリクエスト毎に再評価する必要があるため、負荷の高
> 注意: [RFC 7232](http://tools.ietf.org/html/rfc7232#section-2.4) に準拠して `Etag` と `Last-Modified` ヘッダの両方を設定した場合、`HttpCache` はその両方とも送信します。また、もし `If-None-Match` ヘッダと `If-Modified-Since` ヘッダの両方を送信した場合は前者のみが尊重されます。
## `Cache-Control` ヘッダ <a name="cache-control"></a>
## `Cache-Control` ヘッダ <span id="cache-control"></span>
`Cache-Control` ヘッダはページのための一般的なキャッシュポリシーを指定します。ヘッダ値に [[yii\filters\HttpCache::cacheControlHeader]] プロパティを設定することで、それを送ることができます。デフォルトでは、以下のヘッダーが送信されます:
......@@ -95,11 +95,11 @@ ETag はリクエスト毎に再評価する必要があるため、負荷の高
Cache-Control: public, max-age=3600
```
## セッションキャッシュリミッタ<a name="session-cache-limiter"></a>
## セッションキャッシュリミッタ<span id="session-cache-limiter"></span>
ページでセッションを使用している場合、PHP はいくつかのキャッシュ関連の HTTP ヘッダ(PHP の設定ファイル内で指定されている session.cache_limiter など)を自動的に送信します。これらのヘッダは `HttpCache` で妨害したり、必要なキャッシュを無効にしたりできます。この動作を変更したい場合は [[yii\filters\HttpCache::sessionCacheLimiter]] プロパティを設定します。プロパティには `public``private``private_no_expire`、そして `nocache` などの文字列の値を使用することができます。これらの値についての説明は [session_cache_limiter()](http://www.php.net/manual/ja/function.session-cache-limiter.php) を参照してください。
## SEO への影響 <a name="seo-implications"></a>
## SEO への影響 <span id="seo-implications"></span>
検索エンジンのボットはキャッシュヘッダを尊重する傾向があります。 クローラの中には、一定期間内に処理するドメインごとのページ数に制限を持っているものもあるため、キャッシュヘッダを導入して、処理の必要があるページ数を減らしてやると、サイトのインデックスの作成を促進できるかも知れません。
......@@ -5,7 +5,7 @@
たとえば、 `@yii` というエイリアスは Yii フレームワークのインストールパスを表し、 `@web` は現在実行中の Web アプリケーションのベース URL を表します。
エイリアスの定義 <a name="defining-aliases"></a>
エイリアスの定義 <span id="defining-aliases"></span>
----------------
[[Yii::setAlias()]] を呼び出すことにより、ファイルパスまたは URL のエイリアスを定義することができます。
......@@ -47,7 +47,7 @@ return [
```
エイリアスの解決 <a name="resolving-aliases"></a>
エイリアスの解決 <span id="resolving-aliases"></span>
-----------------
[[Yii::getAlias()]] を呼び出して、ルートエイリアスが表すファイルパスまたはURLを解決することができます。
......@@ -77,7 +77,7 @@ Yii::getAlias('@foo/bar/file.php'); // /path2/bar/file.php を表示
もし `@foo/bar` がルートエイリアスとして定義されていなければ、最後のステートメントは `/path/to/foo/bar/file.php` を表示します。
エイリアスの使用 <a name="using-aliases"></a>
エイリアスの使用 <span id="using-aliases"></span>
-------------
エイリアスは、それをパスやURLに変換するための [[Yii::getAlias()​]] の呼び出しがなくても、Yiiの多くの場所でみられます。
......@@ -95,7 +95,7 @@ $cache = new FileCache([
プロパティやメソッドのパラメータがエイリアスをサポートしているかどうかは、API ドキュメントに注意を払ってください。
事前定義されたエイリアス <a name="predefined-aliases"></a>
事前定義されたエイリアス <span id="predefined-aliases"></span>
------------------
Yii では、一般的に使用されるフ​​ァイルのパスと URL を簡単に参照できるよう、エイリアスのセットが事前に定義されています:
......@@ -112,7 +112,7 @@ Yii では、一般的に使用されるフ​​ァイルのパスと URL を
`@yii` エイリアスは [エントリスクリプト](structure-entry-scripts.md)`Yii.php` ファイルを読み込んだ時点で定義されます。
エイリアスの残りの部分は、アプリケーションのコンストラクタ内で、アプリケーションの [構成情報](concept-configurations.md) を適用するときに定義されます。
エクステンションのエイリアス <a name="extension-aliases"></a>
エクステンションのエイリアス <span id="extension-aliases"></span>
-----------------
Composer でインストールされる各 [エクステンション](structure-extensions.md) ごとに、エイリアスが自動的に定義されます。
......
......@@ -9,7 +9,7 @@ Yiiは、必要となるすべてのクラスファイルを、特定してイ
ここに記述されている内容は、同様に、インタフェースとトレイトのオートロードにも適用されることに注意してください。
Yii オートローダーの使用 <a name="using-yii-autoloader"></a>
Yii オートローダーの使用 <span id="using-yii-autoloader"></span>
------------------------
Yii のクラスオートローダーを使用するには、自分のクラスを作成して名前を付けるとき、次の2つの単純なルールに従わなければなりません:
......@@ -36,7 +36,7 @@ $classFile = Yii::getAlias('@' . str_replace('\\', '/', $className) . '.php');
オートロードできるようになります。
クラスマップ <a name="class-map"></a>
クラスマップ <span id="class-map"></span>
---------
Yii のクラスオートローダーは、 *クラスマップ* 機能をサポートしており、クラス名を対応するクラスファイルのパスにマップできます。
......@@ -54,7 +54,7 @@ Yii::$classMap['foo\bar\MyClass'] = 'path/to/MyClass.php';
[ブートストラップ](runtime-bootstrapping.md) プロセス内でクラスマップを設定する必要があります。
他のオートローダーの使用 <a name="using-other-autoloaders"></a>
他のオートローダーの使用 <span id="using-other-autoloaders"></span>
-----------------------
Yii はパッケージ依存関係マネージャとして Composer を包含しているので、Composer のオートローダーもインストールすることをお勧めします。
......@@ -77,7 +77,7 @@ require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
それを [エントリスクリプト](structure-entry-scripts.md) でインクルードする必要があります。
エクステンションクラスのオートロード <a name="autoloading-extension-classes"></a>
エクステンションクラスのオートロード <span id="autoloading-extension-classes"></span>
-----------------------------
Yii のオートローダーは、 [エクステンション](structure-extensions.md) クラスのオートロードが可能です。唯一の要件は、
......
......@@ -10,7 +10,7 @@
ビヘイビアでコンポーネントの通常のコード実行をカスタマイズすることができます。
ビヘイビアの定義 <a name="defining-behaviors"></a>
ビヘイビアの定義 <span id="defining-behaviors"></span>
------------------
ビヘイビアを定義するには、 [[yii\base\Behavior]] あるいは子クラスを継承するクラスを作成します。たとえば:
......@@ -97,7 +97,7 @@ function ($event) {
}
```
ビヘイビアのアタッチ <a name="attaching-behaviors"></a>
ビヘイビアのアタッチ <span id="attaching-behaviors"></span>
-------------------
[[yii\base\Component|component]] へのビヘイビアのアタッチは、静的にも動的にも可能です。実際は、前者のほうがより一般的ですが。
......@@ -188,7 +188,7 @@ $component->attachBehaviors([
詳しくは [構成情報](concept-configurations.md#configuration-format) セクションを参照してください。
ビヘイビアの使用 <a name="using-behaviors"></a>
ビヘイビアの使用 <span id="using-behaviors"></span>
---------------
ビヘイビアを使用するには、まず上記の方法に従って [[yii\base\Component|コンポーネント]] にアタッチします。ビヘイビアがコンポーネントにアタッチされれば、その使用方法はシンプルです。
......@@ -228,7 +228,7 @@ $behaviors = $component->getBehaviors();
```
ビヘイビアのデタッチ <a name="detaching-behaviors"></a>
ビヘイビアのデタッチ <span id="detaching-behaviors"></span>
-------------------
ビヘイビアをデタッチするには、ビヘイビアに付けられた名前とともに [[yii\base\Component::detachBehavior()]] を呼び出します:
......@@ -244,7 +244,7 @@ $component->detachBehaviors();
```
`TimestampBehavior` の利用 <a name="using-timestamp-behavior"></a>
`TimestampBehavior` の利用 <span id="using-timestamp-behavior"></span>
-------------------------
しめくくりに、[[yii\behaviors\TimestampBehavior]] を見てみましょう。このビヘイビアは、
......@@ -300,7 +300,7 @@ echo $user->created_at; // 現在のタイムスタンプが表示される
$user->touch('login_time');
```
ビヘイビアとトレイトの比較 <a name="comparison-with-traits"></a>
ビヘイビアとトレイトの比較 <span id="comparison-with-traits"></span>
----------------------
ビヘイビアは、主となるクラスにそのプロパティやメソッドを「注入する」という点で [トレイト](http://www.php.net/traits)
......@@ -308,7 +308,7 @@ $user->touch('login_time');
それらは代替手段というよりも、むしろ相互補完関係のようなものです。
### ビヘイビアを使う理由 <a name="pros-for-behaviors"></a>
### ビヘイビアを使う理由 <span id="pros-for-behaviors"></span>
ビヘイビアは通常のクラスのように、継承をサポートしています。いっぽうトレイトは、
言語サポートされたコピー&ペーストとみなすことができます。トレイトは継承をサポートしません。
......@@ -324,7 +324,7 @@ $user->touch('login_time');
別のトレイトが起こした名前競合の場合、影響を受けるプロパティやメソッドの名前変更による、手動での解決が必要です。
### トレイトを使う理由 <a name="pros-for-traits"></a>
### トレイトを使う理由 <span id="pros-for-traits"></span>
ビヘイビアは時間もメモリも食うオブジェクトなので、トレイトはビヘイビアよりはるかに効率的です。
......
......@@ -30,7 +30,7 @@ Yii::configure($object, $config);
なお、この場合には、構成情報配列に `class` 要素を含んではいけません。
## 構成情報の形式 <a name="configuration-format"></a>
## 構成情報の形式 <span id="configuration-format"></span>
構成情報の形式は、フォーマルには次のように説明できます:
......@@ -72,14 +72,14 @@ Yii::configure($object, $config);
```
## 構成情報の使用 <a name="using-configurations"></a>
## 構成情報の使用 <span id="using-configurations"></span>
構成情報は Yii の多くの場所で使用されています。このセクションの冒頭では、 [[Yii::createObject()]]
を使って、構成情報に応じてオブジェクトを作成する方法を示しました。このサブセクションでは、
アプリケーションの構成とウィジェットの構成という、2つの主要な構成情報の用途を説明します。
### アプリケーションの構成 <a name="application-configurations"></a>
### アプリケーションの構成 <span id="application-configurations"></span>
[アプリケーション](structure-applications.md) の構成は、おそらく Yii の中で最も複雑な配列のひとつです。
それは [[yii\web\Application|application]] クラスが、設定可能なプロパティとイベントを数多く持つためです。
......@@ -129,7 +129,7 @@ $config = [
アプリケーションの `components` プロパティ構成の詳細については、 [アプリケーション](structure-applications.md) セクションと [サービスロケータ](concept-service-locator.md) セクションにあります。
### ウィジェットの構成 <a name="widget-configurations"></a>
### ウィジェットの構成 <span id="widget-configurations"></span>
[ウィジェット](structure-widgets.md) を使用するときは、多くの場合、ウィジェットのプロパティをカスタマイズするために、構成情報を使用する必要があります。
[[yii\base\Widget::widget()]] と [[yii\base\Widget::begin()]] の両メソッドを使って、ウィジェットを作成できます。それらは、以下のような構成情報配列を取ります。
......@@ -153,7 +153,7 @@ echo Menu::widget([
クラス名がすでに与えられているので、構成情報配列が `class` キーを持つべきではないことに注意してください。
## 構成情報ファイル <a name="configuration-files"></a>
## 構成情報ファイル <span id="configuration-files"></span>
構成情報がとても複雑になる場合、一般的な方法は、 *構成情報ファイル* と呼ばれる、ひとつまたは複数の PHP ファイルにそれを格納することです。
構成情報ファイルは、構成情報を表す PHP 配列を return します。
......@@ -205,7 +205,7 @@ $config = require('path/to/web.php');
```
## デフォルト設定 <a name="default-configurations"></a>
## デフォルト設定 <span id="default-configurations"></span>
[[Yii::createObject()]] メソッドは、 [依存性注入コンテナ](concept-di-container.md) をベースに実装されています。
そのため、指定されたクラスが [[Yii::createObject()]] を使用して作成されるとき、そのすべてのインスタンスに適用される、
......@@ -224,7 +224,7 @@ $config = require('path/to/web.php');
デフォルト設定を使用しなければ、あなたは、リンクページャーを使うすべての箇所で `maxButtonCount` を設定しなければなりません。
## 環境定数 <a name="environment-constants"></a>
## 環境定数 <span id="environment-constants"></span>
構成情報は、多くの場合、アプリケーションが実行される環境に応じて変化します。たとえば、
開発環境では `mydb_dev` という名前のデータベースを使用し、本番サーバー上では `mydb_prod` データベースを
......
......@@ -6,7 +6,7 @@
ここでは、主に Yii の提供する DI コンテナの使用方法を説明します。
依存性注入 <a name="dependency-injection"></a>
依存性注入 <span id="dependency-injection"></span>
--------------------
Yii は [[yii\di\Container]] クラスを通して DI コンテナの機能を提供します。これは、次の種類の依存性注入をサポートしています:
......@@ -16,7 +16,7 @@ Yii 縺ッ [[yii\di\Container]] 繧ッ繝ゥ繧ケ繧帝壹@縺ヲ DI 繧ウ繝ウ繝リ縺ョ讖溯繧呈
* PHP コーラブル·インジェクション
### コンストラクタ·インジェクション <a name="constructor-injection"></a>
### コンストラクタ·インジェクション <span id="constructor-injection"></span>
DI コンテナは、コンストラクタパラメータの型ヒントの助けを借りた、コンストラクタ·インジェクションをサポートしています。
型ヒントは、クラスやインタフェースが新しいオブジェクトの作成で使用されるさい、どれが依存であるのかということをコンテナに教えます。
......@@ -38,7 +38,7 @@ $foo = new Foo($bar);
```
### セッター/プロパティ·インジェクション <a name="setter-and-property-injection"></a>
### セッター/プロパティ·インジェクション <span id="setter-and-property-injection"></span>
セッター/プロパティ·インジェクションは、[構成情報](concept-configurations.md) を通してサポートされます。
依存関係を登録するときや、新しいオブジェクトを作成するとき、コンテナが使用する構成情報を提供することができ、
......@@ -71,7 +71,7 @@ $container->get('Foo', [], [
```
### PHP コーラブル・インジェクション <a name="php-callable-injection"></a>
### PHP コーラブル・インジェクション <span id="php-callable-injection"></span>
この場合、コンテナは、登録された PHP のコーラブルオブジェクトを使用し、クラスの新しいインスタンスを構築します。
コーラブルは、依存関係を解決し、新しく作成されたオブジェクトに適切にそれらを注入する責任があります。たとえば
......@@ -85,7 +85,7 @@ $foo = $container->get('Foo');
```
依存関係の登録 <a name="registering-dependencies"></a>
依存関係の登録 <span id="registering-dependencies"></span>
------------------------
あなたは、[[yii\di\Container::set()]] 使って依存関係を登録することができます。登録には依存関係の名前だけでなく、
......@@ -149,7 +149,7 @@ $container->setSingleton('yii\db\Connection', [
```
依存関係の解決 <a name="resolving-dependencies"></a>
依存関係の解決 <span id="resolving-dependencies"></span>
----------------------
依存関係を登録すると、新しいオブジェクトを作成するのに DI コンテナを使用することができ、
......@@ -239,7 +239,7 @@ $lister = new UserLister($finder);
```
実際の使いかた <a name="practical-usage"></a>
実際の使いかた <span id="practical-usage"></span>
---------------
あなたのアプリケーションの [エントリスクリプト](structure-entry-scripts.md)`Yii.php` ファイルをインクルードするとき、
......@@ -301,7 +301,7 @@ class HotelController extends Controller
のインスタンスが作成され、コントローラのコンストラクタに3番目のパラメータとして注入されるようになります。
依存関係を登録するときに <a name="when-to-register-dependencies"></a>
依存関係を登録するときに <span id="when-to-register-dependencies"></span>
-----------------------------
依存関係は、新しいオブジェクトが作成されるとき必要とされるので、それらの登録は可能な限り早期に行われるべきです。
......@@ -313,7 +313,7 @@ class HotelController extends Controller
依存関係を登録することができます。
まとめ <a name="summary"></a>
まとめ <span id="summary"></span>
-------
依存性注入と [サービスロケータ](concept-service-locator.md) はともに、疎結合でよりテストしやすい方法でのソフトウェア構築を可能にする、
......
......@@ -10,7 +10,7 @@ Yiiはイベントをサポートするために、 [[yii\base\Component]] と
[[yii\base\Component]] もしくはその子クラスを継承する必要があります。
イベントハンドラ <a name="event-handlers"></a>
イベントハンドラ <span id="event-handlers"></span>
--------------
イベントハンドラとは、関連するイベントがトリガされたときに実行される、 [PHP コールバック](http://www.php.net/manual/en/language.types.callable.php)
......@@ -36,7 +36,7 @@ function ($event) {
- [[yii\base\Event::data|カスタムデータ]]: イベントハンドラを接続するときに提供されたデータ (後述)
イベントハンドラのアタッチ <a name="attaching-event-handlers"></a>
イベントハンドラのアタッチ <span id="attaching-event-handlers"></span>
------------------------
イベントハンドラは [[yii\base\Component::on()]] を呼び出すことでアタッチできます。たとえば:
......@@ -98,7 +98,7 @@ $foo->on(Foo::EVENT_HELLO, function ($event) {
}, $data, false);
```
イベントのトリガー <a name="triggering-events"></a>
イベントのトリガー <span id="triggering-events"></span>
-----------------
イベントは、 [[yii\base\Component::trigger()]] メソッドを呼び出すことでトリガされます。このメソッドには **イベント名** が必須で、
......@@ -162,7 +162,7 @@ class Mailer extends Component
アタッチされたハンドラがすべて呼び出されます。
イベントハンドラのデタッチ <a name="detaching-event-handlers"></a>
イベントハンドラのデタッチ <span id="detaching-event-handlers"></span>
------------------------
イベントからハンドラを取り外すには、 [[yii\base\Component::off()]] メソッドを呼び出します。たとえば:
......@@ -191,7 +191,7 @@ $foo->off(Foo::EVENT_HELLO);
```
クラスレベル・イベントハンドラ <a name="class-level-event-handlers"></a>
クラスレベル・イベントハンドラ <span id="class-level-event-handlers"></span>
--------------------------
ここまでの項では、 *インスタンスレベル* でのイベントにハンドラをアタッチする方法を説明してきました。
......@@ -249,7 +249,7 @@ Event::off(Foo::className(), Foo::EVENT_HELLO);
```
グローバル・イベント <a name="global-events"></a>
グローバル・イベント <span id="global-events"></span>
-------------
Yiiは、実際に上記のイベントメカニズムに基づいたトリックである、いわゆる *グローバル・イベント* をサポートしています。
......
......@@ -19,7 +19,7 @@ Yii は下記の DBMS のサポートを内蔵しています。
- [MSSQL](https://www.microsoft.com/en-us/sqlserver/default.aspx): バージョン 2008 以上。
## DB 接続を作成する <a name="creating-db-connections"></a>
## DB 接続を作成する <span id="creating-db-connections"></span>
データベースにアクセスするために、まずは、データベースに接続するために [[yii\db\Connection]] のインスタンスを作成する必要があります。
......@@ -88,7 +88,7 @@ ODBC 経由でデータベースに接続しようとする場合は、[[yii\db\
> Info|情報: DB 接続のインスタンスを作成するとき、実際のデータベース接続は、最初の SQL を実行するか、[[yii\db\Connection::open()|open()]] メソッドを明示的に呼ぶかするまでは確立されません。
## SQL クエリを実行する <a name="executing-sql-queries"></a>
## SQL クエリを実行する <span id="executing-sql-queries"></span>
いったんデータベース接続のインスタンスを得てしまえば、次の手順に従って SQL クエリを実行することが出来ます。
......@@ -146,7 +146,7 @@ return [
```
### パラメータをバインドする <a name="binding-parameters"></a>
### パラメータをバインドする <span id="binding-parameters"></span>
パラメータを持つ SQL から DB コマンドを作成するときは、SQL インジェクション攻撃を防止するために、ほとんど全ての場合においてパラメータをバインドする手法を用いるべきです。
例えば、
......@@ -207,7 +207,7 @@ $post2 = $command->queryOne();
このやり方でクエリを実行すると、パラメータの値が違うごとに新しいクエリを実行するのに比べて、はるかに効率が良くすることが出来ます。
### SELECT しないクエリを実行する <a name="non-select-queries"></a>
### SELECT しないクエリを実行する <span id="non-select-queries"></span>
今までのセクションで紹介した `queryXyz()` メソッドは、すべて、データベースからデータを取得する SELECT クエリを扱うものでした。
データを返さないクエリのためには、代りに [[yii\db\Command::execute()]] メソッドを呼ばなければなりません。
......@@ -250,7 +250,7 @@ $db->createCommand()->batchInsert('user', ['name', 'age'], [
])->execute();
```
## テーブルとカラムの名前を引用符で囲む <a name="quoting-table-and-column-names"></a>
## テーブルとカラムの名前を引用符で囲む <span id="quoting-table-and-column-names"></span>
特定のデータベースに依存しないコードを書くときには、テーブルとカラムの名前を適切に引用符で囲むことが、たいてい、頭痛の種になります。
データベースによって名前を引用符で囲む規則がさまざまに異なるからです。
......@@ -268,7 +268,7 @@ $count = $db->createCommand("SELECT COUNT([[id]]) FROM {{employee}}")
->queryScalar();
```
### テーブルプレフィックスを使う <a name="using-table-prefix"></a>
### テーブルプレフィックスを使う <span id="using-table-prefix"></span>
あなたの DB テーブルのほとんどが何か共通のプレフィックスを持っている場合は、Yii DAO によってサポートされているテーブルプレフィックスの機能を使うことが出来ます。
......@@ -297,7 +297,7 @@ $count = $db->createCommand("SELECT COUNT([[id]]) FROM {{%employee}}")
->queryScalar();
```
## トランザクションを実行する <a name="performing-transactions"></a>
## トランザクションを実行する <span id="performing-transactions"></span>
一続きになった複数の関連するクエリを実行するときは、データの整合性を一貫性を保証するために、一連のクエリをトランザクションで囲む必要がある場合があります。
一連のクエリのどの一つが失敗した場合でも、データベースは、何一つクエリが実行されなかったかのような状態へとロールバックされます。
......@@ -339,7 +339,7 @@ try {
そうでなければ、例外がトリガされてキャッチされ、[[yii\db\Transaction::rollBack()|rollBack()]] が呼ばれて、失敗したクエリに先行するクエリがトランザクションの中で行った変更がロールバックされます。
### 分離レベルを指定する <a name="specifying-isolation-levels"></a>
### 分離レベルを指定する <span id="specifying-isolation-levels"></span>
Yii は、トランザクションの [分離レベル] の設定もサポートしています。
デフォルトでは、新しいトランザクションを開始したときは、データベースシステムによって設定された分離レベルを使用します。
......@@ -380,7 +380,7 @@ DBMS によっては、接続全体に対してのみ分離レベルの設定を
[分離レベル]: http://ja.wikipedia.org/wiki/%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B6%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E5%88%86%E9%9B%A2%E3%83%AC%E3%83%99%E3%83%AB
### トランザクションを入れ子にする <a name="nesting-transactions"></a>
### トランザクションを入れ子にする <span id="nesting-transactions"></span>
あなたの DBMS が Savepoint をサポートしている場合は、次のように、複数のトランザクションを入れ子にすることが出来ます。
......@@ -416,7 +416,7 @@ try {
```
## レプリケーションと読み書きの分離 <a name="read-write-splitting"></a>
## レプリケーションと読み書きの分離 <span id="read-write-splitting"></span>
多くの DBMS は、データベースの可用性とサーバのレスポンスタイムを向上させるために、[データベースレプリケーション](http://ja.wikipedia.org/wiki/%E3%83%AC%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3#.E3.83.87.E3.83.BC.E3.82.BF.E3.83.99.E3.83.BC.E3.82.B9) をサポートしています。
データベースレプリケーションによって、データはいわゆる *マスタサーバ* から *スレーブサーバ* に複製されます。
......@@ -567,7 +567,7 @@ $rows = $db->useMaster(function ($db) {
直接に `$db->enableSlaves` を false に設定して、全てのクエリをマスタ接続に向けることも出来ます。
## データベーススキーマを扱う <a name="database-schema"></a>
## データベーススキーマを扱う <span id="database-schema"></span>
Yii DAO は、新しいテーブルを作ったり、テーブルからカラムを削除したりなど、データベーススキーマを操作することを可能にする一揃いのメソッドを提供しています。
以下がそのソッドのリストです。
......
......@@ -4,7 +4,7 @@ ArrayHelper
[PHP の充実した配列関数](http://php.net/manual/ja/book.array.php) への追加として、Yii の配列ヘルパは、配列をさらに効率的に扱うことを可能にするスタティックなメソッドを提供しています。
## 値を取得する <a name="getting-values"></a>
## 値を取得する <span id="getting-values"></span>
配列、オブジェクト、またはその両方から成る複雑な構造から値を取得することは、標準的な PHP を使う場合、何度も繰り返さねばならない面倒くさい仕事です。
最初に `isset` でキーの存在をチェックしなければならず、次に、キーが存在していれば値を取得し、存在していなければ、デフォルト値を提供しなければなりません。
......@@ -63,7 +63,7 @@ $type = ArrayHelper::remove($array, 'type');
`getValue` メソッドとは違って、`remove` は単純なキー名だけをサポートすることに注意してください。
## キーの存在をチェックする <a name="checking-existence-of-keys"></a>
## キーの存在をチェックする <span id="checking-existence-of-keys"></span>
`ArrayHelper::keyExists` は、大文字と小文字を区別しないキーの比較をサポートすることを除いて、[array_key_exists](http://php.net/manual/ja/function.array-key-exists.php) と同じ動作をします。
例えば、
......@@ -82,7 +82,7 @@ if (!ArrayHelper::keyExists('username', $data1, false) || !ArrayHelper::keyExist
}
```
## カラムを取得する <a name="retrieving-columns"></a>
## カラムを取得する <span id="retrieving-columns"></span>
データ行またはオブジェクトの配列から、あるカラムの値を取得する必要があることがよくあります。
良くある例は、ID のリストの取得です。
......@@ -106,7 +106,7 @@ $result = ArrayHelper::getColumn($array, function ($element) {
```
## 配列を再インデックスする <a name="reindexing-arrays"></a>
## 配列を再インデックスする <span id="reindexing-arrays"></span>
指定されたキーに従って配列にインデックスを付けるために、`index` メソッドを使うことが出来ます。
入力値の配列は、多次元配列であるか、オブジェクトの配列でなければなりません。
......@@ -134,7 +134,7 @@ $result = ArrayHelper::index($array, function ($element) {
```
## マップを作成する <a name="building-maps"></a>
## マップを作成する <span id="building-maps"></span>
多次元配列またはオブジェクトの配列からマップ (キー-値 のペア) を作成するためには `map` メソッドを使うことが出来ます。
`$from``$to` のパラメータで、マップを構成するキー名またはプロパティ名を指定します。
......@@ -170,7 +170,7 @@ $result = ArrayHelper::map($array, 'id', 'name', 'class');
```
## 多次元配列の並べ替え <a name="multidimensional-sorting"></a>
## 多次元配列の並べ替え <span id="multidimensional-sorting"></span>
`multisort` メソッドは、オブジェクトの配列または入れ子にされた配列を、一つまたは複数のキーによって並べ替えることを手助けします。
例えば、
......@@ -210,7 +210,7 @@ ArrayHelper::multisort($data, function($item) {
最後の引数は並べ替えのフラグで、PHP の [sort()](http://php.net/manual/ja/function.sort.php) 関数に渡されるのと同じ値を取ることが出来ます。
## 配列の型を検出する <a name="detecting-array-types"></a>
## 配列の型を検出する <span id="detecting-array-types"></span>
配列が添字配列であるか連想配列であるかを知ることが出来ると便利です。例を挙げましょう。
......@@ -225,7 +225,7 @@ echo ArrayHelper::isAssociative($associative);
```
## 値を HTML エンコード / デコードする <a name="html-encoding-values"></a>
## 値を HTML エンコード / デコードする <span id="html-encoding-values"></span>
文字列の配列の中にある特殊文字を HTML エンティティ にエンコード、または、HTML エンティティからデコードするために、下記の関数を使うことが出来ます。
......@@ -239,7 +239,7 @@ $decoded = ArrayHelper::htmlDecode($data);
エンコードにはアプリケーションの文字セットが使用されますが、三番目の引数によってそれを変更することも出来ます。
## 配列をマージする <a name="merging-arrays"></a>
## 配列をマージする <span id="merging-arrays"></span>
```php
/**
......@@ -256,7 +256,7 @@ $decoded = ArrayHelper::htmlDecode($data);
```
## オブジェクトを配列に変換する <a name="converting-objects-to-arrays"></a>
## オブジェクトを配列に変換する <span id="converting-objects-to-arrays"></span>
オブジェクトまたはオブジェクトの配列を配列に変換する必要があることがよくあります。
最もよくあるのは、REST API によってデータ配列を提供するなどの目的で、アクティブレコードモデルを変換する場合です。
......
......@@ -10,13 +10,13 @@ Yii 縺ッ縺昴繧医≧縺ェ謇句勧縺代r Html 繝倥Ν繝代蠖「蠑上〒謠蝉セ帙@縺セ縺吶
> 何でもかんでも Html ヘルパの呼び出しでラップする必要はありません。
## 基礎 <a name="basics"></a>
## 基礎 <span id="basics"></span>
動的な HTML を文字列の連結によって構築していると、あっという間に乱雑なコードになります。
そのため、Yii はタグのオプションを操作し、それらのオプションに基づいてタグを構築する一連のメソッドを提供します。
### タグを生成する <a name="generating-tags"></a>
### タグを生成する <span id="generating-tags"></span>
タグを生成するコードは次のようなものです。
......@@ -52,7 +52,7 @@ Yii 縺ッ縺昴繧医≧縺ェ謇句勧縺代r Html 繝倥Ν繝代蠖「蠑上〒謠蝉セ帙@縺セ縺吶
すなわち、`'data' => ['params' => ['id' => 1, 'name' => 'yii'], 'status' => 'ok']``data-params='{"id":1,"name":"yii"}' data-status="ok"` となります。
### CSS のクラスとスタイルを形成する <a name="forming-css"></a>
### CSS のクラスとスタイルを形成する <span id="forming-css"></span>
HTML タグのオプションを構築する場合、たいていは、デフォルトの値から始めて必要な修正をする、という方法をとります。
CSS クラスを追加または削除するために、次のコードを使用することが出来ます。
......@@ -89,7 +89,7 @@ Html::removeCssStyle($options, ['width', 'height']);
プロパティが一つだけである場合は、文字列で指定することも出来ます。
### コンテントをエンコードおよびデコードする <a name="encoding-and-decoding-content"></a>
### コンテントをエンコードおよびデコードする <span id="encoding-and-decoding-content"></span>
コンテントが適切かつ安全に HTML として表示されるためには、コンテント内の特殊文字がエンコードされなければなりません。
特殊文字のエンコードとデコードは、PHP では [htmlspecialchars](http://www.php.net/manual/ja/function.htmlspecialchars.php)[htmlspecialchars_decode](http://www.php.net/manual/ja/function.htmlspecialchars-decode.php) によって行われます。
......@@ -104,7 +104,7 @@ $decodedUserName = Html::decode($userName);
```
## フォーム <a name="forms"></a>
## フォーム <span id="forms"></span>
フォームのマークアップを扱う仕事は、極めて面倒くさく、エラーを生じがちなものです。
このため、フォームのマークアップの仕事を助けるための一群のメソッドがあります。
......@@ -112,7 +112,7 @@ $decodedUserName = Html::decode($userName);
> Note|注意: モデルを扱っており、バリデーションが必要である場合は、[[yii\widgets\ActiveForm|ActiveForm]] を使うことを検討してください。
### フォームを作成する <a name="creating-forms"></a>
### フォームを作成する <span id="creating-forms"></span>
フォームを開始するためには、次のように [[yii\helpers\Html::beginForm()|beginForm()]] メソッドを使うことが出来ます。
......@@ -134,7 +134,7 @@ $decodedUserName = Html::decode($userName);
```
### ボタン <a name="buttons"></a>
### ボタン <span id="buttons"></span>
ボタンを生成するためには、次のコードを使うことが出来ます。
......@@ -148,7 +148,7 @@ $decodedUserName = Html::decode($userName);
タイトルはエンコードされませんので、エンドユーザからデータを取得する場合は [[yii\helpers\Html::encode()|Html::encode()]] を使ってエンコードしてください。
### インプットフィールド <a name="input-fields"></a>
### インプットフィールド <span id="input-fields"></span>
インプットのメソッドには二つのグループがあります。
一つは `active` から始まるものでアクティブインプットと呼ばれます。もう一方は `active` から始まらないものです。
......@@ -213,7 +213,7 @@ $decodedUserName = Html::decode($userName);
```
### ラベルとエラー <a name="labels-and-errors"></a>
### ラベルとエラー <span id="labels-and-errors"></span>
インプットと同じように、ラベルを生成するメソッドが二つあります。
モデルからデータを取るアクティブなラベルと、データを直接受け入れるアクティブでないラベルです。
......@@ -236,7 +236,7 @@ $decodedUserName = Html::decode($userName);
```
### インプットの名前と値 <a name="input-names-and-values"></a>
### インプットの名前と値 <span id="input-names-and-values"></span>
モデルに基づいてインプットフィールドの名前、ID、値を取得するメソッドがあります。
これらは主として内部的に使用されるものですが、場合によっては重宝します。
......@@ -271,7 +271,7 @@ echo Html::getAttributeName('dates[0]');
```
## スタイルとスクリプト <a name="styles-and-scripts"></a>
## スタイルとスクリプト <span id="styles-and-scripts"></span>
埋め込みのスタイルとスクリプトをラップするタグを生成するメソッドが二つあります。
......@@ -321,7 +321,7 @@ CSS 縺ィ蜷後§繧医≧縺ォ縲∵怙蛻昴蠑墓焚縺ッ繧、繝ウ繧ッ繝ォ繝シ繝峨&繧後k繝輔ぃ繧、
オプションに置いて、`cssFile` のオプションと同じように、`condition` を指定することが出来ます。
## ハイパーリンク <a name="hyperlinks"></a>
## ハイパーリンク <span id="hyperlinks"></span>
ハイパーリンクを手軽に生成できるメソッドがあります。
......@@ -342,7 +342,7 @@ CSS 縺ィ蜷後§繧医≧縺ォ縲∵怙蛻昴蠑墓焚縺ッ繧、繝ウ繧ッ繝ォ繝シ繝峨&繧後k繝輔ぃ繧、
```
## 画像 <a name="images"></a>
## 画像 <span id="images"></span>
イメージタグを生成するためには次のようにします。
......@@ -358,7 +358,7 @@ CSS 縺ィ蜷後§繧医≧縺ォ縲∵怙蛻昴蠑墓焚縺ッ繧、繝ウ繧ッ繝ォ繝シ繝峨&繧後k繝輔ぃ繧、
[Url::to()](helper-url.md) と同様です。
## リスト <a name="lists"></a>
## リスト <span id="lists"></span>
順序なしリストは、次のようにして生成することが出来ます。
......
......@@ -40,7 +40,7 @@ echo Html::encode('Test > test');
- VarDumper
ヘルパクラスをカスタマイズする <a name="customizing-helper-classes"></a>
ヘルパクラスをカスタマイズする <span id="customizing-helper-classes"></span>
------------------------------
コアヘルパクラス (例えば [[yii\helpers\ArrayHelper]]) をカスタマイズするためには、そのヘルパに対応する基底クラス (例えば [[yii\helpers\BaseArrayHelper]]) を拡張するクラスを作成して、名前空間も含めて、対応する具象クラス (例えば [[yii\helpers\ArrayHelper]]) と同じ名前を付けます。
......
......@@ -4,7 +4,7 @@ Url ヘルパ
Url ヘルパは URL を管理するための一連のスタティックメソッドを提供します。
## よく使う URL を取得する <a name="getting-common-urls"></a>
## よく使う URL を取得する <span id="getting-common-urls"></span>
よく使う URL を取得するために使うことが出来るメソッドが二つあります。
すなわち、ホーム URL と、現在のリクエストのベース URL を取得するメソッドです。
......@@ -31,7 +31,7 @@ $httpsAbsoluteBaseUrl = Url::base('https');
このメソッドの唯一のパラメータは、`Url::home()` の場合と全く同じ動作をします。
## URL を生成する <a name="creating-urls"></a>
## URL を生成する <span id="creating-urls"></span>
与えられたルートへの URL を生成するためには、`Url::toRoute()` メソッドを使います。
このメソッドは、[[\yii\web\UrlManager]] を使って URL を生成します。
......@@ -150,7 +150,7 @@ echo Url::current(['id' => 100]);
```
## URL を記憶する <a name="remember-urls"></a>
## URL を記憶する <span id="remember-urls"></span>
URL を記憶して、後に続く一連のリクエストの一つを処理するときに、記憶した URL を使わなければならないという場合があります。
これは、次のようにして達成することが出来ます。
......@@ -173,7 +173,7 @@ $url = Url::previous();
$productUrl = Url::previous('product');
```
## 相対 URL かどうかチェックする <a name="checking-relative-urls"></a>
## 相対 URL かどうかチェックする <span id="checking-relative-urls"></span>
URL が相対 URL であること、すなわち、URL がホスト情報の部分を持っていないことを確かめるために、次のコードを使うことが出来ます。
......
......@@ -22,7 +22,7 @@ if ($model->validate()) {
}
```
## 規則を宣言する <a name="declaring-rules"></a>
## 規則を宣言する <span id="declaring-rules"></span>
`validate()` を現実に動作させるためには、検証する予定の属性に対してバリデーション規則を宣言しなければなりません。
規則は [[yii\base\Model::rules()]] メソッドをオーバーライドすることで宣言します。
......@@ -89,7 +89,7 @@ public function rules()
属性は、上記のバリデーションのステップに従って、`scenarios()` でアクティブな属性であると宣言されており、かつ、`rules()` で宣言された一つまたは複数のアクティブな規則と関連付けられている場合に、また、その場合に限って、検証されます。
### エラーメッセージをカスタマイズする <a name="customizing-error-messages"></a>
### エラーメッセージをカスタマイズする <span id="customizing-error-messages"></span>
たいていのバリデータはデフォルトのエラーメッセージを持っていて、属性のバリデーションが失敗した場合にそれを検証の対象であるモデルに追加します。
例えば、[[yii\validators\RequiredValidator|required]] バリデータは、このバリデータを使って `username` 属性を検証したとき、規則に合致しない場合は「ユーザ名は空ではいけません。」というエラーメッセージをモデルに追加します。
......@@ -110,7 +110,7 @@ public function rules()
これらのエラーメッセージも、バリデータの他のプロパティと同様、バリデーション規則の中で構成することが出来ます。
### バリデーションのイベント <a name="validation-events"></a>
### バリデーションのイベント <span id="validation-events"></span>
[[yii\base\Model::validate()]] は、呼び出されると、バリデーションプロセスをカスタマイズするためにオーバーライドできる二つのメソッドを呼び出します。
......@@ -121,7 +121,7 @@ public function rules()
このメソッドをオーバーライドするか、または、イベントに反応して、バリデーションが完了した後に、何らかの後処理をすることが出来ます。
### 条件付きバリデーション <a name="conditional-validation"></a>
### 条件付きバリデーション <span id="conditional-validation"></span>
特定の条件が満たされる場合に限って属性を検証したい場合、例えば、ある属性のバリデーションが他の属性の値に依存する場合には、[[yii\validators\Validator::when|when]] プロパティを使って、そのような条件を定義することが出来ます。
例えば、
......@@ -160,7 +160,7 @@ function ($model, $attribute)
```
### データのフィルタリング <a name="data-filtering"></a>
### データのフィルタリング <span id="data-filtering"></span>
ユーザ入力をフィルタまたは前処理する必要があることがよくあります。
例えば、`username` の入力値の前後にある空白を除去したいというような場合です。
......@@ -179,7 +179,7 @@ function ($model, $attribute)
お分かりかと思いますが、これらのバリデーション規則は実際には入力を検証しません。そうではなくて、検証される属性の値を処理して書き戻すのです。
### 空の入力値を扱う <a name="handling-empty-inputs"></a>
### 空の入力値を扱う <span id="handling-empty-inputs"></span>
HTML フォームから入力データが送信されたとき、入力値が空である場合には何らかのデフォルト値を割り当てなければならないことがよくあります。
[default](tutorial-core-validators.md#default) バリデータを使ってそうすることが出来ます。
......@@ -212,7 +212,7 @@ HTML フォームから入力データが送信されたとき、入力値が空
[コアバリデータ](tutorial-core-validators.md) の中では、`captcha``default``filter``required`、そして `trim` だけが空の入力値を処理します。
## アドホックなバリデーション <a name="ad-hoc-validation"></a>
## アドホックなバリデーション <span id="ad-hoc-validation"></span>
時として、何らかのモデルに結び付けられていない値に対する *アドホックなバリデーション* を実行しなければならない場合があります。
......@@ -275,13 +275,13 @@ public function actionSearch($name, $email)
また、このモデルのインスタンスによって定義された動的な属性に対しても、例えば `$model->name``$model->email` のようにして、アクセスすることが出来ます。
## バリデータを作成する <a name="creating-validators"></a>
## バリデータを作成する <span id="creating-validators"></span>
Yii のリリースに含まれている [コアバリデータ](tutorial-core-validators.md) を使う以外に、あなた自身のバリデータを作成することも出来ます。
インラインバリデータとスタンドアロンバリデータを作ることが出来ます。
### インラインバリデータ <a name="inline-validators"></a>
### インラインバリデータ <span id="inline-validators"></span>
インラインバリデータは、モデルのメソッドまたは無名関数として定義されるバリデータです。
メソッド/関数 のシグニチャは、
......@@ -341,7 +341,7 @@ class MyForm extends Model
> ```
### スタンドアロンバリデータ <a name="standalone-validators"></a>
### スタンドアロンバリデータ <span id="standalone-validators"></span>
スタンドアロンバリデータは、[[yii\validators\Validator]] またはその子クラスを拡張するクラスです。
[[yii\validators\Validator::validateAttribute()]] メソッドをオーバーライドすることによって、その検証ロジックを実装することが出来ます。
......@@ -370,7 +370,7 @@ class CountryValidator extends Validator
と言うのは、前の二つは、デフォルトでは、`validateValue()` を呼び出すことによって実装されているからです。
## クライアント側でのバリデーション <a name="client-side-validation"></a>
## クライアント側でのバリデーション <span id="client-side-validation"></span>
エンドユーザが HTML フォームで値を入力する際には、JavaScript に基づくクライアント側でのバリデーションを提供することが望まれます。
というのは、クライアント側でのバリデーションは、ユーザが入力のエラーを早く見つけることが出来るようにすることによって、より良いユーザ体験を提供するものだからです。
......@@ -382,7 +382,7 @@ class CountryValidator extends Validator
この理由により、これまでの項で説明したように、常に [[yii\base\Model::validate()]] を呼び出してサーバ側でのバリデーションを実行しなければなりません。
### クライアント側でのバリデーションを使う <a name="using-client-side-validation"></a>
### クライアント側でのバリデーションを使う <span id="using-client-side-validation"></span>
多くの [コアバリデータ](tutorial-core-validators.md) は、そのままで、クライアント側でのバリデーションをサポートしています。
あなたがする必要があるのは、[[yii\widgets\ActiveForm]] を使って HTML フォームを作るということだけです。
......@@ -441,7 +441,7 @@ class LoginForm extends Model
また、個々の入力フィールドごとにクライアント側のバリデーションを無効にしたい場合は、入力フィールドの [[yii\widgets\ActiveField::enableClientValidation]] プロパティを false に設定することも出来ます。
### クライアント側バリデーションを実装する <a name="implementing-client-side-validation"></a>
### クライアント側バリデーションを実装する <span id="implementing-client-side-validation"></span>
クライアント側バリデーションをサポートするバリデータを作成するためには、クライアント側でのバリデーションを実行する JavaScript コードを返す [[yii\validators\Validator::clientValidateAttribute()]] メソッドを実装しなければなりません。
その JavaScript の中では、次の事前定義された変数を使用することが出来ます。
......@@ -499,7 +499,7 @@ JS;
> ]
> ```
### Deferred バリデーション <a name="deferred-validation"></a>
### Deferred バリデーション <span id="deferred-validation"></span>
非同期のクライアント側バリデーションをサポートする必要がある場合は、[Defered オブジェクト](http://api.jquery.com/category/deferred-object/) を作成することが出来ます。
例えば、AJAX によるカスタムバリデーションを実行するために、次のコードを使うことが出来ます。
......@@ -575,7 +575,7 @@ JS;
```
### AJAX バリデーション <a name="ajax-validation"></a>
### AJAX バリデーション <span id="ajax-validation"></span>
場合によっては、サーバだけが必要な情報を持っているために、サーバ側でしか検証が実行できないことがあります。
例えば、ユーザ名がユニークであるか否かを検証するためには、サーバ側で user テーブルを調べることが必要になります。
......
......@@ -188,7 +188,7 @@ Yii によって提供されるカラムクラスを以下で見ていきます
- `filterOptions`
- `contentOptions`
#### データカラム <a name="data-column"></a>
#### データカラム <span id="data-column"></span>
データカラムは、データの表示と並べ替えに使用されます。
これがデフォルトのカラムタイプですので、これを使用するときはクラスの指定を省略することが出来ます。
......
......@@ -59,7 +59,7 @@ echo Yii::$app->formatter->asDate('2014-01-01'); // 出力: 2014/01/01
> 64-bit のシステムでは、インストールされていれば、全ての場合に intl フォーマッタが使用されます。
フォーマッタを構成する <a name="configuring-format"></a>
フォーマッタを構成する <span id="configuring-format"></span>
----------------------
フォーマットメソッドによって使われるデフォルトの書式は、[[yii\i18n\Formatter|フォーマッタクラス]] のプロパティを使って調整することが出来ます。
......@@ -78,7 +78,7 @@ echo Yii::$app->formatter->asDate('2014-01-01'); // 出力: 2014/01/01
],
```
日時の値をフォーマットする <a name="date-and-time"></a>
日時の値をフォーマットする <span id="date-and-time"></span>
--------------------------
フォーマッタクラスは日時の値をフォーマットするさまざまなメソッドを提供しています。すなわち、
......@@ -118,7 +118,7 @@ echo Yii::$app->formatter->asDate('now', 'yyyy-MM-dd'); // 2014-10-06
echo Yii::$app->formatter->asDate('now', 'php:Y-m-d'); // 2014-10-06
```
### タイムゾーン <a name="time-zones"></a>
### タイムゾーン <span id="time-zones"></span>
日時の値をフォーマットするときに、Yii はその値を [[yii\i18n\Formatter::timeZone|設定されたタイムゾーン]] に変換します。
従って、入力値は、タイムゾーンが明示的に指定されていなければ、UTC であると見なされます。
......@@ -140,7 +140,7 @@ echo Yii::$app->formatter->asTime('2014-10-06 21:41:00 JST'); // 21:41:00
> [PHP 環境を国際化のために設定する](tutorial-i18n.md#setup-environment) も参照してください。
数値をフォーマットする <a name="numbers"></a>
数値をフォーマットする <span id="numbers"></span>
----------------------
数値をフォーマットするために、フォーマッタクラスは次のメソッドを提供しています。
......@@ -166,7 +166,7 @@ echo Yii::$app->formatter->asTime('2014-10-06 21:41:00 JST'); // 21:41:00
]
```
その他のフォーマッタ <a name="other"></a>
その他のフォーマッタ <span id="other"></span>
--------------------
日付、時刻、そして、数値の他にも、Yii はさまざまな状況で使える一連のフォーマッタを提供しています。
......@@ -185,7 +185,7 @@ echo Yii::$app->formatter->asTime('2014-10-06 21:41:00 JST'); // 21:41:00
デフォルトでは、`true``Yes``false``No` とレンダリングされ、現在のアプリケーションの言語に翻訳されます。
この振る舞いは [[yii\i18n\Formatter::booleanFormat]] プロパティを構成して調整できます。
`null` 値 <a name="null-values"></a>
`null` 値 <span id="null-values"></span>
---------
PHP において `null` である値に対して、フォーマッタクラスは空文字ではなくプレースホルダを表示します。
......
......@@ -105,7 +105,7 @@ class User extends ActiveRecord implements IdentityInterface
認証が失敗したときは、HTTP ステータス 401 およびその他の適切なヘッダ (HTTP Basic 認証に対する `WWW-Authenticate` ヘッダなど) を持つレスポンスが送り返されます。
## 権限付与 <a name="authorization"></a>
## 権限付与 <span id="authorization"></span>
ユーザが認証された後、リクエストされたリソースに対してリクエストされたアクションを実行する許可を彼または彼女が持っているかどうかをチェックしたい場合があるでしょう。
*権限付与* と呼ばれるこのプロセスについては、[権限付与](security-authorization.md) のセクションで詳細に説明されています。
......
......@@ -23,7 +23,7 @@ Yii 縺ッ縲ヽESTful 繧「繧ッ繧キ繝ァ繝ウ繧剃ス懈縺吶k莉穂コ九r邁。蜊倥↓縺吶k縺溘a縺
* リクエストされたアクションとリソースに関するユーザへの権限付与
## コントローラクラスを作成する <a name="creating-controller"></a>
## コントローラクラスを作成する <span id="creating-controller"></span>
新しいコントローラクラスを作成する場合、コントローラクラスの命名規約は、リソースの型の名前を単数形で使う、というものです。
例えば、ユーザの情報を提供するコントローラは `UserController` と名付けることが出来ます。
......@@ -41,7 +41,7 @@ public function actionView($id)
```
## フィルタ <a name="filters"></a>
## フィルタ <span id="filters"></span>
[[yii\rest\Controller]] によって提供される RESTful API 機能のほとんどは [フィルタ](structure-filters.md) の形で実装されています。
具体的に言うと、次のフィルタがリストされた順に従って実行されます。
......@@ -72,13 +72,13 @@ public function behaviors()
```
## `ActiveController` を拡張する <a name="extending-active-controller"></a>
## `ActiveController` を拡張する <span id="extending-active-controller"></span>
コントローラを [[yii\rest\ActiveController]] から拡張する場合は、このコントローラを通じて提供しようとしているリソースクラスの名前を [[yii\rest\ActiveController::modelClass||modelClass]] プロパティにセットしなければなりません。
リソースクラスは [[yii\db\ActiveRecord]] から拡張しなければなりません。
### アクションをカスタマイズする <a name="customizing-actions"></a>
### アクションをカスタマイズする <span id="customizing-actions"></span>
デフォルトでは、[[yii\rest\ActiveController]] は次のアクションを提供します。
......@@ -116,7 +116,7 @@ public function prepareDataProvider()
どういう構成オプションが利用できるかを学ぶためには、個々のアクションクラスのリファレンスを参照してください。
### アクセスチェックを実行する <a name="performing-access-check"></a>
### アクセスチェックを実行する <span id="performing-access-check"></span>
RESTful API によってリソースを公開するときには、たいてい、現在のユーザがリクエストしているリソースにアクセスしたり操作したりする許可を持っているか否かをチェックする必要があります。
これは、[[yii\rest\ActiveController]] を使う場合は、[[yii\rest\ActiveController::checkAccess()|checkAccess()]] メソッドを次のようにオーバーライドすることによって出来ます。
......
......@@ -41,7 +41,7 @@ Content-Type: application/json; charset=UTF-8
* `500`: 内部的サーバエラー。これは内部的なプログラムエラーによって生じ得ます。
## エラーレスポンスをカスタマイズする <a name="customizing-error-response"></a>
## エラーレスポンスをカスタマイズする <span id="customizing-error-response"></span>
場合によっては、デフォルトのエラーレスポンス形式をカスタマイズしたいことがあるでしょう。
例えば、さまざまな HTTP ステータスを使ってさまざまなエラーを示すという方法によるのではなく、次に示すように、HTTP ステータスとしては常に 200 を使い、実際の HTTP ステータスコードはレスポンスの JSON 構造の一部として包み込む、という方式です。
......
......@@ -22,7 +22,7 @@ Yii は、RESTful ウェブサービス API を実装する仕事を簡単にす
ユーザのデータは `user` という DB テーブルに保存されており、それにアクセスするための [[yii\db\ActiveRecord|ActiveRecord]] クラス `app\models\User` が既に作成済みであるとします。
## コントローラを作成する <a name="creating-controller"></a>
## コントローラを作成する <span id="creating-controller"></span>
最初に、コントローラクラス `app\controllers\UserController` を次のようにして作成します。
......@@ -41,7 +41,7 @@ class UserController extends ActiveController
[[yii\rest\ActiveController::modelClass|modelClass]] を `app\models\User` と指定することによって、データの取得と操作にどのモデルが使用できるかをコントローラに教えてやります。
## URL 規則を構成する <a name="configuring-url-rules"></a>
## URL 規則を構成する <span id="configuring-url-rules"></span>
次に、アプリケーションの構成情報において、`urlManager` コンポーネントに関する構成情報を修正します。
......@@ -59,7 +59,7 @@ class UserController extends ActiveController
上記の構成情報は、主として、`user` コントローラの URL 規則を追加して、ユーザのデータが綺麗な URL と意味のある HTTP 動詞によってアクセスおよび操作できるようにするものです。
## JSON の入力を可能にする <a name="enabling-json-input"></a>
## JSON の入力を可能にする <span id="enabling-json-input"></span>
API が JSON 形式で入力データを受け取ることが出来るように、`request` アプリケーションコンポーネントの [[yii\web\Request::$parsers|parsers]] プロパティを構成して、JSON 入力のために [[yii\web\JsonParser]] を使うようにします。
......@@ -75,7 +75,7 @@ API が JSON 形式で入力データを受け取ることが出来るように
上記のように構成しない場合は、API は `application/x-www-form-urlencoded``multipart/form-data` だけを入力形式として認識します。
## 試してみる <a name="trying-it-out"></a>
## 試してみる <span id="trying-it-out"></span>
上記で示した最小限の労力によって、ユーザのデータにアクセスする RESTful API を作成する仕事は既に完成しています。
作成した API は次のものを含みます。
......@@ -185,7 +185,7 @@ Content-Type: application/json; charset=UTF-8
> [レスポンス形式の設定](rest-response-formatting.md) の節で説明されているように、これらのフィールドを除外することは出来ますし、また、除外しなければなりません。
## まとめ <a name="summary"></a>
## まとめ <span id="summary"></span>
Yii の RESTful API フレームワークを使う場合は、API エンドポイントをコントローラアクションの形式で実装します。
そして、コントローラを使って、単一タイプのリソースに対するエンドポイントを実装するアクションを組織化します。
......
......@@ -17,7 +17,7 @@ MVC の枠組の中では、リソースは [models](structure-models.md) とし
リソースクラスが [[yii\base\Model]] から拡張しない場合は、全てのパブリックなメンバ変数が返されます。
## フィールド <a name="fields"></a>
## フィールド <span id="fields"></span>
RESTful API のレスポンスにリソースを含めるとき、リソースは文字列にシリアライズされる必要があります。
Yii はこのプロセスを二つのステップに分けます。
......@@ -44,7 +44,7 @@ http://localhost/users?fields=id,email&expand=profile
```
### fields()` をオーバーライドする <a name="overriding-fields"></a>
### fields()` をオーバーライドする <span id="overriding-fields"></span>
デフォルトでは、[[yii\base\Model::fields()]] は、モデルの全ての属性をフィールドとして返し、[[yii\db\ActiveRecord::fields()]] は、DB から投入された属性だけを返します。
......@@ -91,7 +91,7 @@ public function fields()
> および `password_reset_token` を選んで除去しています。
### `extraFields()` をオーバーライドする<a name="overriding-extra-fields"></a>
### `extraFields()` をオーバーライドする<span id="overriding-extra-fields"></span>
デフォルトでは、[[yii\base\Model::extraFields()]] は何も返しませんが、[[yii\db\ActiveRecord::extraFields()]] は DB から取得されたリレーションの名前を返します。
......@@ -128,7 +128,7 @@ public function extraFields()
```
## リンク <a name="links"></a>
## リンク <span id="links"></span>
[HATEOAS](http://en.wikipedia.org/wiki/HATEOAS) は、Hypermedia as the Engine of Application State (アプリケーション状態のエンジンとしてのハイパーメディア) の略称です。
HATEOAS は、RESTful API は自分が返すリソースについて、どのようなアクションがサポートされているかをクライアントが発見できるような情報を返すべきである、という概念です。
......@@ -171,7 +171,7 @@ class User extends ActiveRecord implements Linkable
```
## コレクション <a name="collections"></a>
## コレクション <span id="collections"></span>
リソースオブジェクトは *コレクション* としてグループ化することが出来ます。
各コレクションは、同じ型のリソースのリストを含みます。
......
......@@ -13,7 +13,7 @@ with response formatting:
この作業は、[[yii\web\Response::formatters|response]] アプリケーションコンポーネントに登録された [[yii\web\ResponseFormatterInterface|レスポンスフォーマッタ]] によって実行されます。
## コンテントネゴシエーション <a name="content-negotiation"></a>
## コンテントネゴシエーション <span id="content-negotiation"></span>
Yii は [[yii\filters\ContentNegotiator]] フィルタによってコンテントネゴシエーションをサポートします。
RESTful API の基底コントローラクラス [[yii\rest\Controller]] は `contentNegotiator` という名前でこのフィルタを持っています。
......@@ -78,7 +78,7 @@ public function behaviors()
このレスポンス形式名は、[[yii\web\Response::formatters]] の中でサポートされているものでなければなりません。
## データのシリアライズ <a name="data-serializing"></a>
## データのシリアライズ <span id="data-serializing"></span>
上記で説明したように、[[yii\rest\Serializer]] が、リソースのオブジェクトやコレクションを配列に変換する際に、中心的な役割を果たします。
`Serializer` は、[[yii\base\ArrayableInterface]] および [[yii\data\DataProviderInterface]] のインタフェイスを実装したオブジェクトを認識します。
......
......@@ -13,7 +13,7 @@ Yii 縺ッ縲√お繝ゥ繝シ蜃ヲ逅r蠕捺擂繧医j縺ッ繧九°縺ォ蠢ォ驕ゥ縺ェ邨碁ィ薙↓縺励※縺上
アプリケーションの [エントリスクリプト](structure-entry-scripts.md) において、定数 `YII_ENABLE_ERROR_HANDLER` を false と定義することによって、これを無効にすることが出来ます。
## エラーハンドラを使用する <a name="using-error-handler"></a>
## エラーハンドラを使用する <span id="using-error-handler"></span>
[[yii\web\ErrorHandler|エラーハンドラ]] は `errorHandler` という名前の [アプリケーションコンポーネント](structure-application-components.md) です。
次のように、アプリケーションの構成情報でこれをカスタマイズすることが出来ます。
......@@ -56,7 +56,7 @@ throw new NotFoundHttpException();
```
## エラー表示をカスタマイズする <a name="customizing-error-display"></a>
## エラー表示をカスタマイズする <span id="customizing-error-display"></span>
[[yii\web\ErrorHandler|エラーハンドラ]] は、定数 `YII_DEBUG` の値に従って、エラー表示を調整します。
`YII_DEBUG` が true である (デバッグモードである) 場合は、エラーハンドラは、デバッグがより容易になるように、詳細なコールスタック情報とソースコード行とともに例外を表示します。
......@@ -74,7 +74,7 @@ throw new NotFoundHttpException();
エラー表示をカスタマイズするために、エラーハンドラの [[yii\web\ErrorHandler::errorView|errorView]] および [[yii\web\ErrorHandler::exceptionView|exceptionView]] プロパティを構成して、自分自身のビューを使用することが出来ます。
### エラーアクションを使う <a name="using-error-actions"></a>
### エラーアクションを使う <span id="using-error-actions"></span>
エラー表示をカスタマイズするためのもっと良い方法は、専用のエラー [アクション](structure-controllers.md) を使うことです。
そうするためには、まず、`errorHandler` コンポーネントの [[yii\web\ErrorHandler::errorAction|errorAction]] プロパティを次のように構成します。
......@@ -139,7 +139,7 @@ public function actionError()
> Info|情報: あなたが [ベーシックアプリケーションテンプレート](start-installation.md) または [アドバンストアプリケーションテンプレート](tutorial-advanced-app.md) を使っている場合は、エラーアクションとエラービューは、既にあなたのために定義されています。
### エラーのレスポンス形式をカスタマイズする <a name="error-format"></a>
### エラーのレスポンス形式をカスタマイズする <span id="error-format"></span>
エラーハンドラは、[レスポンス](runtime-responses.md) の形式の設定に従ってエラーを表示します。
[[yii\web\Response::format|レスポンス形式]] が `html` である場合は、直前の項で説明したように、エラービューまたは例外ビューを使ってエラーを表示します。
......
......@@ -13,7 +13,7 @@ Yii 縺ョ繝ュ繧ョ繝ウ繧ー繝輔Ξ繝シ繝繝ッ繝シ繧ッ繧剃スソ縺◆繧√↓縺ッ縲∽ク玖ィ倥繧ケ繝
この節では、主として最初の二つのステップについて説明します。
## メッセージを記録する <a name="log-messages"></a>
## メッセージを記録する <span id="log-messages"></span>
ログメッセージを記録することは、次のログ記録メソッドのどれかを呼び出すだけの簡単なことです。
......@@ -52,7 +52,7 @@ Yii::trace('蟷ウ蝮庶逶翫險育ョ励r髢句ァ', __METHOD__);
を呼んで、登録された [ログターゲット](#log-targets) に記録されたログメッセージを送信します。
## ログターゲット <a name="log-targets"></a>
## ログターゲット <span id="log-targets"></span>
ログターゲットは [[yii\log\Target]] クラスまたはその子クラスのインスタンスです。
ログターゲットは、ログメッセージを重大性レベルとカテゴリによってフィルタして、何らかの媒体にエクスポートします。
......@@ -109,7 +109,7 @@ Yii 縺ッ荳玖ィ倥繝ュ繧ー繧ソ繝シ繧イ繝ヨ繧偵≠繧峨°縺倥a蜀鳩縺励※縺∪縺吶
以下では、全てのターゲットに共通する機能について説明します。
### メッセージのフィルタリング <a name="message-filtering"></a>
### メッセージのフィルタリング <span id="message-filtering"></span>
全てのログターゲットについて、それぞれ、[[yii\log\Target::levels|levels]] と [[yii\log\Target::categories|categories]]
のプロパティを構成して、ターゲットが処理すべきメッセージの重要性レベルとカテゴリを指定することが出来ます。
......@@ -159,7 +159,7 @@ Yii 縺ッ荳玖ィ倥繝ュ繧ー繧ソ繝シ繧イ繝ヨ繧偵≠繧峨°縺倥a蜀鳩縺励※縺∪縺吶
例えば、[[yii\web\NotFoundHttpException]] は、`yii\web\HttpException:404` というカテゴリのエラーメッセージを発生させます。
### メッセージの書式設定 <a name="message-formatting"></a>
### メッセージの書式設定 <span id="message-formatting"></span>
ログターゲットはフィルタされたログメッセージを一定の書式でエクスポートします。
例えば、[[yii\log\FileTarget]] クラスのログターゲットをインストールした場合は、`runtime/log/app.log` ファイルに、下記と同様なログメッセージが書き込まれます。
......@@ -206,7 +206,7 @@ Yii 縺ッ荳玖ィ倥繝ュ繧ー繧ソ繝シ繧イ繝ヨ繧偵≠繧峨°縺倥a蜀鳩縺励※縺∪縺吶
あるいは、また、コンテキスト情報の提供方法を自分で実装したい場合は、[[yii\log\Target::getContextMessage()]] メソッドをオーバーライドすることも出来ます。
### メッセージのトレースレベル <a name="trace-level"></a>
### メッセージのトレースレベル <span id="trace-level"></span>
開発段階では、各ログメッセージがどこから来ているかを知りたい場合がよくあります。
これは、次のように、`log` コンポーネントの [[yii\log\Dispatcher::traceLevel|traceLevel]] プロパティを構成することによって達成できます。
......@@ -229,7 +229,7 @@ return [
> Info|情報: コールスタック情報の取得は軽微な処理ではありません。従って、この機能は開発時またはアプリケーションをデバッグするときに限って使用するべきです。
### メッセージの吐き出しとエクスポート <a name="flushing-exporting"></a>
### メッセージの吐き出しとエクスポート <span id="flushing-exporting"></span>
既に述べたように、ログメッセージは [[yii\log\Logger|ロガーオブジェクト]] によって配列の中に保持されます。
この配列のメモリ消費を制限するために、この配列に一定数のログメッセージが蓄積されるたびに、ロガーは記録されたメッセージを [ログターゲット](#log-targets) に吐き出します。
......@@ -286,7 +286,7 @@ return [
> Note|注意: 頻繁なメッセージの吐き出しとエクスポートはアプリケーションのパフォーマンスを低下させます。
### ログターゲットの 有効/無効 を切り替える <a name="toggling-log-targets"></a>
### ログターゲットの 有効/無効 を切り替える <span id="toggling-log-targets"></span>
[[yii\log\Target::enabled|enabled]] プロパティを構成することによって、ログターゲットを有効にしたり無効にしたりすることが出来ます。
この切り替えは、ログターゲットのコンフィギュレーションでも出来ますが、コードの中で次の PHP 文を使っても出来ます。
......@@ -316,7 +316,7 @@ return [
```
### 新しいターゲットを作る <a name="new-targets"></a>
### 新しいターゲットを作る <span id="new-targets"></span>
新しいログターゲットを作ることは非常に単純なことです。
必要なことは、主として、[[yii\log\Target::messages]] 配列の中身を指定された媒体に送出する [[yii\log\Target::export()]] メソッドを実装することです。
......@@ -324,7 +324,7 @@ return [
詳細については、Yii リリースに含まれているログターゲットクラスのどれか一つを参照してください。
## パフォーマンスプロファイリング <a name="performance-profiling"></a>
## パフォーマンスプロファイリング <span id="performance-profiling"></span>
パフォーマンスプロファイリングは、特定のコードブロックに要した時間を測定してパフォーマンスのボトルネックになっている所を見つけ出すために使われる、特殊なタイプのメッセージロギングです。
例えば、[[yii\db\Command]] クラスは、各 DB クエリに要した時間を知るために、パフォーマンスプロファイリングを使用しています。
......
......@@ -6,7 +6,7 @@
この節では、アプリケーションの中でこのコンポーネントをどのように利用できるかを説明します。
## リクエストのパラメータ <a name="request-parameters"></a>
## リクエストのパラメータ <span id="request-parameters"></span>
リクエストのパラメータを取得するためには、`request` コンポーネントの [[yii\web\Request::get()|get()]] および [[yii\web\Request::post()|post()]] メソッドを呼ぶことが出来ます。
これらは、ぞれぞれ、`$_GET``$_POST` の値を返します。例えば、
......@@ -55,7 +55,7 @@ $param = $request->getBodyParam('id');
[[yii\web\Request::parsers]] プロパティを構成することによって、これらのパラメータが解析される方法をカスタマイズすることが出来ます。
## リクエストメソッド <a name="request-methods"></a>
## リクエストメソッド <span id="request-methods"></span>
現在のリクエストに使用された HTTP メソッドは、`Yii::$app->request->method` という式によって取得することが出来ます。
現在のメソッドが特定のタイプであるかどうかをチェックするための、一連の真偽値のプロパティも提供されています。
......@@ -70,7 +70,7 @@ if ($request->isPost) { // リクエストメソッドは POST }
if ($request->isPut) { // リクエストメソッドは PUT }
```
## リクエストの URL <a name="request-urls"></a>
## リクエストの URL <span id="request-urls"></span>
`request` コンポーネントは現在リクエストされている URL を調べるための方法を数多く提供しています。
......@@ -88,7 +88,7 @@ if ($request->isPut) { // リクエストメソッドは PUT }
* [[yii\web\Request::serverPort|serverPort]]: 80 を返します。ウェブサーバによって使用されているポートです。
## HTTP ヘッダ <a name="http-headers"></a>
## HTTP ヘッダ <span id="http-headers"></span>
[[yii\web\Request::headers]] プロパティによって返される [[yii\web\HeaderCollection|header コレクション]] を通じて、HTTP ヘッダ情報を取得することが出来ます。例えば、
......@@ -119,7 +119,7 @@ if ($headers->has('User-Agent')) { // User-Agent ヘッダが在る }
このフィルタは、上記で説明したプロパティとメソッドの上に、コンテントネゴシエーションを実装しています。
## クライアント情報 <a name="client-information"></a>
## クライアント情報 <span id="client-information"></span>
クライアントマシンのホスト名と IP アドレスを、それぞれ、[[yii\web\Request::userHost|userHost]] と [[yii\web\Request::userIP|userIP]] によって取得することが出来ます。例えば、
......
......@@ -12,7 +12,7 @@
この節では、レスポンスを構成してエンドユーザに送信する方法を説明します。
## ステータスコード <a name="status-code"></a>
## ステータスコード <span id="status-code"></span>
レスポンスを作成するときに最初にすることの一つは、リクエストが成功裡に処理されたかどうかを記述することです。
そのためには、[[yii\web\Response::statusCode]] プロパティに有効な [HTTP ステータスコード](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html) の一つを設定します。
......@@ -55,7 +55,7 @@ throw new \yii\web\HttpException(402);
```
## HTTP ヘッダ <a name="http-headers"></a>
## HTTP ヘッダ <span id="http-headers"></span>
`response` コンポーネントの [[yii\web\Response::headers|ヘッダコレクション]] を操作することによって、HTTP ヘッダを送信することが出来ます。
例えば、
......@@ -77,7 +77,7 @@ $values = $headers->remove('Pragma');
そして、新しく登録されたヘッダは、[[yii\web\Response::send()]] メソッドが呼ばれるまで送信されません。
## レスポンスボディ <a name="response-body"></a>
## レスポンスボディ <span id="response-body"></span>
ほとんどのレスポンスは、エンドユーザに対して表示したい内容を示すボディを持っていなければなりません。
......@@ -157,7 +157,7 @@ public function actionInfo()
しかし、 [依存の注入](concept-di-container.md) を使えば、 共通の構成情報をあなたの新しいレスポンスオブジェクトに適用することが出来ます。
## ブラウザのリダイレクト <a name="browser-redirection"></a>
## ブラウザのリダイレクト <span id="browser-redirection"></span>
ブラウザのリダイレクトは `Location` HTTP ヘッダの送信に依存しています。
この機能は通常よく使われるものであるため、Yii はこれについて特別のサポートを提供しています。
......@@ -196,7 +196,7 @@ public function actionOld()
従って、あなたが ([[yii\web\YiiAsset]] アセットバンドルを登録して) この JavaScript ファイルを使うつもりなら、AJAX のリダイレクトをサポートするためには、何も書く必要がなくなります。
## ファイルを送信する <a name="sending-files"></a>
## ファイルを送信する <span id="sending-files"></span>
ブラウザのリダイレクトと同じように、ファイルの送信という機能も特定の HTTP ヘッダに依存しています。
Yii はさまざまなファイル送信の必要をサポートするための一連のメソッドを提供しています。それらはすべて、HTTP range ヘッダに対するサポートを内蔵しています。
......@@ -235,7 +235,7 @@ public function actionDownload()
- Cherokee: [X-Sendfile and X-Accel-Redirect](http://www.cherokee-project.com/doc/other_goodies.html#x-sendfile)
## レスポンスを送信する <a name="sending-response"></a>
## レスポンスを送信する <span id="sending-response"></span>
レスポンスの中のコンテントは、[[yii\web\Response::send()]] メソッドが呼ばれるまでは、エンドユーザに向けて送信されません。
既定では、このメソッドは [[yii\base\Application::run()]] の最後で自動的に呼ばれます。
......
......@@ -6,12 +6,12 @@
Yii はセッションとクッキーをオブジェクトとしてカプセル化し、オブジェクト指向の流儀でアクセスできるようにするとともに、有用な機能強化を追加しています。
## セッション <a name="sessions"></a>
## セッション <span id="sessions"></span>
[リクエスト](runtime-requests.md)[レスポンス](runtime-responses.md) と同じように、既定では [[yii\web\Session]] のインスタンスである `session` [アプリケーションコンポーネント] によって、セッションにアクセスすることが出来ます。
### セッションのオープンとクローズ <a name="opening-closing-sessions"></a>
### セッションのオープンとクローズ <span id="opening-closing-sessions"></span>
セッションのオープンとクローズは、次のようにして出来ます。
......@@ -35,7 +35,7 @@ $session->destroy();
内部的には、これらのメソッドは、セッションが既に開かれているかどうかを最初にチェックします。
### セッションデータにアクセスする <a name="access-session-data"></a>
### セッションデータにアクセスする <span id="access-session-data"></span>
セッションに保存されているデータにアクセスするためには、次のようにすることが出来ます。
......@@ -119,7 +119,7 @@ $session['captcha.lifetime'] = 3600;
すなわち、配列を一つのセッション変数として保存する代りに、配列の個々の要素を他の要素と同じキー接頭辞を共有する一つのセッション変数として保存することです。
### カスタムセッションストレージ <a name="custom-session-storage"></a>
### カスタムセッションストレージ <span id="custom-session-storage"></span>
既定の [[yii\web\Session]] クラスはセッションデータをサーバ上のファイルとして保存します。
Yii は、また、さまざまなセッションストレージを実装する下記のクラスをも提供しています。
......@@ -171,7 +171,7 @@ CREATE TABLE session
例えば、`session.hash_function=sha256` である場合は、40 の代りに 64 の長さを使わなければなりません。
### フラッシュデータ <a name="flash-data"></a>
### フラッシュデータ <span id="flash-data"></span>
フラッシュデータは特殊な種類のセッションデータで、あるリクエストの中で設定されると、次のリクエストの間においてのみ読み出すことが出来て、その後は自動的に削除されるものです。
フラッシュデータが最もよく使われるのは、エンドユーザに一度だけ表示されるべきメッセージ、例えば、ユーザのフォーム送信が成功した後に表示される確認メッセージなどを実装するときです。
......@@ -219,14 +219,14 @@ $alerts = $session->getFlash('alerts');
その結果、[[yii\web\Session::getFlash()]] を呼び出したとき、この二つのメソッドの呼び出し順によって、あるときは配列を受け取り、あるときは文字列を受け取るということになってしまいます。
## クッキー <a name="cookies"></a>
## クッキー <span id="cookies"></span>
Yii は個々のクッキーを [[yii\web\Cookie]] のオブジェクトとして表します。
[[yii\web\Request]] と [[yii\web\Response]] は、ともに、`cookies` という名前のプロパティによって、クッキーのコレクションを保持します。
後者のクッキーコレクションはリクエストの中で送信されたクッキーを表し、一方、後者のクッキーコレクションは、ユーザに送信されることになるクッキーを表します。
### クッキーを読み出す <a name="reading-cookies"></a>
### クッキーを読み出す <span id="reading-cookies"></span>
現在のリクエストに含まれるクッキーは、下記のコードを使って取得することが出来ます。
......@@ -253,7 +253,7 @@ if (isset($cookies['language'])) ...
```
### クッキーを送信する <a name="sending-cookies"></a>
### クッキーを送信する <span id="sending-cookies"></span>
下記のコードを使って、クッキーをエンドユーザに送信することが出来ます。
......@@ -281,7 +281,7 @@ unset($cookies['language']);
これは、クライアントサイドスクリプトが保護されたクッキーにアクセスする危険を軽減するものです (ブラウザがサポートしていれば)。
詳細については、[httpOnly wiki article](https://www.owasp.org/index.php/HttpOnly) を読んでください。
### クッキー検証 <a name="cookie-validation"></a>
### クッキー検証 <span id="cookie-validation"></span>
最後の二つの項で示されているように、`request``response` のコンポーネントを通じてクッキーを読んだり送信したりする場合には、クッキーがクライアントサイドで修正されるのを防止するクッキー検証という追加のセキュリティを享受することが出来ます。
これは、個々のクッキーにハッシュ文字列をサインとして追加することによって達成されます。
......
......@@ -15,7 +15,7 @@
具体的に言えば、DB クライアントツールを用いてデータベースを作成する方法と、SQL 文を実行する方法を知っていなければなりません。
データベースを準備する <a name="preparing-database"></a>
データベースを準備する <span id="preparing-database"></span>
----------------------
まず初めに、`yii2basic` という名前のデータベースを作成してください。このデータベースからアプリケーションにデータを読み出すことになります。
......@@ -47,7 +47,7 @@ INSERT INTO `country` VALUES ('US','United States',278357000);
この時点で、あなたは `yii2basic` という名前のデータベースを持ち、その中に三つのカラムを持つ `country` というテーブルがあり、`country` テーブルは 10 行のデータを持っている、ということになります。
DB 接続を構成する <a name="configuring-db-connection"></a>
DB 接続を構成する <span id="configuring-db-connection"></span>
-----------------
先に進む前に、[PDO](http://www.php.net/manual/en/book.pdo.php) PHP 拡張および使用しているデータベースの PDO ドライバ (例えば、MySQL のための `pdo_mysql`) の両方をインストール済みであることを確認してください。
......@@ -78,7 +78,7 @@ return [
詳しい情報については、[構成情報](concept-configurations.md) の節を参照してください。
アクティブレコードを作成する <a name="creating-active-record"></a>
アクティブレコードを作成する <span id="creating-active-record"></span>
----------------------------
`country` テーブルの中のデータを表現し取得するために、[アクティブレコード](db-active-record.md) から派生した `Country` という名前のクラスを作成し、それを `models/Country.php` というファイルに保存します。
......@@ -124,7 +124,7 @@ $country->save();
もう一つの方法として、[データアクセスオブジェクト](db-dao.md) と呼ばれる、より低レベルなデータアクセス方法を使ってデータベースを操作することも出来ます。
アクションを作成する <a name="creating-action"></a>
アクションを作成する <span id="creating-action"></span>
--------------------
国データをエンドユーザに公開するために、新しいアクションを作成する必要があります。
......@@ -179,7 +179,7 @@ class CountryController extends Controller
このとき、国データだけでなく、そのページネーション情報がビューに渡されます。
ビューを作成する <a name="creating-view"></a>
ビューを作成する <span id="creating-view"></span>
----------------
最初に、`views` ディレクトリの下に `country` という名前のサブディレクトリを作ってください。
......@@ -210,7 +210,7 @@ use yii\widgets\LinkPager;
`LinkPager` ウィジェットはページボタンのリストを表示します。ボタンのどれかをクリックすると、対応するページの国データが更新表示されます。
試してみる <a name="trying-it-out"></a>
試してみる <span id="trying-it-out"></span>
----------
上記のコード全てがどのように動作するかを見るために、ブラウザで下記の URL をアクセスします。
......@@ -242,7 +242,7 @@ http://hostname/index.php?r=country/index&page=2
こうして、新しい国のクエリは `LIMIT 5 OFFSET 5` という句を持ち、次の5つの国を表示のために返すことになります。
まとめ <a name="summary"></a>
まとめ <span id="summary"></span>
------
この節では、データベースを扱う方法を学びました。
......
......@@ -14,7 +14,7 @@
* [ビュー](structure-views.md) の中で HTML フォームを構築する方法
モデルを作成する <a name="creating-model"></a>
モデルを作成する <span id="creating-model"></span>
----------------
ユーザに入力してもらうデータは、下に示されているように `EntryForm` モデルクラスとして表現され、`models/EntryForm.php` というファイルに保存されます。
......@@ -74,7 +74,7 @@ if ($model->validate()) {
```
アクションを作成する <a name="creating-action"></a>
アクションを作成する <span id="creating-action"></span>
--------------------
次に、この新しいモデルを使う `entry` アクションを `site` コントローラに作る必要があります。
......@@ -127,7 +127,7 @@ class SiteController extends Controller
実際の仕事では、[フォーム送信の諸問題](http://en.wikipedia.org/wiki/Post/Redirect/Get) を避けるために、[[yii\web\Controller::refresh()|refresh()]] または [[yii\web\Controller::redirect()|redirect()]] を使うことを考慮すべきです。
ビューを作成する <a name="creating-views"></a>
ビューを作成する <span id="creating-views"></span>
----------------
最後に、`entry-confirm``entry` という名前の二つのビューファイルを作成します。
......@@ -174,7 +174,7 @@ use yii\widgets\ActiveForm;
インプットフィールドの後に、[[yii\helpers\Html::submitButton()]] メソッドが呼ばれて、送信ボタンを生成しています。
試してみる <a name="trying-it-out"></a>
試してみる <span id="trying-it-out"></span>
----------
どのように動作するかを見るために、ブラウザで下記の URL をアクセスしてください。
......@@ -194,7 +194,7 @@ http://hostname/index.php?r=site/entry
![データ入力の確認](images/start-entry-confirmation.png)
### 魔法の説明<a name="magic-explained"></a>
### 魔法の説明<span id="magic-explained"></span>
あなたは、舞台裏で HTML フォームがどのように動いているのか、不思議に思うかも知れません。
なぜなら、フォームが、ほとんど魔法のように、各インプットフィールドのラベルを表示し、データを正しく入力しなかった場合には、ページをリロードすることなく、エラーメッセージを表示するからです。
......@@ -222,7 +222,7 @@ http://hostname/index.php?r=site/entry
あなたは、将来のビュー開発を単純化するために、多くのビューコードを再利用可能なウィジェットに変換したいと思うことでしょう。
まとめ <a name="summary"></a>
まとめ <span id="summary"></span>
------
ガイドのこの節においては、MVC デザインパターンの全ての部分に触れました。
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment