Browse Source

Merge remote-tracking branch 'upstream/master'

tags/2.0.17
dungphanxuan 9 years ago
parent
commit
667d6b2374
  1. 2
      docs/guide-es/README.md
  2. 6
      docs/guide-es/blocktypes.json
  3. 10
      docs/guide-es/caching-data.md
  4. 2
      docs/guide-es/caching-http.md
  5. 4
      docs/guide-es/concept-aliases.md
  6. 4
      docs/guide-es/concept-autoloading.md
  7. 2
      docs/guide-es/concept-behaviors.md
  8. 4
      docs/guide-es/concept-components.md
  9. 2
      docs/guide-es/concept-configurations.md
  10. 4
      docs/guide-es/concept-di-container.md
  11. 6
      docs/guide-es/concept-events.md
  12. 4
      docs/guide-es/concept-properties.md
  13. 22
      docs/guide-es/db-dao.md
  14. 8
      docs/guide-es/db-query-builder.md
  15. 4
      docs/guide-es/helper-html.md
  16. 4
      docs/guide-es/helper-overview.md
  17. 4
      docs/guide-es/output-theming.md
  18. 2
      docs/guide-es/rest-authentication.md
  19. 2
      docs/guide-es/rest-controllers.md
  20. 8
      docs/guide-es/rest-quick-start.md
  21. 2
      docs/guide-es/rest-resources.md
  22. 2
      docs/guide-es/runtime-bootstrapping.md
  23. 6
      docs/guide-es/runtime-handling-errors.md
  24. 16
      docs/guide-es/runtime-logging.md
  25. 2
      docs/guide-es/runtime-overview.md
  26. 8
      docs/guide-es/runtime-requests.md
  27. 10
      docs/guide-es/runtime-responses.md
  28. 24
      docs/guide-es/runtime-routing.md
  29. 18
      docs/guide-es/runtime-sessions-cookies.md
  30. 4
      docs/guide-es/start-databases.md
  31. 2
      docs/guide-es/start-forms.md
  32. 2
      docs/guide-es/start-gii.md
  33. 6
      docs/guide-es/start-hello.md
  34. 8
      docs/guide-es/start-installation.md
  35. 2
      docs/guide-es/start-workflow.md
  36. 2
      docs/guide-es/structure-application-components.md
  37. 8
      docs/guide-es/structure-applications.md
  38. 24
      docs/guide-es/structure-assets.md
  39. 4
      docs/guide-es/structure-controllers.md
  40. 2
      docs/guide-es/structure-entry-scripts.md
  41. 12
      docs/guide-es/structure-extensions.md
  42. 12
      docs/guide-es/structure-filters.md
  43. 12
      docs/guide-es/structure-models.md
  44. 6
      docs/guide-es/structure-modules.md
  45. 2
      docs/guide-es/structure-views.md
  46. 2
      docs/guide-es/structure-widgets.md
  47. 2
      docs/guide-es/tutorial-core-validators.md
  48. 2
      docs/guide-es/tutorial-yii-integration.md
  49. 5
      docs/guide-ja/concept-aliases.md
  50. 76
      docs/guide-ja/concept-events.md
  51. 7
      docs/guide-ja/db-query-builder.md
  52. 2
      docs/guide-ja/intro-upgrade-from-v1.md
  53. 2
      docs/guide-ja/output-data-widgets.md
  54. 1
      docs/guide-ja/start-looking-ahead.md
  55. 68
      docs/guide-ru/concept-events.md
  56. 2
      docs/guide-ru/output-theming.md
  57. 28
      docs/guide-ru/security-authentication.md
  58. 60
      docs/guide-ru/security-authorization.md
  59. 1
      docs/guide-ru/start-looking-ahead.md
  60. 2
      docs/guide-ru/tutorial-yii-integration.md
  61. 6
      docs/guide-uk/blocktypes.json
  62. 4
      docs/guide-uk/concept-aliases.md
  63. 6
      docs/guide-uk/concept-autoloading.md
  64. 16
      docs/guide-uk/start-databases.md
  65. 36
      docs/guide-uk/start-forms.md
  66. 11
      docs/guide-uk/start-gii.md
  67. 20
      docs/guide-uk/start-hello.md
  68. 37
      docs/guide-uk/start-installation.md
  69. 2
      docs/guide-uk/start-workflow.md
  70. 2
      docs/guide-uk/structure-application-components.md
  71. 12
      docs/guide-uk/structure-applications.md
  72. 17
      docs/guide-uk/structure-controllers.md
  73. 54
      docs/guide-uk/structure-models.md
  74. 4
      docs/guide-uk/structure-views.md
  75. 19
      docs/guide-uk/tutorial-console.md
  76. 4
      docs/guide-uk/tutorial-start-from-scratch.md
  77. 4
      docs/guide-uk/tutorial-yii-integration.md
  78. 6
      docs/guide-zh-CN/blocktypes.json
  79. 2
      docs/guide-zh-CN/caching-http.md
  80. 4
      docs/guide-zh-CN/concept-aliases.md
  81. 4
      docs/guide-zh-CN/concept-autoloading.md
  82. 2
      docs/guide-zh-CN/concept-behaviors.md
  83. 2
      docs/guide-zh-CN/concept-components.md
  84. 4
      docs/guide-zh-CN/concept-events.md
  85. 2
      docs/guide-zh-CN/concept-properties.md
  86. 10
      docs/guide-zh-CN/db-active-record.md
  87. 14
      docs/guide-zh-CN/db-dao.md
  88. 4
      docs/guide-zh-CN/helper-overview.md
  89. 10
      docs/guide-zh-CN/input-validation.md
  90. 2
      docs/guide-zh-CN/output-formatting.md
  91. 2
      docs/guide-zh-CN/rest-authentication.md
  92. 2
      docs/guide-zh-CN/rest-controllers.md
  93. 8
      docs/guide-zh-CN/rest-quick-start.md
  94. 2
      docs/guide-zh-CN/rest-resources.md
  95. 4
      docs/guide-zh-CN/runtime-handling-errors.md
  96. 8
      docs/guide-zh-CN/runtime-responses.md
  97. 16
      docs/guide-zh-CN/runtime-sessions-cookies.md
  98. 6
      docs/guide-zh-CN/start-databases.md
  99. 10
      docs/guide-zh-CN/start-forms.md
  100. 4
      docs/guide-zh-CN/start-gii.md
  101. Some files were not shown because too many files have changed in this diff Show More

2
docs/guide-es/README.md

@ -1,4 +1,4 @@
Guía Definitiva de Yii 2.0
Guía Definitiva de Yii 2.0
==========================
Este tutorial se publica bajo los [Términos de Documentación Yii](http://www.yiiframework.com/doc/terms/).

6
docs/guide-es/blocktypes.json

@ -0,0 +1,6 @@
{
"Warning:": "Aviso:",
"Note:": "Nota:",
"Info:": "Información:",
"Tip:": "Consejo:"
}

10
docs/guide-es/caching-data.md

@ -1,4 +1,4 @@
Almacenamiento de Datos en Caché
Almacenamiento de Datos en Caché
================================
El almacenamiento de datos en caché trata del almacenamiento de alguna variable PHP en caché y recuperarla más tarde del mismo. También es la base de algunas de las características avanzadas de almacenamiento en caché, tales como [el almacenamiento en caché de consultas a la base de datos](#query-caching) y [el almacenamiento en caché de contenido](caching-page.md).
@ -64,7 +64,7 @@ el código que utiliza la caché. Por ejemplo, podrías modificar la configuraci
],
```
> Consejo: 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]]).
> Tip: 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 <span id="supported-cache-storage"></span>
@ -82,7 +82,7 @@ se muestra un listado con los componentes de caché disponibles:
* [[yii\caching\XCache]]: utiliza la extensión de PHP [XCache](http://xcache.lighttpd.net/).
* [[yii\caching\ZendDataCache]]: utiliza [Zend Data Cache](http://files.zend.com/help/Zend-Server-6/zend-server.htm#data_cache_component.htm) como el medio fundamental de caché.
> Consejo: 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).
> Tip: 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é <span id="cache-apis"></span>
@ -100,7 +100,7 @@ Todos los componentes de almacenamiento de caché provienen de la misma clase "p
* [[yii\caching\Cache::delete()|delete()]]: elimina un elemento de datos identificado por una clave de la caché.
* [[yii\caching\Cache::flush()|flush()]]: elimina todos los elementos de datos de la cache.
> Nota: No Almacenes el valor boolean `false` en caché directamente porque el método [[yii\caching\Cache::get()|get()]] devuelve
> Note: No Almacenes el valor boolean `false` en caché directamente porque el método [[yii\caching\Cache::get()|get()]] devuelve
el valor `false` para indicar que el dato no ha sido encontrado en la caché. Puedes poner `false` dentro de un array y cachear
este array para evitar este problema.
@ -221,7 +221,7 @@ $result = Customer::getDb()->cache(function ($db) {
});
```
> 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.
> Note: 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 <span id="query-caching-configs"></span>

2
docs/guide-es/caching-http.md

@ -110,7 +110,7 @@ La generación de un ETag que requiera muchos recursos puede echar por tierra el
introducir una sobrecarga innecesaria, ya que debe ser re-evaluada en cada solicitud (request). Trata de encontrar una
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),
> Note: 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` <span id="cache-control"></span>

4
docs/guide-es/concept-aliases.md

@ -19,7 +19,7 @@ Yii::setAlias('@foo', '/path/to/foo');
Yii::setAlias('@bar', 'http://www.example.com');
```
> Nota: Una ruta de archivo o URL en alias NO debe necesariamente referirse a un archivo o recurso existente.
> Note: Una ruta de archivo o URL en alias NO debe necesariamente referirse a un archivo o recurso existente.
Dado un alias, puedes derivar un nuevo alias (sin necesidad de llamar [[Yii::setAlias()]]) anexando una barra diagonal `/`
seguida por uno o varios segmentos de la ruta. Llamamos los alias definidos a través de [[Yii::setAlias()]]
@ -63,7 +63,7 @@ echo Yii::getAlias('@foo/bar/file.php'); // muestra: /path/to/foo/bar/file.php
La ruta de archivo/URL representado por un alias derivado está determinado por la sustitución de la parte de su alias raíz
con su correspondiente ruta/Url en el alias derivado.
> Nota: El método [[Yii::getAlias()]] no comprueba si la ruta/URL resultante hacer referencia a un archivo o recurso existente.
> Note: El método [[Yii::getAlias()]] no comprueba si la ruta/URL resultante hacer referencia a un archivo o recurso existente.
Un alias de raíz puede contener carácteres `/`. El método [[Yii::getAlias()]] es lo suficientemente inteligente para saber

4
docs/guide-es/concept-autoloading.md

@ -6,7 +6,7 @@ e incluir los archivos de las clases requiridas. Proporciona un cargador de clas
[estandard PSR-4](https://github.com/php-fig/fig-standards/blob/master/proposed/psr-4-autoloader/psr-4-autoloader.md).
El cargador se instala cuando incluyes el archivo `Yii.php`.
> Nota: Para simplificar la descripción, en esta sección sólo hablaremos de la carga automática de clases. Sin embargo,
> Note: Para simplificar la descripción, en esta sección sólo hablaremos de la carga automática de clases. Sin embargo,
ten en cuenta que el contenido que describimos aquí también se aplica a la autocarga de interfaces y rasgos (Traits).
@ -81,7 +81,7 @@ Puedes usar el autocargador de Composer sin el autocargador de Yii. Sin embargo,
tus clases puede que se degrade, y además deberías seguir las reglas establecidas por Composer para que tus clases pudieran
ser autocargables.
> Nota: Si no deseas utilizar el autocargador de Yii, tendrás que crear tu propia versión del archivo `Yii.php` e
> Note: Si no deseas utilizar el autocargador de Yii, tendrás que crear tu propia versión del archivo `Yii.php` e
incluirlo en tu [script de entrada](structure-entry-scripts.md).

2
docs/guide-es/concept-behaviors.md

@ -48,7 +48,7 @@ se define a través de la getter `getProp2()` y el setter `setProp2()`. Este cas
Debido a que esta clase es un comportamiento, cuando está unido a un componente, el componente también tienen la propiedad `prop1` y `prop2` y el método `foo()`.
> Consejo: Dentro de un comportamiento, puede acceder al componente que el comportamiento está unido a través de la propiedad [[yii\base\Behavior::owner]].
> Tip: Dentro de un comportamiento, puede acceder al componente que el comportamiento está unido a través de la propiedad [[yii\base\Behavior::owner]].
Gestión de eventos de componentes

4
docs/guide-es/concept-components.md

@ -1,4 +1,4 @@
Componentes
Componentes
===========
Los componentes son los principales bloques de construcción de las aplicaciones Yii. Los componentes son instancias de [[yii\base\Component]] o de una clase extendida. Las tres características principales que los componentes proporcionan
@ -73,7 +73,7 @@ $component = \Yii::createObject([
], [1, 2]);
```
> Información: Mientras que el enfoque de llamar [[Yii::createObject()]] parece mucho más complicado, es mucho más potente debido al hecho de que se implementa en la parte superior de un [contenedor de inyección de dependencia](concept-di-container.md).
> Info: Mientras que el enfoque de llamar [[Yii::createObject()]] parece mucho más complicado, es mucho más potente debido al hecho de que se implementa en la parte superior de un [contenedor de inyección de dependencia](concept-di-container.md).
La clase [[yii\base\Object]] hace cumplir el siguiente ciclo de vida del objeto:

2
docs/guide-es/concept-configurations.md

@ -1,4 +1,4 @@
Configuración
Configuración
==============
Las configuraciones se utilizan ampliamente en Yii al crear nuevos objetos o inicializar los objetos existentes. Las configuraciones por lo general incluyen el nombre de la clase del objeto que se está creando, y una lista de los valores iniciales que deberían ser asignadas a las del [propiedades](concept-properties.md) objeto. Las configuraciones también pueden incluir una lista de manipuladores que deban imponerse a del objeto [eventos](concept-events.md) y/o una lista de [comportamientos](concept-behaviors.md) que también ha de atribuirse al objeto.

4
docs/guide-es/concept-di-container.md

@ -1,4 +1,4 @@
Contenedor de Inyección de Dependencias
Contenedor de Inyección de Dependencias
=======================================
Un contenedor de Inyección de Dependencias (ID), es un objeto que sabe como instancias y configurar objetos y sus
@ -135,7 +135,7 @@ $container->set('db', function ($container, $params, $config) {
$container->set('pageCache', new FileCache);
```
> Consejo: Si un nombre de dependencia es el mismo que la definición de dependencia, no es necesario registrarlo con
> Tip: Si un nombre de dependencia es el mismo que la definición de dependencia, no es necesario registrarlo con
el contenedor de ID.
Una dependencia registrada mediante `set()` generará una instancia cada vez que se necesite la dependencia. Se puede

6
docs/guide-es/concept-events.md

@ -1,4 +1,4 @@
Eventos
Eventos
=======
Los eventos permiten inyectar código dentro de otro código existente en ciertos puntos de ejecución. Se pueden adjuntar
@ -130,7 +130,7 @@ class Foo extends Component
Con el código anterior, cada llamada a `bar()` lanzará un evento llamado `hello`
> Consejo: Se recomienda usar las constantes de clase para representar nombres de eventos. En el anterior ejemplo, la
> Tip: Se recomienda usar las constantes de clase para representar nombres de eventos. En el anterior ejemplo, la
constante `EVENT_HELLO` representa el evento `hello`. Este enfoque proporciona tres beneficios. Primero, previene
errores tipográficos. Segundo, puede hacer que los IDEs reconozcan los eventos en las funciones de auto-completado.
Tercero, se puede ver que eventos soporta una clase simplemente revisando la declaración de constantes.
@ -246,7 +246,7 @@ Event::trigger(Foo::className(), Foo::EVENT_HELLO);
Tenga en cuenta que en este caso, el `$event->sender` hace referencia al nombre de la clase que lanza el evento en
lugar de a la instancia del objeto.
> Nota: Debido a que los gestores a nivel de clase responderán a los eventos lanzados por cualquier instancia de la
> Note: Debido a que los gestores a nivel de clase responderán a los eventos lanzados por cualquier instancia de la
clase, o cualquier clase hija, se debe usar con cuidado, especialmente en las clases de bajo nivel (low-level), tales
como [[yii\base\Object]].

4
docs/guide-es/concept-properties.md

@ -1,4 +1,4 @@
Propiedades
Propiedades
===========
En PHP, las variables miembro de clases también llamadas *propiedades*, son parte de la definición de la clase, y se
@ -21,7 +21,7 @@ Para solventar este problema, Yii introduce la clase base llamada [[yii\base\Obj
de propiedades basada en los métodos de clase *getter* y *setter*. Si una clase necesita más funcionalidad, debe
extender a la clase [[yii\base\Object]] o a alguna de sus hijas.
> Información: Casi todas las clases del núcleo (core) en el framework Yii extienden a [[yii\base\Object]] o a una de
> Info: Casi todas las clases del núcleo (core) en el framework Yii extienden a [[yii\base\Object]] o a una de
sus clases hijas. Esto significa que siempre que se encuentre un getter o un setter en una clase del núcleo, se
puede utilizar como una propiedad.

22
docs/guide-es/db-dao.md

@ -1,4 +1,4 @@
Objetos de Acceso a Bases de Datos
Objetos de Acceso a Bases de Datos
==================================
Construido sobre [PDO](http://php.net/manual/es/book.pdo.php), Yii DAO (Objetos de Acceso a Bases de Datos) proporciona una
@ -22,7 +22,7 @@ Yii DAO soporta las siguientes bases de datos:
## Creando Conexiones DB <span id="creating-db-connections"></span>
Para acceder a una base de datos, primero necesitas conectarte a tu bases de datos mediante la creación
de una instancia de [yii\db\Connection]]:
de una instancia de [[yii\db\Connection]]:
```php
$db = new yii\db\Connection([
@ -56,7 +56,7 @@ return [
Puedes acceder a la conexión DB mediante la expresión `Yii::$app->db`.
> Consejo: Puedes configurar múltiples componentes de aplicación DB si tu aplicación necesita acceder a múltiples bases de datos.
> Tip: Puedes configurar múltiples componentes de aplicación DB si tu aplicación necesita acceder a múltiples bases de datos.
Cuando configuras una conexión DB, deberías siempre especificar el Nombre de Origen de Datos (DSN) mediante la
propiedad [[yii\db\Connection::dsn|dsn]]. El formato del DSN varia para cada diferente base de datos. Por favor consulte el
@ -87,7 +87,7 @@ para que Yii pueda conocer el tipo de base de datos actual. Por ejemplo,
Además de la propiedad [[yii\db\Connection::dsn|dsn]], a menudo es necesario configurar el [[yii\db\Connection::username|username]]
y [[yii\db\Connection::password|password]]. Por favor consulta [[yii\db\Connection]] para ver la lista completa de propiedades configurables.
> Información: Cuando se crea una instancia de conexión DB, la conexión actual a la base de datos no se establece hasta que
> Info: Cuando se crea una instancia de conexión DB, la conexión actual a la base de datos no se establece hasta que
ejecutes el primer SQL o llames explícitamente al método [[yii\db\Connection::open()|open()]].
@ -126,10 +126,10 @@ $count = $db->createCommand('SELECT COUNT(*) FROM post')
->queryScalar();
```
> Nota: Para preservar la precisión, los datos obtenidos de las bases de datos son todos representados como cadenas, incluso si el tipo de columna correspondiente
> Note: Para preservar la precisión, los datos obtenidos de las bases de datos son todos representados como cadenas, incluso si el tipo de columna correspondiente
a la base de datos es numérico.
> Consejo: Si necesitas ejecutar una consulta SQL inmediatamente después de establecer una conexión (ej., para establecer una zona horaria o un conjunto de caracteres),
> Tip: Si necesitas ejecutar una consulta SQL inmediatamente después de establecer una conexión (ej., para establecer una zona horaria o un conjunto de caracteres),
> puedes hacerlo con el evento [[yii\db\Connection::EVENT_AFTER_OPEN]]. Por ejemplo,
>
```php
@ -389,10 +389,10 @@ es posible que necesites ajustar el nivel de aislamiento para todas las transacc
en las configuraciones.
En el momento de escribir esto, solo MSSQL y SQLite serán afectadas.
> Nota: SQLite solo soporta dos niveles de aislamiento, por lo que solo se puede usar `READ UNCOMMITTED` y
> Note: SQLite solo soporta dos niveles de aislamiento, por lo que solo se puede usar `READ UNCOMMITTED` y
`SERIALIZABLE`. El uso de otros niveles causará el lanzamiento de una excepción.
> Nota: PostgreSQL no permite configurar el nivel de aislamiento antes que la transacción empiece por lo que no se
> Note: PostgreSQL no permite configurar el nivel de aislamiento antes que la transacción empiece por lo que no se
puede especificar el nivel de aislamiento directamente cuando empieza la transacción. Se tiene que llamar a
[[yii\db\Transaction::setIsolationLevel()]] después de que la transacción haya empezado.
@ -490,7 +490,7 @@ $rows = $db->createCommand('SELECT * FROM user LIMIT 10')->queryAll();
$db->createCommand("UPDATE user SET username='demo' WHERE id=1")->execute();
```
> Información: Las consultas realizadas llamando a [[yii\db\Command::execute()]] se consideran consultas de escritura,
> Info: Las consultas realizadas llamando a [[yii\db\Command::execute()]] se consideran consultas de escritura,
mientras que todas las demás se ejecutan mediante alguno de los métodos "query" de [[yii\db\Command]] son consultas
de lectura. Se puede obtener la conexión de esclavo activa mediante `$db->slave`.
@ -500,7 +500,7 @@ una conexión a este. Si el esclavo se encuentra "muerto", se intentará con otr
"muertos" por lo que no se intentará volver a conectar a ellos durante
[[yii\db\Connection::serverRetryInterval|certain period of time]].
> Información: En la configuración anterior, se especifica un tiempo de espera (timeout) de conexión de 10 segundos
> Info: En la configuración anterior, se especifica un tiempo de espera (timeout) de conexión de 10 segundos
para cada esclavo. Esto significa que si no se puede conectar a un esclavo en 10 segundos, este será considerado
como "muerto". Se puede ajustar el parámetro basado en el entorno actual.
@ -550,7 +550,7 @@ La configuración anterior especifica dos maestros y cuatro esclavos. El compone
balanceo de carga y la conmutación de errores entre maestros igual que hace con los esclavos. La diferencia es que
cuando no se encuentra ningún maestro disponible se lanza una excepción.
> Nota: cuando se usa la propiedad [[yii\db\Connection::masters|masters]] para configurar uno o múltiples maestros, se
> Note: cuando se usa la propiedad [[yii\db\Connection::masters|masters]] para configurar uno o múltiples maestros, se
ignorarán todas las otras propiedades que especifiquen una conexión de base de datos
(ej. `dsn`, `username`, `password`), junto con el mismo objeto `Connection`.

8
docs/guide-es/db-query-builder.md

@ -1,7 +1,7 @@
Constructor de Consultas
Constructor de Consultas
========================
> Nota: Esta sección está en desarrollo.
> Note: Esta sección está en desarrollo.
Yii proporciona una capa de acceso básico a bases de datos como se describe en la sección
[Objetos de Acceso a Bases de Datos](db-dao.md). La capa de acceso a bases de datos proporciona un método de bajo
@ -76,7 +76,7 @@ $query->select(['id', 'name'])
->from('user');
```
> Información: Se debe usar siempre el formato array si la clausula `SELECT` contiene expresiones SQL. Esto se debe a
> Info: Se debe usar siempre el formato array si la clausula `SELECT` contiene expresiones SQL. Esto se debe a
que una expresión SQL como `CONCAT(first_name, last_name) AS full_name` puede contener comas. Si se junta con otra
cadena de texto de otra columna, puede ser que la expresión se divida en varias partes por comas, esto puede
conllevar a errores.
@ -240,7 +240,7 @@ El operando puede ser uno de los siguientes (ver también [[yii\db\QueryInterfac
cuenta que cuando se usa un el mapeo de filtrado (o no se especifica el tercer operando), los valores se encerraran
automáticamente entre un par de caracteres de porcentaje.
> Nota: Cuando se usa PostgreSQL también se puede usar
> Note: Cuando se usa PostgreSQL también se puede usar
[`ilike`](http://www.postgresql.org/docs/8.3/static/functions-matching.html#FUNCTIONS-LIKE) en lugar de `like` para
filtrar resultados insensibles a mayúsculas (case-insensitive).

4
docs/guide-es/helper-html.md

@ -7,7 +7,7 @@ puede realizar de forma efectiva
generan dinámicamente empieza a complicarse su gestión sin ayuda extra. Yii ofrece esta ayuda en forma de una clase auxiliar Html
que proporciona un conjunto de métodos estáticos para gestionar las etiquetas HTML más comúnmente usadas, sus opciones y contenidos.
> Nota: Si el marcado es casi estático, es preferible usar HTML directamente. No es necesario encapsularlo todo con
> Note: 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 <span id="basics"></span>
@ -115,7 +115,7 @@ $decodedUserName = Html::decode($userName);
El trato con el marcado de formularios es una tarea repetitiva y propensa a errores. Por esto hay un grupo de métodos
para ayudar a gestionarlos.
> Nota: hay que considerar la opción de usar [[yii\widgets\ActiveForm|ActiveForm]] en caso de que se gestionen
> Note: hay que considerar la opción de usar [[yii\widgets\ActiveForm|ActiveForm]] en caso de que se gestionen
formularios que requieran validaciones.
### Creando formularios <span id="creating-forms"></span>

4
docs/guide-es/helper-overview.md

@ -1,7 +1,7 @@
Helpers
=======
> Nota: Esta sección está en desarrollo.
> Note: Esta sección está en desarrollo.
Yii ofrece muchas clases que ayudan a simplificar las tareas comunes de codificación, como manipulación de string o array,
generación de código HTML, y más. Estas clases helper están organizadas bajo el namespace `yii\helpers` y
@ -15,7 +15,7 @@ use yii\helpers\Html;
echo Html::encode('Test > test');
```
> Nota: Para soportar la [personalización de clases helper](#customizing-helper-classes), Yii separa cada clase helper del núcleo
> Note: Para soportar la [personalización de clases helper](#customizing-helper-classes), Yii separa cada clase helper del núcleo
en dos clases: una clase base (ej. `BaseArrayHelper`) y una clase concreta (ej. `ArrayHelper`).
Cuando uses un helper, deberías sólo usar la versión concreta y nunca usar la clase base.

4
docs/guide-es/output-theming.md

@ -1,14 +1,14 @@
Temas
=====
> Nota: Esta sección está en desarrollo.
> Note: Esta sección está en desarrollo.
Un tema (theme) es un directorio de archivos y de vistas (views) y layouts. Cada archivo de este directorio
sobrescribe el archivo correspondiente de una aplicación cuando se renderiza. Una única aplicación puede usar
múltiples temas para que pueden proporcionar experiencias totalmente diferentes. Solo se puede haber un único tema
activo.
> Nota: Los temas no están destinados a ser redistribuidos ya que están demasiado ligados a la aplicación. Si se
> Note: Los temas no están destinados a ser redistribuidos ya que están demasiado ligados a la aplicación. Si se
quiere redistribuir una apariencia personalizada, se puede considerar la opción de
[asset bundles](structure-assets.md) de archivos CSS y Javascript.

2
docs/guide-es/rest-authentication.md

@ -33,7 +33,7 @@ El paso 1 no es necesario pero sí recomendable para las APIs RESTful, pues son
Cuando [[yii\web\User::enableSession|enableSession]] es false, el estado de autenticación del usuario puede NO persistir entre peticiones usando sesiones.
Si embargo, la autenticación será realizada para cada petición, lo que se consigue en los pasos 2 y 3.
> Tip: Puedes configurar [[yii\web\User::enableSession|enableSession]] del componente de la aplicación `user` en la configuración
> Tip:Puedes configurar [[yii\web\User::enableSession|enableSession]] del componente de la aplicación `user` en la configuración
de las aplicaciones si estás desarrollando APIs RESTful en términos de un aplicación. Si desarrollas un módulo de las APIs RESTful,
puedes poner la siguiente línea en el método del módulo `init()`, tal y como sigue:
> ```php

2
docs/guide-es/rest-controllers.md

@ -149,4 +149,4 @@ public function checkAccess($action, $model = null, $params = [])
El método `checkAccess()` será llamado por defecto en las acciones predeterminadas de [[yii\rest\ActiveController]]. Si creas
nuevas acciones y también deseas llevar a cabo la comprobación de acceso, debe llamar a este método de forma explícita en las nuevas acciones.
> Consejo: Puedes implementar `checkAccess()` mediante el uso del [Componente Role-Based Access Control (RBAC)](security-authorization.md).
> Tip: Puedes implementar `checkAccess()` mediante el uso del [Componente Role-Based Access Control (RBAC)](security-authorization.md).

8
docs/guide-es/rest-quick-start.md

@ -74,7 +74,7 @@ del componente de aplicación `request` para usar [[yii\web\JsonParser]] para en
]
```
> Consejo: La configuración anterior es opcional. Sin la configuración anterior, la API sólo reconocería
> Tip: La configuración anterior es opcional. Sin la configuración anterior, la API sólo reconocería
`application/x-www-form-urlencoded` y `multipart/form-data` como formatos de entrada.
@ -93,7 +93,7 @@ para acceder a los datos de user. Las APIs que tienes creado incluyen:
* `OPTIONS /users`: muestra los verbos compatibles respecto al punto final `/users`;
* `OPTIONS /users/123`: muestra los verbos compatibles respecto al punto final `/users/123`.
> Información: Yii automáticamente pluraliza los nombres de los controladores para usarlo en los puntos finales.
> Info: Yii automáticamente pluraliza los nombres de los controladores para usarlo en los puntos finales.
> Puedes configurar esto usando la propiedad [[yii\rest\UrlRule::$pluralize]].
Puedes acceder a tus APIs con el comando `curl` de la siguiente manera,
@ -172,7 +172,7 @@ Content-Type: application/json; charset=UTF-8
{"id":1,"username":"example","email":"user@example.com","created_at":1414674789,"updated_at":1414674789}
```
> Consejo: También puedes acceder a tus APIs a través del navegador web introduciendo la URL `http://localhost/users`.
> Tip: También puedes acceder a tus APIs a través del navegador web introduciendo la URL `http://localhost/users`.
Sin embargo, es posible que necesites algunos plugins para el navegador para enviar cabeceras especificas en la petición.
Como se puede ver, en las cabeceras de la respuesta, hay información sobre la cuenta total, número de páginas, etc.
@ -183,7 +183,7 @@ Utilizando los parámetros `fields` y `expand`, puedes también especificar que
Por ejemplo, la URL `http://localhost/users?fields=id,email` sólo devolverá los campos `id` y `email`.
> Información: Puedes haber notado que el resultado de `http://localhost/users` incluye algunos campos sensibles,
> Info: Puedes haber notado que el resultado de `http://localhost/users` incluye algunos campos sensibles,
> tal como `password_hash`, `auth_key`. Seguramente no quieras que éstos aparecieran en el resultado de tu API.
> Puedes y deberías filtrar estos campos como se describe en la sección [Response Formatting](rest-response-formatting.md).

2
docs/guide-es/rest-resources.md

@ -73,7 +73,7 @@ public function fields()
}
```
> Atención: Dado que, por defecto, todos los atributos de un modelo pueden ser incluidos en la devolución del API, debes
> Warning: Dado que, por defecto, todos los atributos de un modelo pueden ser incluidos en la devolución del API, debes
> examinar tus datos para estar seguro de que no contiene información sensible. Si se da este tipo de información,
> debes sobreescribir `fields()` para filtrarlos. En el ejemplo anterior, escogemos
> quitar `auth_key`, `password_hash` y `password_reset_token`.

2
docs/guide-es/runtime-bootstrapping.md

@ -1,4 +1,4 @@
Bootstrapping
Bootstrapping
=============
El Bootstrapping hace referencia al proceso de preparar el entorno antes de que una aplicación se inicie para resolver y procesar una petición entrante. El se ejecuta en dos lugares: el [script de entrada](structure-entry-scripts.md) y la [aplicación](structure-applications.md).

6
docs/guide-es/runtime-handling-errors.md

@ -1,4 +1,4 @@
Gestión de Errores
Gestión de Errores
==================
Yii incluye un [[yii\web\ErrorHandler|error handler]] que permite una gestión de errores mucho más práctica que
@ -69,7 +69,7 @@ excepciones con una pila detallada de información y con lineas de código fuent
variable `YII_DEBUG` es `false`, solo se mostrará el mensaje de error para prevenir la revelación de información
sensible de la aplicación.
> Información: Si una excepción es descendiente de [[yii\base\UserException]], no se mostrará la pila de llamadas
> Info: Si una excepción es descendiente de [[yii\base\UserException]], no se mostrará la pila de llamadas
independientemente del valor de `YII_DEBUG`. Esto es debido a que se considera que estas excepciones se deben a
errores cometidos por los usuarios y los desarrolladores no necesitan corregirlas.
@ -150,7 +150,7 @@ a las siguientes variables si se define el error como un [[yii\web\ErrorAction]]
* `exception`: el objeto de excepción a través del cual se puede obtener más información útil, tal como el código de
estado HTTP, el código de error, la pila de llamadas del error, etc.
> Información: Tanto la [plantilla de aplicación básica](start-installation.md) como la
> Info: 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 <span id="error-format"></span>

16
docs/guide-es/runtime-logging.md

@ -1,4 +1,4 @@
Registro de anotaciones
Registro de anotaciones
=======================
Yii proporciona un poderoso framework dedicado al registro de anotaciones (logging) que es altamente personalizable y
@ -35,7 +35,7 @@ ejemplo registra la huella del mensaje para la categoría `application`:
Yii::trace('start calculating average revenue');
```
> Información: Los mensajes de registro pueden ser tanto cadenas de texto como datos complejos, como arrays u objetos.
> Info: Los mensajes de registro pueden ser tanto cadenas de texto como datos complejos, como arrays u objetos.
Es responsabilidad de los [destinos de registros](#log-targets) tratar los mensajes de registro de manera apropiada.
De forma predeterminada, si un mensaje de registro no es una cadena de texto, se exporta como si fuera un string
llamando a [[yii\helpers\VarDumper::export()]].
@ -54,7 +54,7 @@ La constante `__METHOD__` equivale al nombre del método (con el prefijo del nom
se encuentra la constante. Por ejemplo, es igual a la cadena `'app\controllers\RevenueController::calculate'` si la
linea anterior de código se llamara dentro de este método.
> Información: Los métodos de registro de anotaciones descritos anteriormente en realidad son accesos directos al
> Info: Los métodos de registro de anotaciones descritos anteriormente en realidad son accesos directos al
método [[yii\log\Logger::log()|log()]] del [[yii\log\Logger|logger object]] que es un singleton accesible a través
de la expresión `Yii::getLogger()`. Cuando se hayan registrado suficientes mensajes o cuando la aplicación haya
finalizado, el objeto de registro llamará [[yii\log\Dispatcher|message dispatcher]] para enviar los mensajes de
@ -100,7 +100,7 @@ return [
];
```
> Nota: El componente `log` debe cargarse durante el proceso de [bootstrapping](runtime-bootstrapping.md) para que
> Note: El componente `log` debe cargarse durante el proceso de [bootstrapping](runtime-bootstrapping.md) para que
pueda enviar los mensajes de registro a los destinos inmediatamente. Este es el motivo por el que se lista en el
array `bootstrap` como se muestra más arriba.
@ -171,7 +171,7 @@ de advertencia de las categorías que coincidan con alguno de los siguientes pat
]
```
> Información: Cuando se captura una excepción de tipo HTTP por el [gestor de errores](runtime-handling-errors.md), se
> Info: Cuando se captura una excepción de tipo HTTP por el [gestor de errores](runtime-handling-errors.md), se
registrará un mensaje de error con el nombre de categoría con formato `yii\web\HttpException:ErrorCode`. Por
ejemplo, la excepción [[yii\web\NotFoundHttpException]] causará un mensaje de error del tipo
`yii\web\HttpException:404`.
@ -250,7 +250,7 @@ La configuración de aplicación anterior establece el [[yii\log\Dispatcher::tra
mensaje de registro se le añadirán como mucho 3 niveles de la pila de llamadas del mensaje que se este registrando; y
si `YII_DEBUG` está deshabilitado, no se incluirá información de la pila de llamadas.
> Información: Obtener información de la pila de llamadas no es trivial. Por lo tanto, sólo se debe usar esta
> Info: 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 <span id="flushing-exporting"></span>
@ -273,7 +273,7 @@ return [
];
```
> Información: También se produce la liberación de mensajes cuando la aplicación finaliza, esto asegura que los
> Info: También se produce la liberación de mensajes cuando la aplicación finaliza, esto asegura que los
destinos de los registros reciban los mensajes de registro.
Cuando el [[yii\log\Logger|logger object]] libera los mensajes de registro enviándolos a los
@ -313,7 +313,7 @@ return [
];
```
> Nota: El uso frecuente de liberación y exportación puede degradar el rendimiento de la aplicación.
> Note: El uso frecuente de liberación y exportación puede degradar el rendimiento de la aplicación.
### Conmutación de Destinos de Registros <span id="toggling-log-targets"></span>

2
docs/guide-es/runtime-overview.md

@ -1,4 +1,4 @@
Información General
Información General
===============
Cada vez que una aplicación Yii gestiona una petición, se somete a un flujo de trabajo similar.

8
docs/guide-es/runtime-requests.md

@ -1,4 +1,4 @@
Peticiones
Peticiones
==========
Las peticiones (requests) hechas a una aplicación son representadas como objetos [[yii\web\Request]] que proporcionan
@ -35,7 +35,7 @@ $name = $request->post('name', '');
// equivalente a: $name = isset($_POST['name']) ? $_POST['name'] : '';
```
> Información: En lugar de acceder directamente a `$_GET` y `$_POST` para obtener los parámetros de la petición, es
> Info: En lugar de acceder directamente a `$_GET` y `$_POST` para obtener los parámetros de la petición, es
recomendable que se obtengan mediante el componente `request` como en el ejemplo anterior. Esto facilitará la
creación de tests ya que se puede simular una componente de request con datos de peticiones personalizados.
@ -53,7 +53,7 @@ $params = $request->bodyParams;
$param = $request->getBodyParam('id');
```
> Información: A diferencia de los parámetros `GET`, los parámetros enviados desde el formulario a través de `POST`,
> Info: A diferencia de los parámetros `GET`, los parámetros enviados desde el formulario a través de `POST`,
`PUT`, `PATCH`, etc. se envían en el cuerpo de la petición. El componente `request` convierte los parámetros cuando
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]].
@ -126,7 +126,7 @@ puede usar el método de negociación de idioma [[yii\web\Request::getPreferredL
lista de idiomas soportados por la aplicación, comparados con
[[yii\web\Request::acceptableLanguages|acceptableLanguages]], y devuelve el idioma más apropiado.
> Consejo: También se puede usar el filtro [[yii\filters\ContentNegotiator|ContentNegotiator]] para determinar
> Tip: También se puede usar el filtro [[yii\filters\ContentNegotiator|ContentNegotiator]] para determinar
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.

10
docs/guide-es/runtime-responses.md

@ -1,4 +1,4 @@
Respuestas
Respuestas
==========
Cuando una aplicación finaliza la gestión de una [petición (request)](runtime-requests.md), genera un objeto
@ -74,7 +74,7 @@ $headers->set('Pragma', 'no-cache');
$values = $headers->remove('Pragma');
```
> Información: Los nombres de las cabeceras case insensitive, es decir, no discriminan entre mayúsculas y minúsculas.
> Info: Los nombres de las cabeceras case insensitive, es decir, no discriminan entre mayúsculas y minúsculas.
Además, las nuevas cabeceras registradas no se enviarán al usuario hasta que se llame al método
[[yii\web\Response::send()]].
@ -156,7 +156,7 @@ public function actionInfo()
}
```
> Nota: Si se crea un objeto response propio, no se podrán aprovechar las configuraciones asignadas para el componente
> Note: Si se crea un objeto response propio, no se podrán aprovechar las configuraciones asignadas para el componente
`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.
@ -188,7 +188,7 @@ respuesta.
\Yii::$app->response->redirect('http://example.com/new', 301)->send();
```
> Información: De forma predeterminada, el método [[yii\web\Response::redirect()]] asigna el estado de respuesta al
> Info: De forma predeterminada, el método [[yii\web\Response::redirect()]] asigna el estado de respuesta al
código de estado 302 que indica al navegador que recurso solicitado está *temporalmente* alojado en una URI diferente.
Se puede enviar un código de estado 301 para expresar que el recurso se ha movido de forma *permanente*.
@ -197,7 +197,7 @@ redirección del navegador automática. Para resolver este problema, el método
una cabecera `X-Redirect` con el valor de la URL de redirección. En el lado del cliente se puede escribir código
JavaScript para leer la esta cabecera y redireccionar el navegador como corresponda.
> Información: Yii contiene el archivo JavaScript `yii.js` que proporciona un conjunto de utilidades comunes de
> Info: Yii contiene el archivo JavaScript `yii.js` que proporciona un conjunto de utilidades comunes de
JavaScript, incluyendo la redirección de navegador basada en la cabecera `X-Redirect`. Por tanto, si se usa este
fichero JavaScript (registrándolo *asset bundle* [[yii\web\YiiAsset]]), no se necesitará escribir nada más para tener
soporte en redirecciones AJAX.

24
docs/guide-es/runtime-routing.md

@ -1,4 +1,4 @@
Enrutamiento y Creación de URLS
Enrutamiento y Creación de URLS
===============================
Cuando una aplicación Yii empieza a procesar una URL solicitada, lo primero que hace es convertir la URL en una
@ -12,7 +12,7 @@ convertirla en la ruta original con los parámetros asociados.
La principal pieza encargada del enrutamiento y de la creación de URLs es [[yii\web\UrlManager|URL manager]], que se
registra como el componente de aplicación `urlManager`. El [[yii\web\UrlManager|URL manager]] proporciona el método
[[yii\web\UrlManager::parseRequest()|parseRequest()]] para convertir una petición entrante en una ruta y sus
parámetros asociados y el método [yii\web\UrlManager::createUrl()|createUrl()]] para crear una URL a partir de una
parámetros asociados y el método [[yii\web\UrlManager::createUrl()|createUrl()]] para crear una URL a partir de una
ruta dada y sus parámetros asociados.
Configurando el componente `urlManager` en la configuración de la aplicación, se puede dotar a la aplicación de
@ -157,7 +157,7 @@ Si habilita el formato de URL amigable, las URLs creadas serán diferentes, de a
La ruta que se pasa al método [[yii\helpers\Url::to()]] es context sensitive. Esto quiere decir que puede ser una ruta
*relativa* o una ruta *absoluta* que serán tipificadas de acuerdo con las siguientes reglas:
- Si una ruta es una cadena vacía, se usará la [yii\web\Controller::route|route]] solicitada actualmente.
- Si una ruta es una cadena vacía, se usará la [[yii\web\Controller::route|route]] solicitada actualmente.
- Si la ruta no contiene ninguna barra `/`, se considerará que se trata de un ID de acción del controlador actual y se
le antepondrá el valor [[\yii\web\Controller::uniqueId|uniqueId]] del controlador actual.
- Si la ruta no tiene barra inicial, se considerará que se trata de una ruta relativa al modulo actual y se le
@ -258,7 +258,7 @@ amigable. El resto de propiedades son opcionales. Sin embargo, la anterior confi
y crear URLs. Esta es la propiedad principal con la que se debe trabajar para crear URLs que satisfagan el formato
de un requerimiento particular de la aplicación.
> Nota: Para ocultar el nombre del script de entrada en las URLs generadas, además de establecer el
> Note: Para ocultar el nombre del script de entrada en las URLs generadas, además de establecer el
[[yii\web\UrlManager::showScriptName|showScriptName]] a falso, puede ser necesaria la configuración del servidor Web
para que identifique correctamente que script PHP debe ejecutarse cuando se solicita una URL que no lo especifique.
Si se usa el servidor Web Apache, se puede utilizar la configuración recomendada descrita en la sección de
@ -324,7 +324,7 @@ el patrón con el formato `<ParamName:RegExp>`, donde `ParamName` especifica el
expresión regular opcional que se usa para encontrar los valores de los parámetros. Si no se especifica `RegExp`
significa que el parámetro debe ser una cadena de texto sin ninguna barra.
> Nota: Solo se pueden especificar expresiones regulares para los parámetros. La parte restante del patrón se
> Note: Solo se pueden especificar expresiones regulares para los parámetros. La parte restante del patrón se
considera texto plano.
Cuando se usa una regla para convertir una URL, esta rellenara los parámetros asociados con los valores que coincidan
@ -390,7 +390,7 @@ como `comment/create`.
Del mismo modo, para crear una URL para una ruta `comment/index`, se aplicará la tercera regla, que crea una URL
`/index.php/comments`.
> Información: Mediante la parametrización de rutas es posible reducir el numero de reglas de URL e incrementar
> Info: Mediante la parametrización de rutas es posible reducir el numero de reglas de URL e incrementar
significativamente el rendimiento del [[yii\web\UrlManager|URL manager]].
De forma predeterminada, todos los parámetros declarados en una regla son requeridos. Si una URL solicitada no
@ -447,7 +447,7 @@ ejemplo, la siguiente regla convertirá la URL `http://en.example.com/posts` en
]
```
> Nota: Las reglas con nombres de servidor NO deben incluir el subdirectorio del script de entrada (entry script) en
> Note: Las reglas con nombres de servidor NO deben incluir el subdirectorio del script de entrada (entry script) en
sus patrones. Por ejemplo, is la aplicación se encuentra en `http://www.example.com/sandbox/blog`, entonces se debe
usar el patrón `http://www.example.com/posts` en lugar de `http://www.example.com/sandbox/blog/posts`. Esto
permitirá que la aplicación se pueda desarrollar en cualquier directorio sin la necesidad de cambiar el código de la
@ -479,9 +479,9 @@ propiedad [[yii\web\UrlManager::suffix]] como en el siguiente ejemplo de configu
La configuración anterior permitirá al [[yii\web\UrlManager|URL manager]] reconocer las URLs solicitadas y a su vez
crear URLs con el sufijo `.html`.
> Consejo: Se puede establecer `/` como el prefijo de URL para que las URLs finalicen con una barra.
> Tip: Se puede establecer `/` como el prefijo de URL para que las URLs finalicen con una barra.
> Nota: Cuando se configura un sufijo de URL, si una URL solicitada no tiene el sufijo, se considerará como una URL
> Note: Cuando se configura un sufijo de URL, si una URL solicitada no tiene el sufijo, se considerará como una URL
desconocida. Esta es una practica recomendada para SEO (optimización en motores de búsqueda).
A veces, se pueden querer usar sufijos diferentes para URLs diferentes. Esto se puede conseguir configurando la
@ -529,10 +529,10 @@ convertirá en `post/view`.
]
```
> Nota: Si una regla de URL contiene algún método HTTP en su patrón, la regla solo se usará para aplicar conversiones.
> Note: Si una regla de URL contiene algún método HTTP en su patrón, la regla solo se usará para aplicar conversiones.
Se omitirá cuando se llame a [[yii\web\UrlManager|URL manager]] para crear URLs.
> Consejo: Para simplificar el enrutamiento en APIs RESTful, Yii proporciona una clase de reglas de URL
> Tip: Para simplificar el enrutamiento en APIs RESTful, Yii proporciona una clase de reglas de URL
[[yii\rest\UrlRule]] especial que es bastante eficiente y soporta ciertas características como pluralización de IDs
de controladores. Para conocer más detalles, se puede visitar la sección [Enrutamiento](rest-routing.md) acerca de
el desarrollo de APIs RESTful.
@ -558,7 +558,7 @@ array completo de configuración para especificar una regla. El siguiente ejempl
]
```
> Información: De forma predeterminada si no se especifica una opción `class` para una configuración de regla, se
> Info: De forma predeterminada si no se especifica una opción `class` para una configuración de regla, se
usará la clase predeterminada [[yii\web\UrlRule]].

18
docs/guide-es/runtime-sessions-cookies.md

@ -64,7 +64,7 @@ foreach ($session as $name => $value) ...
foreach ($_SESSION as $name => $value) ...
```
> Información: Cuando accedas a los datos de sesión a través del componente `session`, una sesión será automáticamente abierta si no lo estaba antes. Esto es diferente accediendo a los datos de sesión a través de `$_SESSION`, el cual requiere llamar explícitamente a `session_start()`.
> Info: Cuando accedas a los datos de sesión a través del componente `session`, una sesión será automáticamente abierta si no lo estaba antes. Esto es diferente accediendo a los datos de sesión a través de `$_SESSION`, el cual requiere llamar explícitamente a `session_start()`.
Cuando trabajas con datos de sesiones que son arrays, el componte `session` tiene una limitación que te previene directamente de modificar un elemento del array. Por ejemplo,
@ -125,7 +125,7 @@ Por defecto la clase [[yii\web\Session]] almacena los datos de sesión como fich
Todas estas clases de sesión soportan los mismos métodos de la API. Como consecuencia, puedes cambiar el uso de diferentes almacenamientos de sesión sin la necesidad de modificar el código de tu aplicación que usa sesiones.
> Nota: si quieres acceder a los datos de sesión vía `$_SESSION` mientras estás usando un almacenamiento de sesión personalizado, debes asegurar te que la sesión está ya empezada por [[yii\web\Session::open()]]. Esto ocurre porque los manipuladores de almacenamiento de sesión personalizado son registrados sin este método.
> Note: si quieres acceder a los datos de sesión vía `$_SESSION` mientras estás usando un almacenamiento de sesión personalizado, debes asegurar te que la sesión está ya empezada por [[yii\web\Session::open()]]. Esto ocurre porque los manipuladores de almacenamiento de sesión personalizado son registrados sin este método.
Para aprender como configurar y usar estas clases de componentes, por favor consulte la documentación de la API. Abajo está un ejemplo que muestra como configurar [[yii\web\DbSession]] en la configuración de la aplicación para usar una tabla en la base de datos como almacenamiento de sesión:
@ -158,7 +158,7 @@ donde 'BLOB' se refiere al BLOB-type de tu DBMS preferida. Abajo está el tipo B
- PostgreSQL: BYTEA
- MSSQL: BLOB
> 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.
> Note: 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 <span id="flash-data"></span>
@ -185,7 +185,7 @@ $result = $session->hasFlash('postDeleted');
Al igual que los datos de sesión regulares, puede almacenar datos arbitrarios como flash data.
Cuando llamas a [yii\web\Session::setFlash()]], sobrescribirá cualquier Flash data que tenga el mismo nombre.
Cuando llamas a [[yii\web\Session::setFlash()]], sobrescribirá cualquier Flash data que tenga el mismo nombre.
Para añadir un nuevo flash data a el/los existes con el mismo nombre, puedes llamar a [[yii\web\Session::addFlash()]].
Por ejemplo:
@ -203,7 +203,7 @@ $session->addFlash('alerts', 'You are promoted.');
$alerts = $session->getFlash('alerts');
```
> Nota: Intenta no usar a la vez [[yii\web\Session::setFlash()]] con [[yii\web\Session::addFlash()]] para flash data
> Note: Intenta no usar a la vez [[yii\web\Session::setFlash()]] con [[yii\web\Session::addFlash()]] para flash data
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.
@ -262,18 +262,18 @@ unset($cookies['language']);
Además de [[yii\web\Cookie::name|name]], [[yii\web\Cookie::value|value]] las propiedades que se muestran en los anteriores ejemplos, la clase [[yii\web\Cookie]] también define otras propiedades para representar toda la información posible de las cookies, tal como [[yii\web\Cookie::domain|domain]], [[yii\web\Cookie::expire|expire]]. Puedes configurar estas propiedades según sea necesario para preparar una cookie y luego añadirlo a la colección de cookies de la respuesta.
> 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.
> Note: 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 <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`.
> Información: Si falla la validación de una cookie, aún puedes acceder a la misma a través de `$_COOKIE`. Esto sucede porque librerías de terceros pueden manipular de forma propia las cookies, lo cual no implica la validación de las mismas.
> Info: Si falla la validación de una cookie, aún puedes acceder a la misma a través de `$_COOKIE`. Esto sucede porque librerías de terceros pueden manipular de forma propia las cookies, lo cual no implica la validación de las mismas.
La validación de cookies es habilitada por defecto. Puedes desactivar lo ajustando la propiedad [[yii\web\Request::enableCookieValidation]] a false, aunque se recomienda encarecidamente que no lo haga.
> Nota: Las cookies que son directamente leídas/enviadas vía `$_COOKIE` y `setcookie()` no serán validadas.
> Note: Las cookies que son directamente leídas/enviadas vía `$_COOKIE` y `setcookie()` no serán validadas.
Cuando estás usando la validación de cookie, puedes especificar una [[yii\web\Request::cookieValidationKey]] el cual se usará para generar los strings hash mencionados anteriormente. Puedes hacerlo mediante la configuración del componente `request` en la configuración de la aplicación:
@ -287,5 +287,5 @@ return [
];
```
> Información: [[yii\web\Request::cookieValidationKey|cookieValidationKey]] es crítico para la seguridad de tu aplicación.
> Info: [[yii\web\Request::cookieValidationKey|cookieValidationKey]] es crítico para la seguridad de tu aplicación.
Sólo debería ser conocido por personas de confianza. No lo guardes en sistemas de control de versiones.

4
docs/guide-es/start-databases.md

@ -78,7 +78,7 @@ consultas SQL contra la base de datos subyacente.
La conexión a la base de datos realizada anteriormente puede ser accedida mediante `Yii::$app->db`.
> Información: El archivo `config/db.php` será incluido en el archivo principal de configuración `config/web.php`,
> Info: El archivo `config/db.php` será incluido en el archivo principal de configuración `config/web.php`,
el cual especifica cómo la instancia de la [aplicación](structure-applications.md) debe ser inicializada.
Para más información, consulta la sección [Configuraciones](concept-configurations.md).
@ -125,7 +125,7 @@ $country->name = 'U.S.A.';
$country->save();
```
> Información: Active Record es una potente forma de acceder y manipular datos de una base de datos de una manera
> Info: Active Record es una potente forma de acceder y manipular datos de una base de datos de una manera
orientada a objetos.
Puedes encontrar información más detallada acerca de [Active Record](db-active-record.md). Además de Active Record,
puedes utilizar un método de acceso de bajo nivel llamado [Data Access Objects](db-dao.md).

2
docs/guide-es/start-forms.md

@ -106,7 +106,7 @@ Si todo está bien, la acción mostrará una vista llamada `entry-confirm` para
con el usuario que acepta los datos que ha ingresado. De otra manera, la vista `entry` será
mostrada, y mostrará el formulario HTML junto con los mensajes de error de validación (si es que hay alguno).
> Información: La expresión `Yii::$app` representa la instancia de la [aplicación](structure-applications.md)
> Info: La expresión `Yii::$app` representa la instancia de la [aplicación](structure-applications.md)
que es un singleton globalmente accesible. También es un [service locator](concept-service-locator.md) (localizador de servicio)
que provee los componentes, tales como `request`, `response`, `db`, etc. para soportar funcionalidades específicas.
En el código de arriba, el componente `request` es utilizado para acceder los datos `$_POST`.

2
docs/guide-es/start-gii.md

@ -119,7 +119,7 @@ o por si desearas personalizarlos:
* Modelos: `models/Country.php` y `models/CountrySearch.php`
* Vistas: `views/country/*.php`
> Información: Gii está diseñado para ser una herramienta altamente configurable. Utilizándola con sabiduría
> Info: Gii está diseñado para ser una herramienta altamente configurable. Utilizándola con sabiduría
puede acelerar enormemente la velocidad de desarrollo de tu aplicación. Para más detalles, consulta la
sección [Gii](tool-gii.md).

6
docs/guide-es/start-hello.md

@ -22,7 +22,7 @@ Para la tarea "Hola", crearás una [acción](structure-controllers.md#creating-a
un parámetro `message` de la petición y muestra este mensaje de vuelta al usuario. Si la petición
no provee un parámetro `message`, la acción mostrará el mensaje por defecto "Hola".
> Información: Las [acciones](structure-controllers.md#creating-actions) son objetos que los usuarios finales pueden utilizar directamente para
> Info: Las [acciones](structure-controllers.md#creating-actions) son objetos que los usuarios finales pueden utilizar directamente para
su ejecución. Las acciones están agrupadas por [controladores](structure-controllers.md) (controllers). El resultado de la ejecución de
una acción es la respuesta que el usuario final recibirá.
@ -111,7 +111,7 @@ Esta URL resultará en una página mostrando "Hello World". La página comparte
Si omites el parámetro `message` en el URL, verás que la página muestra sólo "Hola". Esto es porque `message` es pasado como un parámetro al método `actionSay()`,
y cuando es omitido, el valor por defecto `"Hola"` será utilizado.
> Información: La nueva página comparte el mismo encabezado y pie de página que otras páginas porque el método [[yii\web\Controller::render()|render()]]
> Info: La nueva página comparte el mismo encabezado y pie de página que otras páginas porque el método [[yii\web\Controller::render()|render()]]
automáticamente inyectará el resultado de la vista `say` en el [layout](structure-views.md#layouts), que en este
caso está localizada en `views/layouts/main.php`.
@ -122,7 +122,7 @@ la parte `ActionID` para determinar cual acción debe ser inizializada para hace
En este ejemplo, la ruta `site/say` será respondida por la clase controlador `SiteController` y la acción `say`. Como resultado,
el método `SiteController::actionSay()` será llamado para manejar el requerimiento.
> Información: Al igual que las acciones, los controladores tambien tienen ID únicos que los identifican en una aplicación.
> Info: Al igual que las acciones, los controladores tambien tienen ID únicos que los identifican en una aplicación.
Los ID de los Controladores utilizan las mismas reglas de nombrado que los ID de las acciones. Los nombres de las clases de los controladores son derivados de los ID de los controladores removiendo los guiones de los ID, colocando la primera letra en mayúscula en cada palabra, y colocando el sufijo `Controller` al resultado. Por ejemplo, el ID del controlador `post-comentario` corresponde
al nombre de clase del controlador `PostComentarioController`.

8
docs/guide-es/start-installation.md

@ -4,7 +4,7 @@ Instalando Yii
Yii puede ser instalado de dos maneras, usando [Composer](https://getcomposer.org/) o descargando un archivo comprimido.
Es preferible usar la primera forma, ya que te permite instalar [extensiones](structure-extensions.md) o actualizar Yii ejecutando un simple comando.
> 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.
> Note: 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 <span id="installing-via-composer"></span>
@ -95,7 +95,7 @@ También deberías instalar la [Extensión de PHP PDO](http://www.php.net/manual
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.
> Info: 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.
La aplicación instalada debería estar lista para usar tanto con un [servidor HTTP Apache](http://httpd.apache.org/) como con un [servidor HTTP Nginx](http://nginx.org/),
en Windows, Mac OS X, o Linux.
@ -106,11 +106,11 @@ require apuntar el document root de tu servidor Web al directorio `basic/web`. T
de la URL, como se describe en la sección [Parseo y Generación de URLs](runtime-url-handling.md).
En esta sub-sección, aprenderás a configurar tu servidor Apache o Nginx para alcanzar estos objetivos.
> Información: Al definir `basic/web` como document root, también previenes que los usuarios finales accedan
> Info: Al definir `basic/web` como document root, también previenes que los usuarios finales accedan
al código privado o archivos con información sensible de tu aplicación que están incluidos en los directorios del mismo nivel
que `basic/web`. Denegando el acceso es una importante mejora en la seguridad.
> Información: En caso de que tu aplicación corra en un entorno de hosting compartido donde no tienes permisos para modificar
> Info: En caso de que tu aplicación corra en un entorno de hosting compartido donde no tienes permisos para modificar
la configuración del servidor Web, aún puedes ajustar la estructura de la aplicación para mayor seguridad. Por favor consulta
la sección [Entorno de Hosting Compartido](tutorial-shared-hosting.md) para más detalles.

2
docs/guide-es/start-workflow.md

@ -6,7 +6,7 @@ la URL `http://hostname/basic/web/index.php` o `http://hostname/index.php`, depe
Esta sección será una introducción a la funcionalidad incluida de la aplicación, cómo se organiza el código,
y cómo la aplicación maneja los requests en general.
> Información: Por simplicidad, en el transcurso de este tutorial "Para Empezar", se asume que has definido `basic/web`
> Info: Por simplicidad, en el transcurso de este tutorial "Para Empezar", se asume que has definido `basic/web`
como el document root de tu servidor Web, y configurado la URL de acceso a tu aplicación para que sea `http://hostname/index.php`
o similar.
Dependiendo de tus necesidades, por favor ajusta dichas URLs.

2
docs/guide-es/structure-application-components.md

@ -42,7 +42,7 @@ Por ejemplo:
]
```
> Información: A pesar de que puedes registrar tantos componentes como desees, deberías hacerlo con criterio.
> Info: A pesar de que puedes registrar tantos componentes como desees, deberías hacerlo con criterio.
Los componente de la aplicación son como variables globales. Abusando demasiado de ellos puede resultar en
un código más difícil de mantener y testear. En muchos casos, puedes simplemente crear un componente local
y utilizarlo únicamente cuando sea necesario.

8
docs/guide-es/structure-applications.md

@ -6,7 +6,7 @@ hechas en Yii.
Cada aplicación Yii contiene un objeto `Application` que es creado en el [script de entrada](structure-entry-scripts.md)
y es globalmente accesible a través de la expresión `\Yii::$app`.
> Información: Dependiendo del contexto, cuando decimos "una aplicación", puede significar tanto un objeto Application
> Info: Dependiendo del contexto, cuando decimos "una aplicación", puede significar tanto un objeto Application
o un sistema desarrollado en Yii.
Hay dos tipos de aplicaciones: [[yii\web\Application|aplicaciones Web]] y
@ -150,7 +150,7 @@ if (YII_ENV_DEV) {
}
```
> Nota: Agregar demasiados componentes `bootstrap` degradará la performance de tu aplicación debido a que
> Note: Agregar demasiados componentes `bootstrap` degradará la performance de tu aplicación debido a que
por cada request, se necesita correr el mismo grupo de componentes. Por lo tanto, utiliza componentes `bootstrap` con criterio.
@ -372,11 +372,11 @@ no especifica una. La ruta puede consistir el ID de un sub-módulo, el ID de un
Por ejemplo, `help`, `post/create`, `admin/post/create`. Si el ID de la acción no se especifica, tomará el valor por defecto
especificado en [[yii\base\Controller::defaultAction]].
Para [yii\web\Application|aplicaciones Web], el valor por defecto de esta propiedad es `'site'`, lo que significa que el
Para [[yii\web\Application|aplicaciones Web]], el valor por defecto de esta propiedad es `'site'`, lo que significa que el
controlador `SiteController` y su acción por defecto serán usados. Como resultado, si accedes a la aplicación sin
especificar una ruta, mostrará el resultado de `app\controllers\SiteController::actionIndex()`.
Para [yii\console\Application|aplicaciones de consola], el valor por defecto es `'help'`, lo que significa que el comando
Para [[yii\console\Application|aplicaciones de consola]], el valor por defecto es `'help'`, lo que significa que el comando
[[yii\console\controllers\HelpController::actionIndex()]] debería ser utilizado. Como resultado, si corres el comando `yii`
sin proveer ningún argumento, mostrará la información de ayuda.

24
docs/guide-es/structure-assets.md

@ -1,4 +1,4 @@
Assets
Assets
======
Un asset en Yii es un archivo al que se puede hacer referencia en una página Web. Puede ser un archivo CSS, un archivo
@ -64,7 +64,7 @@ A continuación se explicarán más detalladamente las propiedades del [[yii\web
propiedad en consecuencia. Se debe establecer esta propiedad si los archivos asset ya se encuentran en un directorio
Web público y no necesitan ser publicados. Se pueden usar [alias de ruta](concept-aliases.md).
* [[yii\web\AssetBundle::baseUrl|baseUrl]]: especifica la URL correspondiente al directorio
[[yii\web\AssetBundle::basePath|basePath]]. Como en [yii\web\AssetBundle::basePath|basePath]], si se especifica la
[[yii\web\AssetBundle::basePath|basePath]]. Como en [[yii\web\AssetBundle::basePath|basePath]], si se especifica la
propiedad [[yii\web\AssetBundle::sourcePath|sourcePath]], el [gestor de assets](#asset-manager) publicara los assets
y sobrescribirá esta propiedad en consecuencia. Se pueden usar [alias de ruta](concept-aliases.md).
* [[yii\web\AssetBundle::js|js]]: un array lista los archivos JavaScript que contiene este bundle. Tenga en cuenta que
@ -114,7 +114,7 @@ Para las [extensiones](structure-extensions.md), por el hecho de que sus assets
fuente, en directorios que no son accesibles para la Web, se tiene que especificar la propiedad
[[yii\web\AssetBundle::sourcePath|sourcePath]] cuando se definan clases asset bundle para ellas.
> Nota: No se debe usar `@webroot/assets` como [yii\web\AssetBundle::sourcePath|source path]]. Este directorio se usa
> Note: No se debe usar `@webroot/assets` como [[yii\web\AssetBundle::sourcePath|source path]]. Este directorio se usa
por defecto por el [[yii\web\AssetManager|asset manager]] para guardar los archivos asset publicados temporalmente y
pueden ser eliminados.
@ -141,7 +141,7 @@ incluidos en una página. Los valores de estas propiedades serán enviadas a los
[[yii\web\View::registerCssFile()]] y [[yii\web\View::registerJsFile()]], respectivamente cuando las
[vistas](structure-views.md) los llamen para incluir los archivos CSS y JavaScript.
> Nota: Las opciones que se especifican en una clase bundle se aplican a *todos* los archivos CSS/JavaScript de un
> Note: Las opciones que se especifican en una clase bundle se aplican a *todos* los archivos CSS/JavaScript de un
bundle. Si se quiere usar diferentes opciones para diferentes archivos, se deben crear assets bundles separados y
usar un conjunto de opciones para cada bundle.
@ -219,7 +219,7 @@ Si tu aplicación o extensión usa estos paquetes, se recomienda seguir los sigu
`@npm\PackageName`. Esto se debe a que Composer instalará el paquete Bower o NPM en el correspondiente directorio de
este alias.
> Nota: Algunos paquetes pueden distribuir sus archivos en subdirectorios. Si es el caso, se debe especificar el
> Note: Algunos paquetes pueden distribuir sus archivos en subdirectorios. Si es el caso, se debe especificar el
subdirectorio como valor del [[yii\web\AssetBundle::sourcePath|sourcePath]]. Por ejemplo, [[yii\web\JqueryAsset]]
usa `@bower/jquery/dist` en vez de `@bower/jquery`.
@ -234,7 +234,7 @@ use app\assets\AppAsset;
AppAsset::register($this); // $this representa el objeto vista
```
> Información: El método [[yii\web\AssetBundle::register()]] devuelve un objeto asset bundle que contiene la
> Info: El método [[yii\web\AssetBundle::register()]] devuelve un objeto asset bundle que contiene la
información acerca de los assets publicados, tales como [[yii\web\AssetBundle::basePath|basePath]] o
[[yii\web\AssetBundle::baseUrl|baseUrl]].
@ -280,7 +280,7 @@ Del mismo modo, se pueden configurar múltiples asset bundles a través de [[yii
del array deben ser los nombres de clase (sin la primera barra invertida) de los asset bundles, y los valores del array
deben ser las correspondientes [configuraciones de arrays](concept-configurations.md).
> Consejo: Se puede elegir condicionalmente que assets se van a usar en un asset bundle. El siguiente ejemplo
> Tip: Se puede elegir condicionalmente que assets se van a usar en un asset bundle. El siguiente ejemplo
muestra como usar `jquery.js` en el entorno de desarrollo y `jquery.min.js` en los otros casos:
>
> ```php
@ -340,7 +340,7 @@ Si se detecta que alguna de estas claves es la última parte de un archivo asset
registrado con la vista.
Por ejemplo, un archivo asset `mi/ruta/a/jquery.js` concuerda con la clave `jquery.js`.
> Nota: Sólo los assets especificados usando rutas relativas están sujetos al mapeo de assets. Y las rutas de los
> Note: 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 <span id="asset-publishing"></span>
@ -459,7 +459,7 @@ los valores del array las extensiones de archivo resultantes y los comandos para
Los tokens `{from}` y `{to}` en los comandos se reemplazarán por las rutas de origen de los archivos asset y las rutas
de destino de los archivos asset.
> Información: Hay otras maneras de trabajar con las assets de sintaxis extendidas, además de la descrita
> Info: Hay otras maneras de trabajar con las assets de sintaxis extendidas, además de la descrita
anteriormente. Por ejemplo, se pueden usar herramientas generadoras tales como [grunt](http://gruntjs.com/) para
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.
@ -504,7 +504,7 @@ efectiva. Por otra parte, por el hecho de que un único grupo contenga todos los
más grandes y por tanto incrementan el tiempo de transmisión del archivo inicial. En este ejemplo, se usará la primera
opción, ej., usar un único grupo que contenga todos los bundles.
> Información: Dividiendo los asset bundles en grupos no es una tarea trivial. Normalmente requiere un análisis de los
> Info: Dividiendo los asset bundles en grupos no es una tarea trivial. Normalmente requiere un análisis de los
datos del tráfico real de varios assets en diferentes páginas. Al principio, se puede empezar con un
único grupo para simplificar.
@ -618,7 +618,7 @@ Se debe modificar este archivo para especificar que bundles plantea combinar en
`targets` se debe especificar como se deben dividir entre los grupos. Se puede especificar uno o más grupos,
como se ha comentado.
> Nota: Debido a que los alias `@webroot` y `@web` no están disponibles en la aplicación de consola, se deben definir
> Note: Debido a que los alias `@webroot` y `@web` no están disponibles en la aplicación de consola, se deben definir
explícitamente en la configuración.
Los archivos JavaScript se combinan, comprimen y guardan en `js/all-{hash}.js` donde {hash} se reemplaza con el hash
@ -640,6 +640,6 @@ yii asset assets.php config/assets-prod.php
El archivo de configuración generado se puede incluir en la configuración de la aplicación, como se ha descrito en la
anterior subsección.
> Información: Usar el comando `asset` no es la única opción de automatizar el proceso de combinación y compresión.
> Info: Usar el comando `asset` no es la única opción de automatizar el proceso de combinación y compresión.
Se puede usar la excelente herramienta de ejecución de tareas [grunt](http://gruntjs.com/) para lograr el mismo
objetivo.

4
docs/guide-es/structure-controllers.md

@ -141,7 +141,7 @@ la clase del controlador `article` debe ser guardada en un archivo cuyo alias [a
es `@app/controllers/ArticleController.php`; mientras que el controlador `admin/post-comment` debería estar
en `@app/controllers/admin/PostCommentController.php`.
> Información: En el último ejemplo, `admin/post-comment`, demuestra cómo puedes poner un controlador bajo un sub-directorio
> Info: En el último ejemplo, `admin/post-comment`, demuestra cómo puedes poner un controlador bajo un sub-directorio
del [[yii\base\Application::controllerNamespace|controller namespace]]. Esto es útil cuando quieres organizar
tus controladores en varias categorías pero sin utilizar [módulos](structure-modules.md).
@ -243,7 +243,7 @@ Los nombre de métodos de acciones derivan de los IDs de acuerdo al siguiente cr
Por ejemplo, `index` se vuelve `actionIndex`, y `hello-world` se vuelve `actionHelloWorld`.
> Nota: Los nombres de los métodos de acción son *case-sensitive* (distinguen entre minúsculas y mayúsculas). Si tienes un
> Note: Los nombres de los métodos de acción son *case-sensitive* (distinguen entre minúsculas y mayúsculas). Si tienes un
método llamado `ActionIndex`, no será considerado como un método de acción, y como resultado, solicitar la acción `index`
resultará en una excepción. También ten en cuenta que los métodos de acción deben ser `public`. Un método `private` o `protected`
NO define un método de acción.

2
docs/guide-es/structure-entry-scripts.md

@ -1,4 +1,4 @@
Scripts de Entrada
Scripts de Entrada
==================
Los scripts de entrada son el primer eslabón en el proceso de arranque de la aplicación. Una aplicación (ya sea una

12
docs/guide-es/structure-extensions.md

@ -1,4 +1,4 @@
Extensiones
Extensiones
===========
Las extensiones son paquetes de software redistribuibles diseñados especialmente para ser usados en aplicaciones Yii y
@ -7,7 +7,7 @@ añade una practica barra de herramientas de depuración (debug toolbar) al fina
ayudar a comprender más fácilmente como se han generado las páginas. Se pueden usar extensiones para acelerar el
proceso de desarrollo. También se puede empaquetar código propio para compartir nuestro trabajo con otra gente.
> Información: Usamos el termino "extensión" para referirnos a los paquetes específicos de software Yii. Para
> Info: Usamos el termino "extensión" para referirnos a los paquetes específicos de software Yii. Para
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).
@ -52,7 +52,7 @@ Después de la instalación, debemos encontrar el directorio `yiisoft/yii2-imagi
`BasePath/vendor`. También debemos encontrar el directorio `imagine/imagine` que contiene sus paquetes dependientes
instalados.
> Información: La extensión `yiisoft/yii2-imagine` es una extensión del núcleo (core) desarrollada y mantenida por el
> Info: La extensión `yiisoft/yii2-imagine` es una extensión del núcleo (core) desarrollada y mantenida por el
equipo de desarrollo de Yii. Todas las extensiones del núcleo se hospedan en [Packagist](https://packagist.org/) y
son nombradas como `yiisoft/yii2-xyz`, donde `zyz` varia según la extensión.
@ -68,7 +68,7 @@ Image::thumbnail('@webroot/img/test-image.jpg', 120, 120)
->save(Yii::getAlias('@runtime/thumb-test-image.jpg'), ['quality' => 50]);
```
> Información: Las clases de extensiones se cargan automáticamente gracias a
> Info: Las clases de extensiones se cargan automáticamente gracias a
[autocarga de clases de Yii](concept-autoloading.md).
### Instalación Manual de Extensiones <span id="installing-extensions-manually"></span>
@ -387,10 +387,10 @@ mencionados a continuación para facilitar a otra gente el uso de nuestra extens
fácilmente. Más información acerca de documentación de código en
[archivo de Objetos de clase](https://github.com/yiisoft/yii2/blob/master/framework/base/Object.php)
> Información: Los comentarios de código pueden ser escritos en formato Markdown. La extensión `yiisoft/yii2-apidoc`
> Info: Los comentarios de código pueden ser escritos en formato Markdown. La extensión `yiisoft/yii2-apidoc`
proporciona una herramienta para generar buena documentación de API basándose en los comentarios del código.
> Información: Aunque no es un requerimiento, se recomienda que la extensión se adhiera a ciertos estilos de
> Info: Aunque no es un requerimiento, se recomienda que la extensión se adhiera a ciertos estilos de
codificación. Se puede hacer referencia a
[estilo de código del núcleo del framework](https://github.com/yiisoft/yii2/wiki/Core-framework-code-style) para
obtener más detalles.

12
docs/guide-es/structure-filters.md

@ -1,4 +1,4 @@
Filtros
Filtros
=======
Los Filtros (filters) son objetos que se ejecutan antes y/o después de las
@ -45,7 +45,7 @@ Una vez hecho, los filtros serán aplicados a *todas* las acciones de controlado
aplicación, a menos que las propiedades [[yii\base\ActionFilter::only|only]] y [[yii\base\ActionFilter::except|except]]
sean configuradas como se ha descrito anteriormente.
> Nota: Cuando se declaran filtros en módulos o aplicaciones, deben usarse [rutas](structure-controllers.md#routes) en
> Note: Cuando se declaran filtros en módulos o aplicaciones, deben usarse [rutas](structure-controllers.md#routes) en
lugar de IDs de acciones en las propiedades [[yii\base\ActionFilter::only|only]] y
[[yii\base\ActionFilter::except|except]]. Esto es debido a que los IDs de acciones no pueden especificar acciones
dentro del ámbito de un modulo o una aplicación por si mismos.
@ -226,7 +226,7 @@ use yii\web\Response;
];
```
> Información: En el caso que el tipo preferido de contenido y el idioma no puedan ser determinados por una petición,
> Info: En el caso que el tipo preferido de contenido y el idioma no puedan ser determinados por una petición,
será utilizando el primer elemento de formato e idioma de la lista [[formats]] y [[lenguages]].
@ -290,8 +290,8 @@ Por favor refiérase a [Caché de Páginas](caching-page.md) para obtener más d
### [[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
[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]] <span id="verb-filter"></span>
@ -322,7 +322,7 @@ public function behaviors()
### [[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
[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
dominio que esta haciendo la petición. En particular las llamadas AJAX de JavaScript pueden utilizar el mecanismo
XMLHttpRequest. De otro modo esta petición de dominio cruzado seria prohibida por los navegadores Web, por la misma

12
docs/guide-es/structure-models.md

@ -1,4 +1,4 @@
Modelos
Modelos
=======
Los modelos forman parte de la arquitectura
@ -18,7 +18,7 @@ soporta muchas características útiles:
La clase 'modelo' también es una base para modelos más avanzados, tales como [Active Records](db-active-record.md).
> Información: No es obligatorio basar las clases modelo en [[yii\base\Model]]. Sin embargo, debido a que hay muchos
> Info: No es obligatorio basar las clases modelo en [[yii\base\Model]]. Sin embargo, debido a que hay muchos
componentes de Yii construidos para dar soporte a [[yii\base\Model]], por lo general, es la clase base preferible
para un modelo.
@ -146,7 +146,7 @@ public function attributeLabels()
Incluso se puede definir etiquetas de atributo condicionales. Por ejemplo, basándose en el [escenario](#scenarios) en
que se esta usando el modelo, se pueden devolver diferentes etiquetas para un mismo atributo.
> Información: Estrictamente hablando, los atributos son parte de las [vistas](structure-views.md). Pero declarar las
> Info: 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 <span id="scenarios"></span>
@ -190,7 +190,7 @@ class User extends ActiveRecord
}
```
> Información: En el anterior y en los siguientes ejemplos, las clases modelo extienden a [[yii\db\ActiveRecord]]
> Info: En el anterior y en los siguientes ejemplos, las clases modelo extienden a [[yii\db\ActiveRecord]]
porque el uso de múltiples escenarios normalmente sucede con clases de [Active Records](db-active-record.md).
El método 'scenarios()' devuelve un array cuyas claves son el nombre de escenario y los valores correspondientes a los
@ -333,7 +333,7 @@ public function scenarios()
}
```
> Información: La razón de que la asignación masiva sólo se aplique a los atributos seguros es debida a que se quiere
> Info: La razón de que la asignación masiva sólo se aplique a los atributos seguros es debida a que se quiere
controlar qué atributos pueden ser modificados por los datos del usuario final. Por ejemplo, si el modelo 'User' tiene
un atributo 'permission' que determina los permisos asignados al usuario, se quiere que estos atributos sólo sean
modificados por administradores desde la interfaz backend.
@ -459,7 +459,7 @@ public function fields()
}
```
> Atención: debido a que por defecto todos los atributos de un modelo serán incluidos en el array exportado, se debe
> Warning: debido a que por defecto todos los atributos de un modelo serán incluidos en el array exportado, se debe
examinar los datos para asegurar que no contienen información sensible. Si existe dicha información, se debe
sobrescribir 'fields()' para filtrarla. En el anterior ejemplo, se filtra 'aut_key', 'password_hash' y
'password_reset_token'.

6
docs/guide-es/structure-modules.md

@ -1,4 +1,4 @@
Módulos
Módulos
=======
Los módulos son unidades de software independientes que consisten en [modelos](structure-models.md),
[vistas](structure-views.md), [controladores](structure-controllers.md), y otros componentes de apoyo. Los usuarios
@ -160,7 +160,7 @@ Dónde ‘MyModuleClass’ hace referencia al nombre de la clase módulo en la q
método devolverá nulo. Hay que tener en cuenta que si se crea una nueva instancia del módulo, esta será diferente a la
creada por Yii en respuesta a la solicitud.
> Información: Cuando se desarrolla un módulo, no se debe dar por sentado que el módulo usará un ID fijo. Esto se debe
> Info: Cuando se desarrolla un módulo, no se debe dar por sentado que el módulo usará un ID fijo. Esto se debe
a que un módulo puede asociarse a un ID arbitrario cuando se usa en una aplicación o dentro de otro módulo. Para
obtener el ID del módulo, primero se debe usar el código del anterior ejemplo para obtener la instancia y luego el
ID mediante ‘$modeule->id’.
@ -234,7 +234,7 @@ En un controlador dentro de un módulo anidado, la ruta debe incluir el ID de to
ejemplo, la ruta ‘forum/admin/dashboard/index’ representa la acción ‘index’ del controlador ‘dashboard’ en el módulo
‘admin’ que es el módulo hijo del módulo ‘forum’.
> Información: El método [[yii\base\Module::getModule()|getModule()]] sólo devuelve el módulo hijo que pertenece
> Info: El método [[yii\base\Module::getModule()|getModule()]] sólo devuelve el módulo hijo que pertenece
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.

2
docs/guide-es/structure-views.md

@ -1,4 +1,4 @@
Vistas
Vistas
======
Las Vistas (views) son una parte de la arquitectura [MVC](http://es.wikipedia.org/wiki/Modelo%E2%80%93vista%E2%80%93controlador).

2
docs/guide-es/structure-widgets.md

@ -1,4 +1,4 @@
Widgets
Widgets
=======
Los Widgets son bloques de código reutilizables utilizados en las [vistas](structure-views.md) para crear elementos de

2
docs/guide-es/tutorial-core-validators.md

@ -37,7 +37,7 @@ Este validador comprueba si el valor de la entrada (input) es booleano.
- `strict`: Si el tipo del valor de la entrada (input) debe corresponder con `trueValue` y `falseValue`. Valor por defecto a `false`.
> 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.
> Note: 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]] <span id="captcha"></span>

2
docs/guide-es/tutorial-yii-integration.md

@ -92,7 +92,7 @@ Si estaba usando Yii 1 previamente, es como si tuvieras una aplicación Yii 1 fu
Esto se puede lograr tal y como se describe abajo.
> Nota: Yii 2 requiere PHP 5.4 o superior. Debes de estar seguro que tanto tu servidor como la aplicación existente lo soportan.
> Note: Yii 2 requiere PHP 5.4 o superior. Debes de estar seguro que tanto tu servidor como la aplicación existente lo soportan.
Primero, instala Yii 2 en tu aplicación siguiendo las instrucciones descritas en la [última subsección](#using-yii-in-others).

5
docs/guide-ja/concept-aliases.md

@ -1,7 +1,10 @@
エイリアス
=======
ファイルパスや URL を表すのにエイリアスを使用すると、あなたはプロジェクト内で絶対パスや URL をハードコードする必要がなくなります。エイリアスは、通常のファイルパスや URL と区別するために、 `@` 文字で始まる必要があります。Yii はすでに利用可能な多くの事前定義エイリアスを持っています。
ファイルパスや URL を表すのにエイリアスを使用すると、あなたはプロジェクト内で絶対パスや URL をハードコードする必要がなくなります。エイリアスは、通常のファイルパスや URL と区別するために、 `@` 文字で始まる必要があります。
先頭に `@` を付けずに定義されたエイリアスは、`@` 文字が先頭に追加されます。
Yii はすでに利用可能な多くの事前定義エイリアスを持っています。
たとえば、 `@yii` というエイリアスは Yii フレームワークのインストールパスを表し、 `@web` は現在実行中の Web アプリケーションのベース URL を表します。

76
docs/guide-ja/concept-events.md

@ -98,7 +98,7 @@ $foo->on(Foo::EVENT_HELLO, function ($event) {
}, $data, false);
```
イベントのトリガ <span id="triggering-events"></span>
イベントのトリガ <span id="triggering-events"></span>
-----------------
イベントは、 [[yii\base\Component::trigger()]] メソッドを呼び出すことでトリガされます。このメソッドには **イベント名** が必須で、
@ -214,7 +214,7 @@ Event::on(ActiveRecord::className(), ActiveRecord::EVENT_AFTER_INSERT, function
```
[[yii\db\ActiveRecord|ActiveRecord]] またはその子クラスのいずれかが、 [[yii\db\BaseActiveRecord::EVENT_AFTER_INSERT|EVENT_AFTER_INSERT]]
をトリガするといつでも、このイベントハンドラが呼び出されます。ハンドラの中では、 `$event->sender` を通して、
をトリガするといつでも、このイベントハンドラが呼び出されます。ハンドラの中では、 `$event->sender` を通して、
イベントをトリガしたオブジェクトを取得することができます。
オブジェクトがイベントをトリガするときは、最初にインスタンスレベルのハンドラを呼び出し、続いてクラスレベルのハンドラとなります。
@ -233,7 +233,7 @@ Event::on(Foo::className(), Foo::EVENT_HELLO, function ($event) {
Event::trigger(Foo::className(), Foo::EVENT_HELLO);
```
この場合、`$event->sender` は、オブジェクトインスタンスではなく、イベントをトリガするクラスの名前を指すことに注意してください。
この場合、`$event->sender` は、オブジェクトインスタンスではなく、イベントをトリガするクラスの名前を指すことに注意してください。
> Note: クラスレベルのハンドラは、そのクラスのあらゆるインスタンス、またはあらゆる子クラスのインスタンスがトリガしたイベントに応答
してしまうため、よく注意して使わなければなりません。 [[yii\base\Object]] のように、クラスが低レベルの基底クラスの場合は特にそうです。
@ -249,6 +249,76 @@ Event::off(Foo::className(), Foo::EVENT_HELLO);
```
インターフェイスを使うイベント <span id="interface-level-event-handlers"></span>
------------------------------
イベントを扱うためには、もっと抽象的な方法もあります。
特定のイベントのために専用のインターフェイスを作っておき、必要な場合にいろいろなクラスでそれを実装するのです。
例えば、次のようなインタフェイスを作ります。
```php
interface DanceEventInterface
{
const EVENT_DANCE = 'dance';
}
```
そして、それを実装する二つのクラスを作ります。
```php
class Dog extends Component implements DanceEventInterface
{
public function meetBuddy()
{
echo "ワン!";
$this->trigger(DanceEventInterface::EVENT_DANCE);
}
}
class Developer extends Component implements DanceEventInterface
{
public function testsPassed()
{
echo "よっしゃ!";
$this->trigger(DanceEventInterface::EVENT_DANCE);
}
}
```
これらのクラスのどれかによってトリガされた `EVENT_DANCE` を扱うためには、インターフェイスの名前を最初の引数にして [[yii\base\Event::on()|Event::on()]] を呼びます。
```php
Event::on('DanceEventInterface', DanceEventInterface::EVENT_DANCE, function ($event) {
Yii::trace($event->sender->className . ' が躍り上がって喜んだ。'); // 犬または開発者が躍り上がって喜んだことをログに記録。
})
```
これらのクラスのイベントをトリガすることも出来ます。
```php
Event::trigger(DanceEventInterface::className(), DanceEventInterface::EVENT_DANCE);
```
ただし、このインタフェイスを実装する全クラスのイベントをトリガすることは出来ない、ということに注意して下さい。
```php
// これは動かない
Event::trigger('DanceEventInterface', DanceEventInterface::EVENT_DANCE); // エラー
```
イベントハンドラをデタッチするためには、[[yii\base\Event::off()|Event::off()]] を呼びます。
例えば、
```php
// $handler をデタッチ
Event::off('DanceEventInterface', DanceEventInterface::EVENT_DANCE, $handler);
// DanceEventInterface::EVENT_DANCE の全てのハンドラをデタッチ
Event::off('DanceEventInterface', DanceEventInterface::EVENT_DANCE);
```
グローバル・イベント <span id="global-events"></span>
-------------

7
docs/guide-ja/db-query-builder.md

@ -208,6 +208,10 @@ $userQuery = (new Query())->select('id')->from('user');
$query->where(['id' => $userQuery]);
```
ハッシュ形式を使う場合、Yii は内部的にパラメータバインディングを使用します。
従って、[文字列形式](#string-format) とは対照的に、ここでは手動でパラメータを追加する必要はありません。
#### 演算子形式 <span id="operator-format"></span>
演算子形式を使うと、任意の条件をプログラム的な方法で指定することが出来ます。
@ -269,6 +273,9 @@ $query->where(['id' => $userQuery]);
- `>`、`<=`、その他、二つのオペランドを取る有効な DB 演算子全て: 最初のオペランドはカラム名、第二のオペランドは値でなければなりません。
例えば、`['>', 'age', 10]` は `age>10` を生成します。
演算子形式を使う場合、Yii は内部的にパラメータバインディングを使用します。
従って、[文字列形式](#string-format) とは対照的に、ここでは手動でパラメータを追加する必要はありません。
#### 条件を追加する <span id="appending-conditions"></span>

2
docs/guide-ja/intro-upgrade-from-v1.md

@ -175,7 +175,7 @@ Prado テンプレートエンジンはもはやサポートされていませ
Yii 2.0 は [[yii\base\Model]] を 1.1 における `CModel` と同様な基底モデルとして使います。
`CFormModel` というクラスは完全に廃止されました。
Yii 2 では、それの代りに [yii\base\Model]] を拡張して、フォームのモデルクラスを作成すべきです。
Yii 2 では、それの代りに [[yii\base\Model]] を拡張して、フォームのモデルクラスを作成すべきです。
Yii 2.0 は サポートされるシナリオを宣言するための [[yii\base\Model::scenarios()|scenarios()]] という新しいメソッドを導入しました。
このメソッドを使って、どのシナリオの下で、ある属性が検証される必要があるか、また、安全とみなされるか否か、などを宣言することが出来ます。

2
docs/guide-ja/output-data-widgets.md

@ -263,7 +263,7 @@ echo GridView::widget([
上記のコードで、`$url` はカラムがボタンのために生成する URL、`$model` は現在の行に表示されるモデルオブジェクト、そして `$key` はデータプロバイダの配列の中にあるモデルのキーです。
- [yii\grid\ActionColumn::urlCreator|urlCreator]] は、指定されたモデルの情報を使って、ボタンの URL を生成するコールバックです。
- [[yii\grid\ActionColumn::urlCreator|urlCreator]] は、指定されたモデルの情報を使って、ボタンの URL を生成するコールバックです。
コールバックのシグニチャは [[yii\grid\ActionColumn::createUrl()]] のそれと同じでなければなりません。
このプロパティが設定されていないときは、ボタンの URL は [[yii\grid\ActionColumn::createUrl()]] を使って生成されます。

1
docs/guide-ja/start-looking-ahead.md

@ -27,6 +27,7 @@ Gii をコード生成に使うと、ウェブ開発のプロセスの大部分
* コミュニティ
- フォーラム: <http://www.yiiframework.com/forum/>
- IRC チャット: freenode ネットワーク (<irc://irc.freenode.net/yii>) の #yii チャンネル
- Gitter チャット: <https://gitter.im/yiisoft/yii2>
- GitHub: <https://github.com/yiisoft/yii2>
- Facebook: <https://www.facebook.com/groups/yiitalk/>
- Twitter: <https://twitter.com/yiiframework>

68
docs/guide-ru/concept-events.md

@ -222,6 +222,74 @@ Event::off(Foo::className(), Foo::EVENT_HELLO, $handler);
Event::off(Foo::className(), Foo::EVENT_HELLO);
```
Обработчики событий на уровне интерфейсов <span id="interface-level-event-handlers"></span>
-------------
Существует еще более абстрактный способ обработки событий.
Вы можете создать отдельный интерфейс для общего события и реализовать его в классах, где это необходимо.
Например, создадим следующий интерфейс:
```php
interface DanceEventInterface
{
const EVENT_DANCE = 'dance';
}
```
И два класса, которые его реализовывают:
```php
class Dog extends Component implements DanceEventInterface
{
public function meetBuddy()
{
echo "Woof!";
$this->trigger(DanceEventInterface::EVENT_DANCE);
}
}
class Developer extends Component implements DanceEventInterface
{
public function testsPassed()
{
echo "Yay!";
$this->trigger(DanceEventInterface::EVENT_DANCE);
}
}
```
Для обработки события `EVENT_DANCE`, инициализированного любым из этих классов,
вызовите [[yii\base\Event::on()|Event:on()]], передав ему в качестве первого параметра имя интерфейса.
```php
Event::on('DanceEventInterface', DanceEventInterface::EVENT_DANCE, function ($event) {
Yii::trace($event->sender->className . ' just danced'); // Оставит запись в журнале о том, что кто-то танцевал
});
```
Вы можете также инициализировать эти события:
```php
Event::trigger(DanceEventInterface::className(), DanceEventInterface::EVENT_DANCE);
```
Однако, невозможно инициализировать событие во всех классах, которые реализуют интерфейс:
```php
// НЕ БУДЕТ РАБОТАТЬ
Event::trigger('DanceEventInterface', DanceEventInterface::EVENT_DANCE); // ошибка
```
Отсоединить обработчик события можно с помощью метода [[yii\base\Event::off()|Event::off()]]. Например:
```php
// отсоединяет $handler
Event::off('DanceEventInterface', DanceEventInterface::EVENT_DANCE, $handler);
// отсоединяются все обработчики DanceEventInterface::EVENT_DANCE
Event::off('DanceEventInterface', DanceEventInterface::EVENT_DANCE);
```
Глобальные события <span id="global-events"></span>
-------------

2
docs/guide-ru/output-theming.md

@ -100,7 +100,7 @@ $file = $theme->getPath('img/logo.gif');
]
```
В этом случае представление `@app/views/site/about.php` темизируется либо в `@app/themes/christmas/site/index.php`,
В этом случае представление `@app/views/site/index.php` темизируется либо в `@app/themes/christmas/site/index.php`,
либо в `@app/themes/basic/site/index.php` в зависимости от того, в какой из тем есть нужный файл. Если файлы присутствуют
и там и там, используется первый из них. На практике большинство темизированных файлов будут расположены
в `@app/themes/basic`, а их версии для праздников в `@app/themes/christmas`.

28
docs/guide-ru/security-authentication.md

@ -1,21 +1,21 @@
Аутентификация
==============
Аутентификация - это процесс проверки подлинности пользователя. Обычно используется идентификатор
(например `username` или адрес электронной почты) и секретный токен (например пароль или ключ доступа), чтобы судить о
том что пользователь именно тот за кого себя выдаёт. Аутентификация является основной функцией формы входа.
Аутентификация это процесс проверки подлинности пользователя. Обычно используется идентификатор
(например, `username` или адрес электронной почты) и секретный токен (например, пароль или ключ доступа), чтобы судить о
том, что пользователь именно тот, за кого себя выдаёт. Аутентификация является основной функцией формы входа.
Yii обеспечивает фреймворк авторизации с различными компонентами, обеспечивающими процесс входа.
Для использования этого фреймворка, вам нужно проделать следующее:
* Настроить компонент приложения [[yii\web\User|user]];
* Создать класс реализующими интерфейс [[yii\web\IdentityInterface]].
* Создать класс, реализующий интерфейс [[yii\web\IdentityInterface]].
## Настройка [[yii\web\User]] <span id="configuring-user"></span>
Компонент [[yii\web\User|user]] управляет статусом аутентификации пользователя.
Он требует, чтоб вы указали [[yii\web\User::identityClass|identity class]], который будет содержать
Он требует, чтобы вы указали [[yii\web\User::identityClass|identity class]], который будет содержать
текущую логику аутентификации. В следующей конфигурации приложения, [[yii\web\User::identityClass|identity class]] для
[[yii\web\User|user]] задан как `app\models\User`, реализация которого будет объяснена в следующем разделе:
@ -118,7 +118,7 @@ class User extends ActiveRecord implements IdentityInterface
```
Как объяснялось ранее, вам нужно реализовать только `getAuthKey()` и `validateAuthKey()`, если ваше приложение использует
только аутентификацию основанную на `cookie`. В этом случае, вы можете использовать следующий код для генерации
только аутентификацию основанную на `cookie`. В этом случае вы можете использовать следующий код для генерации
ключа аутентификации для каждого пользователя и хранения его в таблице `user`:
```php
@ -139,9 +139,9 @@ class User extends ActiveRecord implements IdentityInterface
}
```
> Замечание: Не путайте `identity` класс `User` с классом [[yii\web\User]]. Первый является классом реализующим
логику аутентификации пользователя. Он часто реализуется как класс [Active Record](db-active-record.md) связанный
с некоторым постоянным хранилищем, где лежит информация о пользователях. Второй, это класс компонента приложения,
> Замечание: Не путайте `identity` класс `User` с классом [[yii\web\User]]. Первый является классом, реализующим
логику аутентификации пользователя. Он часто реализуется как класс [Active Record](db-active-record.md), связанный
с некоторым постоянным хранилищем, где лежит информация о пользователях. Второй это класс компонента приложения,
отвечающий за управление состоянием аутентификации пользователя.
@ -151,7 +151,7 @@ class User extends ActiveRecord implements IdentityInterface
Можно получить `identity` текущего пользователя, используя выражение `Yii::$app->user->identity`. Оно вернёт экземпляр
[[yii\web\User::identityClass|identity class]], представляющий текущего аутентифицированного пользователя,
или `null`, если текущий пользователь не аутентифицирован (например гость). Следующий код показывает как получить
или `null`, если текущий пользователь не аутентифицирован (например, гость). Следующий код показывает как получить
другую связанную с аутентификацией информацию из [[yii\web\User]]:
```php
@ -180,9 +180,9 @@ Yii::$app->user->login($identity);
[[yii\web\User::enableSession|включены]], то `identity` будет сохраняться в сессии, так что состояние
статуса аутентификации будет поддерживаться на всём протяжении сессии. Если основанный на cookie вход
(так называемый "запомни меня" вход) [[yii\web\User::enableAutoLogin|включен]], то `identity` также будет сохранена
в `cookie` так чтобы статус аутентификации пользователя может быть восстановлен на протяжении всего времени жизни `cookie`.
в `cookie` так, чтобы статус аутентификации пользователя мог быть восстановлен на протяжении всего времени жизни `cookie`.
Для включения входа основанного на `cookie`, вам нужно установить [[yii\web\User::enableAutoLogin]] в `true`
Для включения входа, основанного на `cookie`, вам нужно установить [[yii\web\User::enableAutoLogin]] в `true`
в конфигурации приложения. Вы также можете настроить время жизни, передав его при вызове метода [[yii\web\User::login()]].
Для выхода пользователя, просто вызовите
@ -209,6 +209,6 @@ Yii::$app->user->logout();
процесс выхода будет прерван.
* [[yii\web\User::EVENT_AFTER_LOGOUT|EVENT_AFTER_LOGOUT]]: вызывается после успешного выхода.
Вы можете использовать эти события для реализации функции аудита входа, статистике онлайн пользователей. Для примера,
в обработчике для [[yii\web\User::EVENT_AFTER_LOGIN|EVENT_AFTER_LOGIN]], вы можете сделать запись о времени и IP
Вы можете использовать эти события для реализации функции аудита входа, статистики онлайн пользователей. Например,
в обработчике для [[yii\web\User::EVENT_AFTER_LOGIN|EVENT_AFTER_LOGIN]] вы можете сделать запись о времени и IP
адресе входа в таблицу `user`.

60
docs/guide-ru/security-authorization.md

@ -3,19 +3,19 @@
> Note: этот раздел находится на стадии разработки.
Авторизация это процесс проверки того, что пользователь имеет достаточно прав чтобы что-то сделать. Yii обеспечивает два
метода авторизации: Фильтры контроля доступа (ACF) и контроль доступа основанный на ролях (RBAC).
Авторизация это процесс проверки того, что пользователь имеет достаточно прав чтобы что-то сделать. Yii обеспечивает два
метода авторизации: фильтры контроля доступа (ACF) и контроль доступа на основе ролей (RBAC).
Фильтры контроля доступа
------------------------
Фильтры контроля доступа (ACF) являются простым методом, который лучше всего использовать в приложениях с простым
контролем доступа. Как указывает его название, ACF это фильтры, который может присоединяться к контроллеру
или модулю как поведение. ACF проверяет набор [[yii\filters\AccessControl::rules|правил доступа]], чтобы убедится,
контролем доступа. Как указывает его название, ACF — это фильтры, которые могут присоединяться к контроллеру
или модулю как поведение. ACF проверяет набор [[yii\filters\AccessControl::rules|правил доступа]], чтобы убедиться,
что пользователь имеет доступ к запрошенной операции.
Код ниже показывает как использовать ACF реализованный в [[yii\filters\AccessControl]]:
Код ниже показывает как использовать ACF, реализованный в [[yii\filters\AccessControl]]:
```php
use yii\filters\AccessControl;
@ -76,20 +76,20 @@ class SiteController extends Controller
]
```
[[yii\filters\AccessRule|Правила доступа]] поддерживают набор свойств. Ниже краткое описание поддерживаемых опций.
[[yii\filters\AccessRule|Правила доступа]] поддерживают набор свойств. Ниже дано краткое описание поддерживаемых опций.
Вы также можете расширить [[yii\filters\AccessRule]], чтобы создать свой собственный класс правил доступа.
* [[yii\filters\AccessRule::allow|allow]]: задаёт какое это правило, "allow" или "deny".
* [[yii\filters\AccessRule::actions|actions]]: задаёт действия соответствующие этому правилу.
Значение должно быть массивом идентификаторов действий. Сравнение регисрозависимо. Если свойство пустое или не задано,
* [[yii\filters\AccessRule::actions|actions]]: задаёт действия, соответствующие этому правилу.
Значение должно быть массивом идентификаторов действий. Сравнение регистрозависимо. Если свойство пустое или не задано,
то правило применяется ко всем действиям.
* [[yii\filters\AccessRule::controllers|controllers]]: задаёт контроллеры, которым соответствует правило.
Значение должно быть массивом с идентификаторами контроллеров. Сравнение регисрозависимо. Если свойство
пустое или не задано, то правило применяется ко всем действиям.
Значение должно быть массивом с идентификаторами контроллеров. Сравнение регистрозависимо. Если свойство
пустое или не задано, то правило применяется ко всем контроллерам.
* [[yii\filters\AccessRule::roles|roles]]: задаёт роли пользователей соответствующих этому правилу.
* [[yii\filters\AccessRule::roles|roles]]: задаёт роли пользователей, соответствующих этому правилу.
Распознаются две специальные роли, которые проверяются с помощью [[yii\web\User::isGuest]]:
- `?`: соответствует гостевому пользователю (не аутентифицирован)
@ -104,12 +104,12 @@ class SiteController extends Controller
то правило применяется ко всем IP адресам.
* [[yii\filters\AccessRule::verbs|verbs]]: задаёт http метод (например `GET`, `POST`) соответствующий правилу.
Сравнение регисронезависимо.
Сравнение регистронезависимо.
* [[yii\filters\AccessRule::matchCallback|matchCallback]]: задаёт PHP колбек, который вызывается для определения,
что правило должно быть применено.
* [[yii\filters\AccessRule::denyCallback|denyCallback]]: задаёт PHP колбек, который будет вызван если доступ будет
* [[yii\filters\AccessRule::denyCallback|denyCallback]]: задаёт PHP колбек, который будет вызван, если доступ будет
запрещён при вызове этого правила.
Ниже показан пример, показывающий использование опции `matchCallback`, которая позволяет писать произвольную
@ -158,7 +158,7 @@ class SiteController extends Controller
Yii реализует общую иерархическую RBAC, следуя [NIST RBAC model](http://csrc.nist.gov/rbac/sandhu-ferraiolo-kuhn-00.pdf).
Обеспечивается функциональность RBAC через [компонент приложения](structure-application-components.md) [[yii\rbac\ManagerInterface|authManager]].
Использование RBAC состоит из двух частей. Первая часть - это создание RBAC данных авторизации, и вторая часть - это
Использование RBAC состоит из двух частей. Первая часть — это создание RBAC данных авторизации, и вторая часть — это
использование данных авторизации для проверки доступа в том месте, где это нужно.
Для облегчения последующего описания, мы сначала введём некоторые основные понятия RBAC.
@ -166,7 +166,7 @@ Yii реализует общую иерархическую RBAC, следуя
### Основные концепции
Роль представляет собой набор разрешений (*permissions*) (например создание сообщения, обновление сообщения).
Роль представляет собой набор разрешений (*permissions*) (например, создание сообщения, обновление сообщения).
Роль может быть назначена на одного или многих пользователей. Чтобы проверить, имеет ли пользователь указанные
разрешения, мы должны проверить назначена ли пользователю роль, которая содержит данное разрешение.
@ -176,7 +176,7 @@ Yii реализует общую иерархическую RBAC, следуя
текущий пользователь автором поста. Во время проверки доступа, если пользователь не является автором поста, он/она будет
считаться не имеющими разрешения "обновление поста".
И роли и разрешения могут быть организованы в иерархию. В частности роль может содержать другие роли или разрешения; и
И роли, и разрешения могут быть организованы в иерархию. В частности, роль может содержать другие роли или разрешения; и
разрешения могут содержать другие разрешения. Yii реализует *частично упорядоченную* иерархию, которая включает в себя
специальные *деревья* иерархии. Роль может содержать разрешение, но обратное не верно.
@ -186,10 +186,10 @@ Yii реализует общую иерархическую RBAC, следуя
Перед определением авторизационных данных и проверкой прав доступа, мы должны настроить компонент приложения
[[yii\base\Application::authManager|authManager]]. Yii предоставляет два типа менеджеров авторизации:
[[yii\rbac\PhpManager]] и [[yii\rbac\DbManager]]. Первый использует файл с PHP скриптом для хранения данных авторизации,
второй сохраняет данные в базе данных. Вы можете использовать первый если ваше приложение не требует слишком динамичного
второй сохраняет данные в базе данных. Вы можете использовать первый, если ваше приложение не требует слишком динамичного
управления ролями и разрешениями.
#### настройка authManager с помощью `PhpManager`
#### Настройка authManager с помощью `PhpManager`
Следующий код показывает как настроить в конфигурации приложения `authManager` с использованием класса [[yii\rbac\PhpManager]]:
@ -210,7 +210,7 @@ return [
> Замечание: По умолчанию, [[yii\rbac\PhpManager]] сохраняет данные RBAC в файлах в директории `@app/rbac/`. Убедитесь
что данная директория и файлы в них доступны для записи Web серверу, если иерархия разрешений должна меняться онлайн.
#### настройка authManager с помощью `DbManager`
#### Настройка authManager с помощью `DbManager`
Следующий код показывает как настроить в конфигурации приложения `authManager` с использованием класса [[yii\rbac\DbManager]]:
@ -339,9 +339,9 @@ public function signup()
### Использование правил
Как упомянуто выше, правила добавляют дополнительные ограничения на роли и разрешения. Правила это классы, расширяющие
Как упомянуто выше, правила добавляют дополнительные ограничения на роли и разрешения. Правила это классы, расширяющие
[[yii\rbac\Rule]]. Они должны реализовывать метод [[yii\rbac\Rule::execute()|execute()]]. В иерархии, созданной нами ранее,
автор не может редактировать свой пост. Давайте исправим это. Во-первых, мы должны создать правило проверяющее,
автор не может редактировать свой пост. Давайте исправим это. Сначала мы должны создать правило, проверяющее
что пользователь является автором поста:
```php
@ -350,7 +350,7 @@ namespace app\rbac;
use yii\rbac\Rule;
/**
* Проверяем authorID на соответствие с пользователем переданным через параметры
* Проверяем authorID на соответствие с пользователем, переданным через параметры
*/
class AuthorRule extends Rule
{
@ -398,7 +398,7 @@ $auth->addChild($author, $updateOwnPost);
### Проверка доступа
С готовыми авторизационными данными, проверка доступа - это просто вызов метода [[yii\rbac\ManagerInterface::checkAccess()]].
С готовыми авторизационными данными проверка доступа — это просто вызов метода [[yii\rbac\ManagerInterface::checkAccess()]].
Так как большинство проверок доступа относятся к текущему пользователю, для удобства Yii предоставляет сокращённый метод
[[yii\web\User::can()]], который можно использовать как показано ниже:
@ -435,10 +435,10 @@ if (\Yii::$app->user->can('updatePost', ['post' => $post])) {
### Использование роли по умолчанию
Роль по умолчанию - это роль, которая *неявно* присваивается *всем* пользователям. Вызов метода
Роль по умолчанию это роль, которая *неявно* присваивается *всем* пользователям. Вызов метода
[[yii\rbac\ManagerInterface::assign()]] не требуется, и авторизационные данные не содержат информации о назначении.
Роль по умолчанию обычно связывают с правилом определяющим к какой роли принадлежит каждый пользователь.
Роль по умолчанию обычно связывают с правилом, определяющим к какой роли принадлежит каждый пользователь.
Роли по умолчанию обычно используются в приложениях, которые уже имеют какое-то описание ролей. Для примера, приложение
может иметь столбец "group" в таблице пользователей, и каждый пользователь принадлежит к какой-то группе. Если каждая
@ -446,7 +446,7 @@ if (\Yii::$app->user->can('updatePost', ['post' => $post])) {
каждому пользователю роли RBAC. Давайте используем пример, чтобы понять как это можно сделать.
Предположим что в таблице пользователей у вас есть столбец `group`, в котором значение 1 представляет группу "администратор",
а 2 - группу "автор". Вы планируете иметь две RBAC роли `admin` и `author`, представляющие разрешения для двух
а 2 группу "автор". Вы планируете иметь две RBAC роли `admin` и `author`, представляющие разрешения для двух
соответствующих групп. Вы можете настроить данные роли как показано ниже.
```php
@ -494,7 +494,7 @@ $auth->addChild($admin, $author);
```
Обратите внимание, так как "author" добавлен как дочерняя роль к "admin", следовательно в реализации метода `execute()`
класса правила вы должны учитывать эту иерархию. Именно по этому для роли "author" метод `execute()` вернёт истину,
класса правила вы должны учитывать эту иерархию. Именно поэтому для роли "author" метод `execute()` вернёт истину,
если пользователь принадлежит к группам 1 или 2 (это означает, что пользователь находится в группе
администраторов или авторов)
@ -513,7 +513,7 @@ return [
];
```
Теперь, если вы выполните проверку доступа, для обоих ролей `admin` и `author` будет выполнена проверка правила
Теперь, если вы выполните проверку доступа, для обоих ролей `admin` и `author` будет выполнена проверка правила,
асоциированного с ними. Если правило вернёт истину, это будет означать что роль применяется к текущему пользователю.
На основании правила, реализованного выше, если пользователь входит в группу 1 пользователю будет назначена роль `admin`;
и если значение `group` равно 2 будет применена роль `author`.
На основании правила, реализованного выше, если пользователь входит в группу 1, пользователю будет назначена роль `admin`;
и если значение `group` равно 2, будет применена роль `author`.

1
docs/guide-ru/start-looking-ahead.md

@ -27,6 +27,7 @@
которые могут быть легко подключены в ваши приложения и сделать разработку приложений ещё быстрее и проще.
* Сообщество
- [Форум](http://www.yiiframework.com/forum/)
- [Чат Gitter](https://gitter.im/yiisoft/yii2/rus)
- [GitHub](https://github.com/yiisoft/yii2)
- [Facebook](https://www.facebook.com/groups/yiitalk/)
- [Twitter](https://twitter.com/yiiframework)

2
docs/guide-ru/tutorial-yii-integration.md

@ -1,4 +1,4 @@
Работа со сторонним кодом
Работа со сторонним кодом
=============================
Иногда необходимо использовать сторонний код в приложениях Yii. Или же есть потребность использовать Yii в качестве библиотеки в сторонних системах. В этом разделе мы рассмотрим, как это происходит.

6
docs/guide-uk/blocktypes.json

@ -0,0 +1,6 @@
{
"Warning:": "Увага:",
"Note:": "Примітка:",
"Info:": "Інформація:",
"Tip:": "Підказка:"
}

4
docs/guide-uk/concept-aliases.md

@ -20,7 +20,7 @@ Yii::setAlias('@foo', '/path/to/foo');
Yii::setAlias('@bar', 'http://www.example.com');
```
> Примітка: псевдонім шляху до файлу або URL *не* обовʼязково вказує на наявний файл або ресурс.
> Note: псевдонім шляху до файлу або URL *не* обовʼязково вказує на наявний файл або ресурс.
Використовуючи вже заданий псевдонім, ви можете отримати на основі нього новий (без виклику [[Yii::setAlias()]]),
додавши в його кінець `/`, за яким слідує один або більше сегментів шляху. Псевдоніми, визначені за допомогою
@ -64,7 +64,7 @@ echo Yii::getAlias('@foo/bar/file.php'); // виведе: /path/to/foo/bar/file
Шлях або URL, представлений похідним псевдонімом, визначається шляхом заміни в ньому частині, що відповідає кореневого псевдоніму,
на відповідний йому шлях або URL.
> Примітка: Метод [[Yii::getAlias()]] не перевіряє фактичного існування одержуваного шляху або URL.
> Note: Метод [[Yii::getAlias()]] не перевіряє фактичного існування одержуваного шляху або URL.
Кореневий псевдонім може містити знаки `/`. При цьому метод [[Yii::getAlias()]] коректно визначить, яка частина
псевдоніма є кореневої і вірно сформує шлях або URL:

6
docs/guide-uk/concept-autoloading.md

@ -7,7 +7,7 @@
[PSR-4](https://github.com/php-fig/fig-standards/blob/master/proposed/psr-4-autoloader/psr-4-autoloader.md),
який встановлюється в момент підключення файлу `Yii.php`.
> Примітка: Для простоти опису, в цьому розділі ми будемо говорити тільки про автозавантаження класів.
> Note: Для простоти опису, в цьому розділі ми будемо говорити тільки про автозавантаження класів.
Тим не менш, все описане також стосується до інтерфейсів і трейтів.
@ -76,8 +76,8 @@ require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
Ви можете використовувати автозавантажувач Composer без автозавантажувачa Yii, однак, швидкість автозавантаження в
цьому випадку може зменшиться. До того ж вам буде необхідно слідувати правилам автозавантажувача Composer.
> Інформація: Якщо ви не хочете використовувати автозавантажувач Yii, створіть свою версію файлу `Yii.php`
і підключіть його у [вхідному скрипті](structure-entry-scripts.md).
> Info: Якщо ви не хочете використовувати автозавантажувач Yii, створіть свою версію файлу `Yii.php`
і підключіть його у [вхідному скрипті](structure-entry-scripts.md).
Автозавантаження класів розширень <span id="autoloading-extension-classes"></span>

16
docs/guide-uk/start-databases.md

@ -75,9 +75,9 @@ return [
З’єднання з БД, описане вище, може бути доступне в коді додатка за допомогою виразу `Yii::$app->db`.
> Інформація: Файл конфігурації `config/db.php` буде включений до конфігурації головного додатка `config/web.php`,
який визначає як має бути проініціалізований екземпляр [додатку](structure-applications.md).
Для отримання додаткової інформації, будь ласка, зверніться до розділу [Конфігурації](concept-configurations.md).
> Info: Файл конфігурації `config/db.php` буде включений до конфігурації головного додатка `config/web.php`,
який визначає як має бути проініціалізований екземпляр [додатку](structure-applications.md).
Для отримання додаткової інформації, будь ласка, зверніться до розділу [Конфігурації](concept-configurations.md).
Створення Active Record <span id="creating-active-record"></span>
@ -101,8 +101,8 @@ class Country extends ActiveRecord
Клас `Country` наслідує [[yii\db\ActiveRecord]]. Вам не потрібно писати ніякого коду всередині нього!
Всього лише за допомогою описаного вище коду, Yii самостійно вгадає відповідне імʼя таблиці з імені класу.
> Інформація: Якщо неможливо отримати прямої відповідності імені класу до імені таблиці, ви можете
перевизначити метод [[yii\db\ActiveRecord::tableName()]], щоб точно задати відповідне імʼя таблиці.
> Info: Якщо неможливо отримати прямої відповідності імені класу до імені таблиці, ви можете
перевизначити метод [[yii\db\ActiveRecord::tableName()]], щоб точно задати відповідне імʼя таблиці.
Використовуючи клас `Country`, ви можете легко маніпулювати даними з таблиці `country`, як показано у цих фрагментах коду:
@ -123,9 +123,9 @@ $country->name = 'U.S.A.';
$country->save();
```
> Інформація: Active Record є потужним засобом для доступу і управління даними бази даних в обʼєктно-орієнтованому стилі.
Ви можете знайти більш детальну інформацію в розділі [Active Record](db-active-record.md). Крім того, ви також можете
взаємодіяти з базою даних, використовуючи для доступу метод передачі даних нижнього рівня під назвою [Data Access Objects](db-dao.md).
> Info: Active Record є потужним засобом для доступу і управління даними бази даних в обʼєктно-орієнтованому стилі.
Ви можете знайти більш детальну інформацію в розділі [Active Record](db-active-record.md). Крім того, ви також можете
взаємодіяти з базою даних, використовуючи для доступу метод передачі даних нижнього рівня під назвою [Data Access Objects](db-dao.md).
Створення дії <span id="creating-action"></span>

36
docs/guide-uk/start-forms.md

@ -48,8 +48,8 @@ class EntryForm extends Model
Даний клас успадкований від класу [[yii\base\Model]], який є складовою частиною фреймворку і зазвичай використовується для
роботи з даними форм.
> Інформація: Клас [[yii\base\Model]] використовується як батьківський клас для класів моделей, які *не* асоційовані з таблицями бази даних.
Клас [[yii\db\ActiveRecord]] зазвичай є батьківським для класів моделей, що відповідають таблицям бази даних.
> Info: Клас [[yii\base\Model]] використовується як батьківський клас для класів моделей, які *не* асоційовані з таблицями бази даних.
Клас [[yii\db\ActiveRecord]] зазвичай є батьківським для класів моделей, що відповідають таблицям бази даних.
Клас `EntryForm` містить дві публічні властивості `name` та `email`, які використовуються для зберігання
даних, вказаних користувачем. Він також містить метод `rules()`, який повертає набір
@ -119,18 +119,18 @@ class SiteController extends Controller
Якщо модель успішно заповнена, тобто користувач відправив дані з HTML-форми,
то для перевірки даних буде викликаний метод [[yii\base\Model::validate()|validate()]].
> Інформація: `Yii::$app` являє собою глобально доступний екземпляр-одинак [додатка](structure-applications.md)
(singleton). Одночасно це є [Service Locator](concept-service-locator.md), який
надає компоненти, типу `request`, `response`, `db` і так далі для доступу до специфічної функціональності.
У вищезазначеному коді для доступу до даних з `$_POST` був використаний компонент екземпляру додатка `request`.
> Info: `Yii::$app` являє собою глобально доступний екземпляр-одинак [додатка](structure-applications.md)
(singleton). Одночасно це є [Service Locator](concept-service-locator.md), який
надає компоненти, типу `request`, `response`, `db` і так далі для доступу до специфічної функціональності.
У вищезазначеному коді для доступу до даних з `$_POST` був використаний компонент екземпляру додатка `request`.
Якщо все гаразд, дія зобразить представлення `entry-confirm`, яке покаже користувачу вказані ним дані.
Якщо дані не передані або містять помилки, буде зображено представлення `entry` з
HTML-формою та повідомленнями про присутні помилки перевірки даних.
> Примітка: У цьому дуже простому прикладі ми просто відобразили сторінку підтвердження відправлення даних. На практиці,
ви повинні розглянути використання [[yii\web\Controller::refresh()|refresh()]] або [[yii\web\Controller::redirect()|redirect()]]
для уникнення [проблеми повторного відправлення даних форми](http://en.wikipedia.org/wiki/Post/Redirect/Get).
> Note: У цьому дуже простому прикладі ми просто відобразили сторінку підтвердження відправлення даних. На практиці,
ви повинні розглянути використання [[yii\web\Controller::refresh()|refresh()]] або [[yii\web\Controller::redirect()|redirect()]]
для уникнення [проблеми повторного відправлення даних форми](http://en.wikipedia.org/wiki/Post/Redirect/Get).
Створення представлення <span id="creating-views"></span>
@ -191,8 +191,8 @@ http://hostname/index.php?r=site/entry
```
Ви побачите сторінку з формою і двома полями для заповнення. Перед кожним полем є надпис, який вказує, яку саме
інформацію слід вказувати. Якщо ви натиснете на кнопку відправлення даних без самих даних або якщо вкажете адресу електронної пошти в невірному
форматі, то ви побачите повідомлення про помилку біля кожного проблемного поля.
інформацію слід вказувати. Якщо ви натиснете на кнопку відправлення даних без самих даних або якщо вкажете адресу
електронної пошти в невірному форматі, то ви побачите повідомлення про помилку біля кожного проблемного поля.
![Форма з помилками перевірки](images/start-form-validation.png)
@ -213,11 +213,11 @@ http://hostname/index.php?r=site/entry
На випадок, якщо в браузері буде вимкнено JavaScript перевірка проходить і на стороні сервера, як показано в методі
`actionEntry()`. Це дає впевненість в тому, що дані коректні за будь-яких обставин.
> Попередження: Перевірка даних на стороні клієнта - це зручність, яка забезпечує краще сприйняття користувачем.
Перевірка на стороні сервера завжди обов’язкова, не зважаючи на клієнтську.
> Warning: Перевірка даних на стороні клієнта - це зручність, яка забезпечує краще сприйняття користувачем.
Перевірка на стороні сервера завжди обов’язкова, не зважаючи на клієнтську.
Підписи для полів генеруються методом `field()`, на основі імен властивостей моделі. Наприклад, підпис `Name` генерується
для властивості `name`.
Підписи для полів генеруються методом [[yii\widgets\ActiveForm::field()|field()]], на основі імен властивостей моделі.
Наприклад, підпис `Name` генерується для властивості `name`.
Ви можете модифікувати підписи в межах представлення
наступним чином:
@ -227,9 +227,9 @@ http://hostname/index.php?r=site/entry
<?= $form->field($model, 'email')->label('Ваша адреса електронної пошти') ?>
```
> Інформація: У Yii є велика кількість віджетів, які дозволяють швидко будувати складні та динамічні представлення.
Як ви дізнаєтесь пізніше, розробляти нові віджети доволі просто. Багато із представлень можна винести у віджети,
щоб використовувати їх повторно в інших частинах і тим самим спростити розробку в майбутньому.
> Info: У Yii є велика кількість віджетів, які дозволяють швидко будувати складні та динамічні представлення.
Як ви дізнаєтесь пізніше, розробляти нові віджети доволі просто. Багато із представлень можна винести у віджети,
щоб використовувати їх повторно в інших частинах і тим самим спростити розробку в майбутньому.
Підсумок <span id="summary"></span>
--------

11
docs/guide-uk/start-gii.md

@ -49,9 +49,8 @@ defined('YII_ENV') or define('YII_ENV', 'dev');
http://hostname/index.php?r=gii
```
> Примітка: Якщо ви звертаєтесь до Gii від не локальної машини, доступ буде заборонений за замовчуванням із міркувань
безпеки. Ви можете налаштувати Gii, додавши дозволені IP-адреси, як показано нижче:
>
> Note: Якщо ви звертаєтесь до Gii від не локальної машини, доступ буде заборонений за замовчуванням із міркувань
безпеки. Ви можете налаштувати Gii, додавши дозволені IP-адреси, як показано нижче
```php
'gii' => [
'class' => 'yii\gii\Module',
@ -133,9 +132,9 @@ http://hostname/index.php?r=country/index
* Моделі: `models/Country.php` і `models/CountrySearch.php`
* Представлення: `views/country/*.php`
> Інформація: Gii - це гнучкий і розширюваний інструмент для генерування коду. При правильному використані, він дозволить
вам значно прискорити розробку ваших додатків. Для більш докладної інформації, будь ласка, зверніться до розділу
[Gii](https://github.com/yiisoft/yii2-gii/blob/master/docs/guide-uk/README.md).
> Info: Gii - це гнучкий і розширюваний інструмент для генерування коду. При правильному використані, він дозволить
вам значно прискорити розробку ваших додатків. Для більш докладної інформації, будь ласка, зверніться до розділу
[Gii](https://github.com/yiisoft/yii2-gii/blob/master/docs/guide-uk/README.md).
Підсумок <span id="summary"></span>

20
docs/guide-uk/start-hello.md

@ -23,8 +23,8 @@
відсутній параметр `message`, то дія буде відображати "Привіт".
> Інформація: [Дії](structure-controllers.md#creating-actions) являються об’єктами, на які користувач може посилатись для
виконання. Дії згруповані в [контролери](structure-controllers.md). Результатом виконання
дії є відповідь, яку отримує користувач.
виконання. Дії згруповані в [контролери](structure-controllers.md). Результатом виконання
дії є відповідь, яку отримує користувач.
Дії повинні оголошуватись в [контролерах](structure-controllers.md). Для простоти, ви можете
оголосити дію `say` в уже наявному контролері `SiteController`, який визначений
@ -112,9 +112,9 @@ http://hostname/index.php?r=site/say&message=Привіт+світ
Якщо ви не вкажете параметр `message` в URL, то побачите на сторінці лише "Привіт". Це відбувається тому, що `message` передається як параметр в метод `actionSay()`, а коли він не вказаний,
використовується значення за замовчуванням "Привіт".
> Інформація: Нова сторінка використовує ту ж шапку та футер, що й решта сторінок, тому що метод [[yii\web\Controller::render()|render()]]
автоматично підставляє результат формування представлення `say` в, так званий, [макет](structure-views.md#layouts), який в даному
випадку розміщено у `views/layouts/main.php`.
> Info: Нова сторінка використовує ту ж шапку та футер, що й решта сторінок, тому що метод [[yii\web\Controller::render()|render()]]
автоматично підставляє результат формування представлення `say` в, так званий, [макет](structure-views.md#layouts), який в даному
випадку розміщено у `views/layouts/main.php`.
Параметр `r` у вищезазначеному URL потребує додаткових пояснень. Він вказує [маршрут](runtime-routing.md), що являє собою унікальний для додатка ідентифікатор,
який вказує на дію. Його формат `ControllerID/ActionID`. Коли додаток отримує запит,
@ -124,11 +124,11 @@ http://hostname/index.php?r=site/say&message=Привіт+світ
буде відповідати контролеру `SiteController` і його дії `say`. В результаті,
для опрацювання запиту буде викликано метод `SiteController::actionSay()`.
> Інформація: Як і дії, контролери також мають ідентифікатори, котрі однозначно визначають їх в додатку.
Ідентифікатори контролерів використовують ті ж самі правила іменування, що і ідентифікатори дій. Імена класів контролерів
отримуються шляхом видалення дефісів з ідентифікатора, перетворення першої літери кожного слова у верхній регістр
і додавання в кінець слова `Controller`. Наприклад, ідентифікатор контролера `post-comment` відповідає
імені класу контролера `PostCommentController`.
> Info: Як і дії, контролери також мають ідентифікатори, котрі однозначно визначають їх в додатку.
Ідентифікатори контролерів використовують ті ж самі правила іменування, що і ідентифікатори дій. Імена класів контролерів
отримуються шляхом видалення дефісів з ідентифікатора, перетворення першої літери кожного слова у верхній регістр
і додавання в кінець слова `Controller`. Наприклад, ідентифікатор контролера `post-comment` відповідає
імені класу контролера `PostCommentController`.
Підсумок <span id="summary"></span>

37
docs/guide-uk/start-installation.md

@ -13,7 +13,7 @@
[Розширений шаблон проекту](https://github.com/yiisoft/yii2-app-advanced/blob/master/docs/guide-uk/README.md), який краще використовувати у середовищі розробки в команді
для розробки складних додатків.
> Інформація: Базовий шаблон проекту підходить для розробки 90 відсотків веб-додатків. Він відрізняється
> Info: Базовий шаблон проекту підходить для розробки 90 відсотків веб-додатків. Він відрізняється
від Розширеного шаблону проекту в основному організацією коду. Якщо ви малознайомі з Yii, наполегливо
рекомендується використовувати Базовий шаблон проекту із-за його простоти, але й достатньої функціональності.
@ -24,8 +24,10 @@
Якщо у вас все ще не встановлено Composer, то це можна зробити за допомогою інструкції на
[getcomposer.org](https://getcomposer.org/download/). Користувачам Linux та Mac OS X потрібно виконати наступні команди:
```bash
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
```
При роботі з Windows, необхідно завантажити та запустити [Composer-Setup.exe](https://getcomposer.org/Composer-Setup.exe).
@ -37,26 +39,29 @@
Після встановлення Composer, встановити Yii можна виконавши наступну команду з директорії, яка доступна через Web:
```bash
composer global require "fxp/composer-asset-plugin:~1.1.1"
composer create-project --prefer-dist yiisoft/yii2-app-basic basic
```
Перша команда встановить [плагін ресурсів composer (composer-asset-plugin)](https://github.com/francoispluchino/composer-asset-plugin/),
що дозволить керувати залежностями пакунків Bower та NPM за допомогою Composer. Цю команду потрібно виконати лише
один раз. Друга команда встановить Yii у директорію під назвою `basic`. За бажанням, ви можете обрати інше ім’я для директорії.
> Примітка: Під час встановлення може статися так, що Composer запитає облікові дані від вашого профілю на GitHub,
> через встановлені обмеження запитів GitHub API. Це є нормальним, оскільки Composer повинен отримати багато інформації
> для всіх пакунків із GitHub. Надання облікових даних профілю GitHub збільшить кількість запитів до API, потрібних для
> подальшої роботи Composer. Для більш детальної інформації, будь ласка, зверніться до
> [документації Composer](https://getcomposer.org/doc/articles/troubleshooting.md#api-rate-limit-and-oauth-tokens).
> Note: Під час встановлення може статися так, що Composer запитає облікові дані від вашого профілю на GitHub,
через встановлені обмеження запитів GitHub API. Це є нормальним, оскільки Composer повинен отримати багато інформації
для всіх пакунків із GitHub. Надання облікових даних профілю GitHub збільшить кількість запитів до API, потрібних для
подальшої роботи Composer. Для більш детальної інформації, будь ласка, зверніться до
[документації Composer](https://getcomposer.org/doc/articles/troubleshooting.md#api-rate-limit-and-oauth-tokens).
> Підказка: Якщо ви хочете встановити останню нестабільну версію Yii, ви можете виконати наступну команду,
> яка додає опцію [stability](https://getcomposer.org/doc/04-schema.md#minimum-stability):
>
> composer create-project --prefer-dist --stability=dev yiisoft/yii2-app-basic basic
>
> Варто зауважити, що нестабільну версію Yii не можна використовувати на робочому сервері, оскільки вона може порушити
> виконання робочого коду.
> Tip: Якщо ви хочете встановити останню нестабільну версію Yii, ви можете виконати наступну команду,
яка додає опцію [stability](https://getcomposer.org/doc/04-schema.md#minimum-stability):
```bash
composer create-project --prefer-dist --stability=dev yiisoft/yii2-app-basic basic
```
Варто зауважити, що нестабільну версію Yii не можна використовувати на робочому сервері, оскільки вона може порушити
виконання робочого коду.
Встановлення з архіву <span id="installing-from-archive-file"></span>
@ -123,7 +128,7 @@ http://localhost/basic/web/index.php
Налаштування веб-серверів <span id="configuring-web-servers"></span>
-------------------------
> Інформація: можете пропустити даний підрозділ, якщо ви тільки розпочали знайомитися з фреймворком
> Info: можете пропустити даний підрозділ, якщо ви тільки розпочали знайомитися з фреймворком
і не розгортаєте його на робочому сервері.
Додаток, встановлений за інструкціями, наведеними вище, буде працювати одразу як
@ -137,11 +142,11 @@ Windows, Mac OS X чи Linux із встановленим PHP 5.4 або вищ
Додатково можна сховати `index.php` із URL, як це описано у розділі [Маршрутизація та створення URL](runtime-routing.md).
Далі буде описано як налаштувати Apache або Nginx для цих цілей.
> Інформація: Встановлюючи `basic/web` кореневою директорією веб-сервера, ви забороняєте кінцевим користувачам доступ
> Info: Встановлюючи `basic/web` кореневою директорією веб-сервера, ви забороняєте кінцевим користувачам доступ
до приватного коду додатка та важливих даних, які знаходяться на одному рівні
з `basic/web`. Це робить додаток більш захищеним.
> Інформація: Якщо додаток працює на хостингу, де немає доступу
> Info: Якщо додаток працює на хостингу, де немає доступу
до налаштувань сервера, ви все ще можете змінити структуру додатка для покращення безпеки,
як описано в розділі [Робота на віртуальному хостингу](tutorial-shared-hosting.md).

2
docs/guide-uk/start-workflow.md

@ -5,7 +5,7 @@
або по `http://hostname/index.php`, в залежності від налаштування веб-сервера. Даний розділ - загальне введення в
організацію коду, вбудований функціонал і опрацювання запитів додатком Yii.
> Інформація: Для спрощення, далі в даному посібнику припускається, що Yii встановлений в директорію `basic/web`,
> Info: Для спрощення, далі в даному посібнику припускається, що Yii встановлений в директорію `basic/web`,
яка, в свою чергу, встановлена, як коренева директорія в налаштуваннях веб-сервера. В результаті, звернувшись до URL
на зразок `http://hostname/index.php`, ви отримаєте доступ до додатку.
Будь ласка, відредагуйте URL-адреси наведені у прикладах відповідно до ваших потреб.

2
docs/guide-uk/structure-application-components.md

@ -45,7 +45,7 @@
]
```
> Інформація: Хоча ви можете зареєструвати стільки компонентів в додатку скільки вам потрібно, все ж таки варто робити це осмислено.
> Info: Хоча ви можете зареєструвати стільки компонентів в додатку скільки вам потрібно, все ж таки варто робити це осмислено.
Компоненти додатку схожі на глобальні змінні. Використання дуже великої кількості компонентів додатку може потенційно зробити
ваш код складним для тестування і подальшої підтримки. У більшості випадків ви можете просто створити локальний компонент
і використовувати його при необхідності.

12
docs/guide-uk/structure-applications.md

@ -5,7 +5,7 @@
Кожна прикладна система Yii містить у собі один об’єкт додатка, який створюється у
[вхідному скрипті](structure-entry-scripts.md) і глобально доступний через вираз `\Yii::$app`.
> Інформація: Термін "додаток", в залежності від контексту, в якому він використовується, може означати як об’єкт додатка,
> Info: Термін "додаток", в залежності від контексту, в якому він використовується, може означати як об’єкт додатка,
так і прикладну систему додатка в цілому.
Існує два типи додатків: [[yii\web\Application|веб-додатки]] та [[yii\console\Application|консольні додатки]].
@ -137,10 +137,10 @@ $config = require(__DIR__ . '/../config/web.php');
]
```
> Інформація: Якщо ідентифікатор модуля збігається з ідентифікатором компонента додатка, перевага буде віддана компоненту додатка
під час початкового завантаження. Якщо ж ви хочете використати модуль, вам потрібно визначити анонімну функцію,
як показано нижче:
> ```php
> Note: Якщо ідентифікатор модуля збігається з ідентифікатором компонента додатка, перевага буде віддана компоненту додатка
під час початкового завантаження. Якщо ж ви хочете використати модуль, вам потрібно визначити анонімну функцію,
як показано нижче:
```php
[
function () {
return Yii::$app->getModule('user');
@ -168,7 +168,7 @@ if (YII_ENV_DEV) {
}
```
> Примітка: Якщо вказувати велику кількість компонентів у `bootstrap` - це негативно позначиться на швидкодії
> Note: Якщо вказувати велику кількість компонентів у `bootstrap` - це негативно позначиться на швидкодії
додатка, оскільки для кожного запиту буде виконуватись один й той самий набір компонентів. Таким чином, потрібно
розсудливо використовувати компоненти початкового завантаження.

17
docs/guide-uk/structure-controllers.md

@ -144,7 +144,7 @@ class SiteController extends Controller
`@app/controllers/ArticleController.php`; в той час, як контролер `admin/post-comment` має знаходитись у файлі
`@app/controllers/admin/PostCommentController.php`.
> Інформація: Останній приклад `admin/post-comment` показує яким чином ви можете розташувати контролер в під-директорії
> Info: Останній приклад `admin/post-comment` показує яким чином ви можете розташувати контролер в під-директорії
[[yii\base\Application::controllerNamespace|простору імен контролера]]. Це дуже зручно, коли ви хочете організувати
свої контролери у декілька категорій і не хочете використовувати [модулі](structure-modules.md).
@ -244,7 +244,7 @@ class SiteController extends Controller
Наприклад, `index` перетвориться у `actionIndex`, а `hello-world` перетвориться у `actionHelloWorld`.
> Примітка: Назви імен методів дій є *регістр-залежними*. Якщо у вас є метод `ActionIndex`, то його не буде враховано
> Note: Назви імен методів дій є *регістр-залежними*. Якщо у вас є метод `ActionIndex`, то його не буде враховано
як метод дії, і в результаті, запит до дії `index` призведе до отримання виключення. Також слід врахувати,
що методи дій повинні бути публічними ("public"). Приватні ("private") або захищені ("protected") методи
НЕ визначають вбудованих дій.
@ -262,7 +262,7 @@ class SiteController extends Controller
є окремими діями.
Для використання автономної дії, ви маєте вказати її у *мапі дій* за допомогою перевизначення методу
[[yii\base\Controller::actions()]] у вашому класі контролера, наступним чином:
[[yii\base\Controller::actions()|actions()]] у вашому класі контролера, наступним чином:
```php
public function actions()
@ -285,7 +285,8 @@ public function actions()
можуть містити довільні символи, доки вони визначені у методі `actions()`.
Для створення класу автономної дії, ви повинні успадкуватись від класу [[yii\base\Action]] або його нащадків, і реалізувати
публічний ("public") метод `run()`. Роль метода `run()` аналогічна іншим методам дій. Наприклад,
публічний ("public") метод [[yii\base\Action::run()|run()]]. Роль метода [[yii\base\Action::run()|run()]] аналогічна
іншим методам дій. Наприклад,
```php
<?php
@ -305,7 +306,7 @@ class HelloWorldAction extends Action
### Результати дій <span id="action-results"></span>
Значення, що повертається від методу дії або методу `run()` автономної дії дуже важливе.
Значення, що повертається від методу дії або методу [[yii\base\Action::run()|run()]] автономної дії дуже важливе.
Воно є результатом виконання відповідної дії.
Значення, що повертається, може бути об’єктом [відповіді](runtime-responses.md), яке буде відправлено кінцевому користувачу.
@ -331,9 +332,9 @@ public function actionForward()
### Параметри дій <span id="action-parameters"></span>
Методи дій для вбудованих дій і методи `run()` для автономних дій можуть приймати, так звані, *параметри дії*.
Їх значення беруться із запитів. Для [[yii\web\Application|веб-додатків]], значення кожного з параметрів дії
береться із `$_GET`, використовуючи назву параметра у якості ключа;
Методи дій для вбудованих дій і методи [[yii\base\Action::run()|run()]] для автономних дій можуть приймати, так звані,
*параметри дії*. Їх значення беруться із запитів. Для [[yii\web\Application|веб-додатків]], значення кожного з
параметрів дії береться із `$_GET`, використовуючи назву параметра у якості ключа;
для [[yii\console\Application|консольних додатків]] - вони відповідають аргументам командного рядка.
В наступному прикладі, дія `view` (вбудована дія) оголошує два параметри: `$id` і `$version`.

54
docs/guide-uk/structure-models.md

@ -17,8 +17,8 @@
Клас `Model` також є базовим класом для більш розширених моделей, таких як [Active Record](db-active-record.md).
Будь ласка, зверніться до відповідної документації для більш детальної інформації про ці розширені моделі.
> Інформація: Не обов’язково створювати класи моделей на базі класу [[yii\base\Model]]. Однак, оскільки багато компонентів Yii
побудовані так, щоб підтримувати [[yii\base\Model]], краще використовувати його як базовий клас для моделей.
> Info: Необов’язково створювати класи моделей на базі класу [[yii\base\Model]]. Однак, оскільки багато компонентів Yii
побудовані так, щоб підтримувати [[yii\base\Model]], краще використовувати його як базовий клас для моделей.
## Атрибути <span id="attributes"></span>
@ -88,7 +88,7 @@ class ContactForm extends Model
атрибутами. Наприклад, якщо атрибут має ім’я `firstName`, ви можете відобразити мітку `First Name`, яка є більш зручною
для користувача при відображенні кінцевим користувачам у таких місцях як поля форми чи повідомлення про помилки.
Ви можете отримати мітку атрибуту викликом методу [[yii\base\Model::getAttributeLabel()]]. Наприклад,
Ви можете отримати мітку атрибуту викликом методу [[yii\base\Model::getAttributeLabel()|getAttributeLabel()]]. Наприклад,
```php
$model = new \app\models\ContactForm;
@ -98,12 +98,12 @@ echo $model->getAttributeLabel('name');
```
За замовчуванням мітки атрибутів генеруються автоматично з імен атрибутів. Генерування виконується
методом [[yii\base\Model::generateAttributeLabel()]]. Він перетворить імена змінних зі стилю "camel-case" у
декілька слів з першою літерою у кожному слові у верхньому регістрі. Наприклад, `username` стане `Username`,
а `firstName` стане `First Name`.
методом [[yii\base\Model::generateAttributeLabel()|generateAttributeLabel()]]. Він перетворить імена змінних зі стилю
"camel-case" у декілька слів з першою літерою у кожному слові у верхньому регістрі. Наприклад, `username` стане
`Username`, а `firstName` стане `First Name`.
Якщо ви не хочете використовувати автоматично згенеровані мітки, ви можете перевизначити [[yii\base\Model::attributeLabels()]]
для точного визначення міток атрибутів. Наприклад,
Якщо ви не хочете використовувати автоматично згенеровані мітки, ви можете перевизначити
[[yii\base\Model::attributeLabels()|generateAttributeLabel()]] для точного визначення міток атрибутів. Наприклад,
```php
namespace app\models;
@ -147,8 +147,8 @@ public function attributeLabels()
Ви можете навіть умовно визначати мітки атрибутів. Наприклад, на основі [сценарію](#scenarios), в якому модель
використовується, ви можете повертати різні мітки для одного й того ж атрибуту.
> Інформація: Строго кажучи, мітки атрибутів є частиною [представлень](structure-views.md). Але оголошення міток
у моделях є часто дуже зручним та призводить до чистоти коду та можливості його повторного використання.
> Info: Строго кажучи, мітки атрибутів є частиною [представлень](structure-views.md). Але оголошення міток
у моделях є часто дуже зручним та призводить до чистоти коду та можливості його повторного використання.
## Сценарії <span id="scenarios"></span>
@ -172,7 +172,7 @@ $model = new User(['scenario' => 'login']);
```
За замовчуванням сценарії, які підтримуються моделлю, обумовлюються [правилами перевірки](#validation-rules) оголошеними
у моделі. Однак, ви можете змінити цю поведінку, перевизначивши метод [[yii\base\Model::scenarios()]]
у моделі. Однак, ви можете змінити цю поведінку, перевизначивши метод [[yii\base\Model::scenarios()|scenarios()]]
як показано нижче:
```php
@ -192,8 +192,8 @@ class User extends ActiveRecord
}
```
> Інформація: У вищенаведеному та у наступних прикладах класи моделей успадковані від [[yii\db\ActiveRecord]],
тому що використання декількох сценаріїв зазвичай відбувається з класами [Active Record](db-active-record.md).
> Info: У вищенаведеному та у наступних прикладах класи моделей успадковані від [[yii\db\ActiveRecord]],
тому що використання декількох сценаріїв зазвичай відбувається з класами [Active Record](db-active-record.md).
Метод `scenarios()` повертає масив, ключами якого є імена сценаріїв, а значеннями - відповідні
*активні атрибути*. Активні атрибути можуть бути [масово призначеними](#massive-assignment) та підлягають
@ -201,8 +201,8 @@ class User extends ActiveRecord
у сценарії `login`; в той час як у сценарії `register`, також активним є атрибут `email` разом з `username` і `password`.
Стандартна реалізація методу `scenarios()` повертає усі сценарії, знайдені у правилах перевірки, оголошених
методом [[yii\base\Model::rules()]]. При перевизначенні методу `scenarios()`, якщо ви хочете ввести нові сценарії
на додачу до тих сценаріїв, необхідно написати код подібний до наступного:
методом [[yii\base\Model::rules()||rules()]]. При перевизначенні методу [[yii\base\Model::scenarios()||scenarios()]],
якщо ви хочете ввести нові сценарії на додачу до тих сценаріїв, необхідно написати код подібний до наступного:
```php
namespace app\models;
@ -234,8 +234,8 @@ class User extends ActiveRecord
Якщо значення для деяких атрибутів не задовольняють відповідні бізнес-правила, то будуть відображенні належні
повідомлення про помилки, щоб допомогти користувачу виправити їх.
Ви можете викликати [[yii\base\Model::validate()]] для перевірки отриманих даних. Даний метод використає
правила перевірки, оголошені у [[yii\base\Model::rules()]], для перевірки кожного необхідного атрибуту. При відсутності
Ви можете викликати [[yii\base\Model::validate()|validate()]] для перевірки отриманих даних. Даний метод використає
правила перевірки, оголошені у [[yii\base\Model::rules()|rules()]], для перевірки кожного необхідного атрибуту. При відсутності
помилок він поверне true. В іншому випадку, він збереже помилки у властивості [[yii\base\Model::errors]]
та поверне false. Наприклад:
@ -254,8 +254,8 @@ if ($model->validate()) {
```
Для оголошення правил перевірки, пов’язаних з моделлю, необхідно перевизначити метод [[yii\base\Model::rules()]], повернувши
правила, які атрибути моделі повинні задовольнити. Наступний приклад показує правила перевірки, оголошені
Для оголошення правил перевірки, пов’язаних з моделлю, необхідно перевизначити метод [[yii\base\Model::rules()|rules()]],
повернувши правила, які атрибути моделі повинні задовольнити. Наступний приклад показує правила перевірки, оголошені
для моделі `ContactForm`:
```php
@ -339,14 +339,14 @@ public function scenarios()
}
```
> Інформація: Причиною того, що масове призначення застосовується лише для безпечних атрибутів є необхідність
> Info: Причиною того, що масове призначення застосовується лише для безпечних атрибутів є необхідність
контролювати те, які атрибути можуть змінюватись даними від кінцевого користувача. Наприклад, якщо модель `User`
має атрибут `permission`, який визначає дозволи призначені користувачу, то необхідно бути впевненим,
що цей атрибут може змінюватись лише адміністраторами через back-end інтерфейс.
Стандартна реалізація методу [[yii\base\Model::scenarios()]] повертає усі сценарії та атрибути,
знайдені у [[yii\base\Model::rules()]], якщо ви не перевизначили цей метод. Це означає, що атрибут є безпечним поки
знаходиться в одному із активних правил перевірки.
Стандартна реалізація методу [[yii\base\Model::scenarios()|scenarios()]] повертає усі сценарії та атрибути,
знайдені у [[yii\base\Model::rules()|rules()]], якщо ви не перевизначили цей метод. Це означає, що атрибут є безпечним,
поки знаходиться в одному із активних правил перевірки.
З цієї причини, надається спеціальний валідатор з псевдонімом `safe`, що дозволяє оголошувати атрибут
безпечним без фактичної його перевірки. Наприклад, наступне правило оголошує обидва атрибути `title`
@ -468,10 +468,10 @@ public function fields()
}
```
> Попередження: Оскільки за замовчуванням усі атрибути моделі будуть включені до масиву, що експортується, ви повинні
> перевірити ваші дані, щоб бути впевненим, що вони не містять конфіденційної інформації. Якщо ж така інформація присутня,
> вам потрібно перевизначити метод `fields()` та відфільтрувати її. У вищенаведеному прикладі були
> відфільтровані поля `auth_key`, `password_hash` і `password_reset_token`.
> Warning: Оскільки за замовчуванням усі атрибути моделі будуть включені до масиву, що експортується, ви повинні
перевірити ваші дані, щоб бути впевненим, що вони не містять конфіденційної інформації. Якщо ж така інформація присутня,
вам потрібно перевизначити метод `fields()` та відфільтрувати її. У вищенаведеному прикладі були
відфільтровані поля `auth_key`, `password_hash` і `password_reset_token`.
## Кращі практики <span id="best-practices"></span>

4
docs/guide-uk/structure-views.md

@ -44,7 +44,7 @@ $this->title = 'Вхід';
вище. Ці змінні представляють дані, які були *передані* у представлення через [контролери](structure-controllers.md)
або інші об’єкти, які спричинили [формування представлення](#rendering-views).
> Підказка: Попередньо визначені змінні перелічені в блоці коментаря у початку представлення, так що вони можуть
> Tip: Попередньо визначені змінні перелічені в блоці коментаря у початку представлення, так що вони можуть
бути розпізнані в інтегрованих середовищах розробки (IDE). Це також є хорошим способом документування ваших представлень.
@ -80,7 +80,7 @@ use yii\helpers\HtmlPurifier;
</div>
```
> Підказка: В той час як HTMLPurifier бездоганно виконує роботу, щоб зробити вивід безпечним, він не є швидким. Вам потрібно розглянути
> Tip: В той час як HTMLPurifier бездоганно виконує роботу, щоб зробити вивід безпечним, він не є швидким. Вам потрібно розглянути
можливість [кешування](caching-overview.md) результатів фільтрування, якщо ваш додаток потребує високої швидкодії.

19
docs/guide-uk/tutorial-console.md

@ -49,7 +49,7 @@ yii <route> [--option1=value1 --option2=value2 ... argument1 argument2 ...]
yii migrate/up 5 --migrationTable=migrations
```
> **Примітка**: Коли використовуєте символ `*` в консолі, не забувайте замикати його в лапки, як `"*"`, для запобігання його інтерпретування як
> Note: Коли використовуєте символ `*` в консолі, не забувайте замикати його в лапки, як `"*"`, для запобігання його інтерпретування як
> спецсимволу shell-оболонки, який заміщується іменами файлів поточної директорії.
@ -93,15 +93,14 @@ exit($exitCode);
спільні частини в окремий файл та включити цей файл до обох конфігурацій додатків (веб- та консольного).
Ви можете побачити приклад цього у "розширеному" шаблоні проекту.
> Підказка: Іноді, існує необхідність виконувати консольну команду, використовуючи конфігурацію додатка, яка
> відрізняється від заданої у вхідному скрипті. Наприклад, якщо ви хочете використати команду `yii migrate` для
> оновлення ваших тестових баз даних, які налаштовані кожна в окремому наборі тестів. Для динамічної зміни
> конфігурації просто вкажіть потрібний файл конфігурації додатка
> за допомогою опції `appconfig`, коли виконуєте команду:
>
> ```
> yii <route> --appconfig=path/to/config.php ...
> ```
> Tip: Іноді, існує необхідність виконувати консольну команду, використовуючи конфігурацію додатка, яка
відрізняється від заданої у вхідному скрипті. Наприклад, якщо ви хочете використати команду `yii migrate` для
оновлення ваших тестових баз даних, які налаштовані кожна в окремому наборі тестів. Для динамічної зміни
конфігурації просто вкажіть потрібний файл конфігурації додатка
за допомогою опції `appconfig`, коли виконуєте команду:
```bash
yii <route> --appconfig=path/to/config.php ...
```
Створення власних консольних команд <span id="create-command"></span>

4
docs/guide-uk/tutorial-start-from-scratch.md

@ -1,7 +1,7 @@
Створення своєї власної структури додатку
=========================================
> Примітка: Цей розділ знаходиться в розробці.
> Note: Цей розділ знаходиться в розробці.
У той час, як [базовий](https://github.com/yiisoft/yii2-app-basic) і [розширений](https://github.com/yiisoft/yii2-app-advanced)
шаблони додатків прекрасно підходять для більшості ваших потреб, ви також можете сворити свій власний шаблон додатку, з яким
@ -33,7 +33,7 @@ git clone git@github.com:yiisoft/yii2-app-basic.git
Змініть значення `name`, `description`, `keywords`, `homepage`, `license` і `support`, щоб описати ваш новий шаблон.
Також налаштуйте `require`, `require-dev`, `suggest` та інші параметри відповідно до вимог вашого шаблону.
> Примітка: В файлі `composer.json` використовуйте параметр `writable` в розділі `extra`, щоб
> Note: В файлі `composer.json` використовуйте параметр `writable` в розділі `extra`, щоб
> вказати права доступу до файлів, які необхідно встановити після створення додатку з використанням вашого шаблону.
Далі внесіть зміни у структуру та зміст додатку на той, який ви би хотіли бачити за замовчуванням.

4
docs/guide-uk/tutorial-yii-integration.md

@ -83,9 +83,11 @@ Yii::$classMap['Class2'] = 'path/to/Class2.php';
Якщо стороння система використовує управління залежностями Composer, ви можете встановити Yii за допомогою наступних команд:
```bash
composer global require "fxp/composer-asset-plugin:~1.1.1"
composer require yiisoft/yii2
composer install
```
Перша команда встановлює [composer asset plugin](https://github.com/francoispluchino/composer-asset-plugin/),
який дозволяє керувати залежностями пакунків Bower і NPM через Composer. Навіть якщо ви захочете використовувати тільки
@ -126,7 +128,7 @@ new yii\web\Application($yiiConfig); // НЕ ВИКЛИКАЙТЕ run() в ць
Замість того, щоб переписувати цілий додаток під Yii 2, ви можете просто його покращити, використовуючи деякі функції,
що доступні тільки в Yii 2. Для цього потрібно виконати наступні дії.
> Примітка: Yii 2 вимагає версію PHP 5.4 або вищу. Переконайтися, що і сервер і наявний додаток підтримують її.
> Note: Yii 2 вимагає версію PHP 5.4 або вищу. Переконайтися, що і сервер і наявний додаток підтримують її.
По-перше, встановіть Yii 2 до вашого поточного додатку, виконавши дії, описані в [попередньому підрозділі](#using-yii-in-others).

6
docs/guide-zh-CN/blocktypes.json

@ -0,0 +1,6 @@
{
"Warning:": "警告:",
"Note:": "注意:",
"Info:": "补充:",
"Tip:": "提示:"
}

2
docs/guide-zh-CN/caching-http.md

@ -86,7 +86,7 @@ ETag 相比 `Last-Modified` 能实现更复杂和更精确的缓存策略。例
复杂的 Etag 生成种子可能会违背使用 `HttpCache` 的初衷而引起不必要的性能开销,因为响应每一次请求都需要重新计算 Etag。请试着找出一个最简单的表达式去触发 Etag 失效。
> 注意:为了遵循 [RFC 7232(HTTP 1.1 协议)](http://tools.ietf.org/html/rfc7232#section-2.4),如果同时配置了 `ETag``Last-Modified` 头,`HttpCache` 将会同时发送它们。并且如果客户端同时发送 `If-None-Match` 头和 `If-Modified-Since` 头,则只有前者会被接受。
> Note: 为了遵循 [RFC 7232(HTTP 1.1 协议)](http://tools.ietf.org/html/rfc7232#section-2.4),如果同时配置了 `ETag``Last-Modified` 头,`HttpCache` 将会同时发送它们。并且如果客户端同时发送 `If-None-Match` 头和 `If-Modified-Since` 头,则只有前者会被接受。

4
docs/guide-zh-CN/concept-aliases.md

@ -17,7 +17,7 @@ Yii::setAlias('@foo', '/path/to/foo');
Yii::setAlias('@bar', 'http://www.example.com');
```
> 注意:别名所指向的文件路径或 URL 不一定是真实存在的文件或资源。
> Note: 别名所指向的文件路径或 URL 不一定是真实存在的文件或资源。
可以通过在一个别名后面加斜杠 `/` 和一至多个路径分段生成新别名(无需调用 [[Yii::setAlias()]])。我们把通过 [[Yii::setAlias()]] 定义的别名称为**根别名**,而用他们衍生出去的别名成为**衍生别名**。例如,`@foo` 就是根别名,而 `@foo/bar/file.php` 是一个衍生别名。
@ -53,7 +53,7 @@ echo Yii::getAlias('@foo/bar/file.php'); // 输出:/path/to/foo/bar/file.php
由衍生别名所解析出的文件路径和 URL 是通过替换掉衍生别名中的根别名部分得到的。
> 注意:[[Yii::getAlias()]] 并不检查结果路径/URL 所指向的资源是否真实存在。
> Note: [[Yii::getAlias()]] 并不检查结果路径/URL 所指向的资源是否真实存在。
根别名可能也会包含斜杠 `/`。[[Yii::getAlias()]] 足够智能到判断一个别名中的哪部分是根别名,因此能正确解析文件路径/URL。例如:

4
docs/guide-zh-CN/concept-autoloading.md

@ -3,7 +3,7 @@
Yii 依靠[类自动加载机制](http://www.php.net/manual/en/language.oop5.autoload.php)来定位和包含所需的类文件。它提供一个高性能且完美支持[PSR-4 标准](https://github.com/php-fig/fig-standards/blob/master/proposed/psr-4-autoloader/psr-4-autoloader.md)([中文汉化](https://github.com/hfcorriez/fig-standards/blob/zh_CN/%E6%8E%A5%E5%8F%97/PSR-4-autoloader.md))的自动加载器。该自动加载器会在引入框架文件 `Yii.php` 时安装好。
> 注意:为了简化叙述,本篇文档中我们只会提及类的自动加载。不过,要记得文中的描述同样也适用于接口和Trait(特质)的自动加载哦。
> Note: 为了简化叙述,本篇文档中我们只会提及类的自动加载。不过,要记得文中的描述同样也适用于接口和Trait(特质)的自动加载哦。
使用 Yii 自动加载器 <span id="using-yii-autoloader"></span>
@ -55,7 +55,7 @@ require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
你也可以只使用 Composer 的自动加载,而不用 Yii 的自动加载。不过这样做的话,类的加载效率会下降,且你必须遵循 Composer 所设定的规则,从而让你的类满足可以被自动加载的要求。
> 补充:若你不想要使用 Yii 的自动加载器,你必须创建一个你自己版本的 `Yii.php` 文件,并把它包含进你的[入口脚本](structure-entry-scripts.md)里。
> Info: 若你不想要使用 Yii 的自动加载器,你必须创建一个你自己版本的 `Yii.php` 文件,并把它包含进你的[入口脚本](structure-entry-scripts.md)里。
自动加载扩展类 <span id="autoloading-extension-classes"></span>

2
docs/guide-zh-CN/concept-behaviors.md

@ -39,7 +39,7 @@ class MyBehavior extends Behavior
以上代码定义了行为类 `app\components\MyBehavior` 并为要附加行为的组件提供了两个属性 `prop1``prop2` 和一个方法 `foo()` 。注意属性 `prop2` 是通过 getter `getProp2()` 和 setter `setProp2()` 定义的。能这样用是因为 [[yii\base\Object]] 是 [[yii\base\Behavior]] 的祖先类,此祖先类支持用 getter 和 setter 方法定义[属性](basic-properties.md)
> 提示:在行为内部可以通过 [[yii\base\Behavior::owner]] 属性访问行为已附加的组件。
> Tip: 在行为内部可以通过 [[yii\base\Behavior::owner]] 属性访问行为已附加的组件。
处理事件

2
docs/guide-zh-CN/concept-components.md

@ -71,7 +71,7 @@ $component = \Yii::createObject([
], [1, 2]);
```
> 补充:尽管调用 [[Yii::createObject()]] 的方法看起来更加复杂,但这主要因为它更加灵活强大,它是基于[依赖注入容器](concept-di-container.md)实现的。
> Info: 尽管调用 [[Yii::createObject()]] 的方法看起来更加复杂,但这主要因为它更加灵活强大,它是基于[依赖注入容器](concept-di-container.md)实现的。
[[yii\base\Object]] 类执行时的生命周期如下:

4
docs/guide-zh-CN/concept-events.md

@ -109,7 +109,7 @@ class Foo extends Component
以上代码当调用 `bar()` ,它将触发名为 `hello` 的事件。
> 提示:推荐使用类常量来表示事件名。上例中,常量 `EVENT_HELLO` 用来表示 `hello` 。这有两个好处。第一,它可以防止拼写错误并支持 IDE 的自动完成。第二,只要简单检查常量声明就能了解一个类支持哪些事件。
> Tip: 推荐使用类常量来表示事件名。上例中,常量 `EVENT_HELLO` 用来表示 `hello` 。这有两个好处。第一,它可以防止拼写错误并支持 IDE 的自动完成。第二,只要简单检查常量声明就能了解一个类支持哪些事件。
有时想要在触发事件时同时传递一些额外信息到事件处理器。例如,邮件程序要传递消息信息到 `messageSent` 事件的处理器以便处理器了解哪些消息被发送了。为此,可以提供一个事件对象作为 [[yii\base\Component::trigger()]] 方法的第二个参数。这个事件对象必须是 [[yii\base\Event]] 类或其子类的实例。如:
@ -204,7 +204,7 @@ Event::trigger(Foo::className(), Foo::EVENT_HELLO);
注意这种情况下 `$event->sender` 指向触发事件的类名而不是对象实例。
> 注意:因为类级别的处理器响应类和其子类的所有实例触发的事件,必须谨慎使用,尤其是底层的基类,如 [[yii\base\Object]]。
> Note: 因为类级别的处理器响应类和其子类的所有实例触发的事件,必须谨慎使用,尤其是底层的基类,如 [[yii\base\Object]]。
移除类级别的事件处理器只需调用[[yii\base\Event::off()]],如:

2
docs/guide-zh-CN/concept-properties.md

@ -11,7 +11,7 @@ $object->label = trim($label);
为解决该问题,Yii 引入了一个名为 [[yii\base\Object]] 的基类,它支持基于类内的 **getter****setter**(读取器和设定器)方法来定义属性。如果某类需要支持这个特性,只需要继承 [[yii\base\Object]] 或其子类即可。
> 补充:几乎每个 Yii 框架的核心类都继承自 [[yii\base\Object]] 或其子类。这意味着只要在核心类中见到 getter 或 setter 方法,就可以像调用属性一样调用它。
> Info: 几乎每个 Yii 框架的核心类都继承自 [[yii\base\Object]] 或其子类。这意味着只要在核心类中见到 getter 或 setter 方法,就可以像调用属性一样调用它。
getter 方法是名称以 `get` 开头的方法,而 setter 方法名以 `set` 开头。方法名中 `get``set` 后面的部分就定义了该属性的名字。如下面代码所示,getter 方法 `getLabel()` 和 setter 方法 `setLabel()` 操作的是 `label` 属性,:

10
docs/guide-zh-CN/db-active-record.md

@ -1,7 +1,7 @@
Active Record
=============
> 注意:该章节还在开发中。
> Note: 该章节还在开发中。
[Active Record](http://zh.wikipedia.org/wiki/Active_Record) (活动记录,以下简称AR)提供了一个面向对象的接口,
用以访问数据库中的数据。一个 AR 类关联一张数据表,
@ -166,7 +166,7 @@ $sql = 'SELECT * FROM customer';
$customers = Customer::findBySql($sql)->all();
```
> 小技巧:在上面的代码中,`Customer::STATUS_ACTIVE` 是一个在 `Customer` 类里定义的常量。(译注:这种常量的值一般都是tinyint)相较于直接在代码中写死字符串或数字,使用一个更有意义的常量名称是一种更好的编程习惯。
> Tip: 在上面的代码中,`Customer::STATUS_ACTIVE` 是一个在 `Customer` 类里定义的常量。(译注:这种常量的值一般都是tinyint)相较于直接在代码中写死字符串或数字,使用一个更有意义的常量名称是一种更好的编程习惯。
有两个快捷方法:`findOne` 和 `findAll()` 用来返回一个或者一组`ActiveRecord`实例。前者返回第一个匹配到的实例,后者返回所有。
例如:
@ -405,7 +405,7 @@ SELECT * FROM customer WHERE id=1;
SELECT * FROM order WHERE customer_id=1;
```
> 提示:再次用表达式 `$customer->orders`将不会执行第二次 SQL 查询,
> Tip: 再次用表达式 `$customer->orders`将不会执行第二次 SQL 查询,
SQL 查询只在该表达式第一次使用时执行。
数据库访问只返回缓存在内部前一次取回的结果集,如果你想查询新的
关联数据,先要注销现有结果集:`unset($customer->orders);`。
@ -436,7 +436,7 @@ class Customer extends \yii\db\ActiveRecord
$orders = $customer->getBigOrders(200)->all();
```
>注意:关联查询返回的是 [[yii\db\ActiveQuery]] 的实例,如果像特性(如类属性)那样连接关联数据,
> Note: 关联查询返回的是 [[yii\db\ActiveQuery]] 的实例,如果像特性(如类属性)那样连接关联数据,
返回的结果是关联查询的结果,即 [[yii\db\ActiveRecord]] 的实例,
或者是数组,或者是 null ,取决于关联关系的多样性。如,`$customer->getOrders()` 返回
`ActiveQuery` 实例,而 `$customer->orders` 返回`Order` 对象数组
@ -630,7 +630,7 @@ if ($customers[0]->orders[0]->customer === $customers[0]) {
}
```
>注意:相对关系不能在包含中间表的关联关系中定义。 即是,如果你的关系是通过[[yii\db\ActiveQuery::via()|via()]] 或 [[yii\db\ActiveQuery::viaTable()|viaTable()]]方法定义的, 就不能调用[[yii\db\ActiveQuery::inverseOf()]]方法了。
> Note: 相对关系不能在包含中间表的关联关系中定义。 即是,如果你的关系是通过[[yii\db\ActiveQuery::via()|via()]] 或 [[yii\db\ActiveQuery::viaTable()|viaTable()]]方法定义的, 就不能调用[[yii\db\ActiveQuery::inverseOf()]]方法了。
JOIN 类型关联查询

14
docs/guide-zh-CN/db-dao.md

@ -58,7 +58,7 @@ return [
],
```
注意:如果需要同时使用多个数据库可以定义 多个 连接组件:
注意如果需要同时使用多个数据库可以定义多个连接组件:
```php
return [
@ -293,11 +293,11 @@ Yii 提供了以下常量作为常用的隔离级别
你可以使用以上常量或者使用一个string字符串命令,在对应数据库中执行该命令用以设置隔离级别,比如对于`postgres`有效的命令为`SERIALIZABLE READ ONLY DEFERRABLE`.
>注意:某些数据库只能针对连接来设置事务隔离级别,所以你必须要为连接明确制定隔离级别.目前受影响的数据库:`MSSQL SQLite`
> Note: 某些数据库只能针对连接来设置事务隔离级别,所以你必须要为连接明确制定隔离级别.目前受影响的数据库:`MSSQL SQLite`
>注意:SQLite 只支持两种事务隔离级别,所以你只能设置`READ UNCOMMITTED` 和 `SERIALIZABLE`.使用其他隔离级别会抛出异常.
> Note: SQLite 只支持两种事务隔离级别,所以你只能设置`READ UNCOMMITTED` 和 `SERIALIZABLE`.使用其他隔离级别会抛出异常.
>注意:PostgreSQL 不允许在事务开始前设置隔离级别,所以你不能在事务开始时指定隔离级别.你可以在事务开始之后调用[[yii\db\Transaction::setIsolationLevel()]] 来设置.
> Note: PostgreSQL 不允许在事务开始前设置隔离级别,所以你不能在事务开始时指定隔离级别.你可以在事务开始之后调用[[yii\db\Transaction::setIsolationLevel()]] 来设置.
关于隔离级别[isolation levels]: http://en.wikipedia.org/wiki/Isolation_%28database_systems%29#Isolation_levels
@ -347,11 +347,11 @@ $rows = $db->createCommand('SELECT * FROM user LIMIT 10')->queryAll();
// 通过主服务器执行更新操作
$db->createCommand("UPDATE user SET username='demo' WHERE id=1")->execute();
```
>注意:通过[[yii\db\Command::execute()]] 执行的查询被认为是写操作,所有使用[[yii\db\Command]]来执行的其他查询方法被认为是读操作.你可以通过`$db->slave`得到当前正在使用能够的从服务器.
> Note: 通过[[yii\db\Command::execute()]] 执行的查询被认为是写操作,所有使用[[yii\db\Command]]来执行的其他查询方法被认为是读操作.你可以通过`$db->slave`得到当前正在使用能够的从服务器.
`Connection`组件支持从服务器的负载均衡和故障转移,当第一次执行读查询时,会随即选择一个从服务器进行连接,如果连接失败则又选择另一个,如果所有从服务器都不可用,则会连接主服务器。你可以配置[[yii\db\Connection::serverStatusCache|server status cache]]来记住那些不能连接的从服务器,使Yii 在一段时间[[yii\db\Connection::serverRetryInterval].内不会重复尝试连接那些根本不可用的从服务器.
>注意:在上述配置中,每个从服务器连接超时时间被指定为10s. 如果在10s内不能连接,则被认为该服务器已经挂掉.你也可以自定义超时参数.
> Note: 在上述配置中,每个从服务器连接超时时间被指定为10s. 如果在10s内不能连接,则被认为该服务器已经挂掉.你也可以自定义超时参数.
你也可以配置多主多从的结构,例如:
@ -396,7 +396,7 @@ $db->createCommand("UPDATE user SET username='demo' WHERE id=1")->execute();
```
上述配置制定了2个主服务器和4个从服务器.`Connection`组件也支持主服务器的负载均衡和故障转移,与从服务器不同的是,如果所有主服务器都不可用,则会抛出异常.
>注意:当你使用[[yii\db\Connection::masters|masters]]来配置一个或多个主服务器时,`Connection`中关于数据库连接的其他属性(例如:`dsn`, `username`, `password`)都会被忽略.
> Note: 当你使用[[yii\db\Connection::masters|masters]]来配置一个或多个主服务器时,`Connection`中关于数据库连接的其他属性(例如:`dsn`, `username`, `password`)都会被忽略.
事务默认使用主服务器的连接,并且在事务执行中的所有操作都会使用主服务器的连接,例如:

4
docs/guide-zh-CN/helper-overview.md

@ -1,7 +1,7 @@
助手类
=======
> 注意:这部分正在开发中。
> Note: 这部分正在开发中。
Yii 提供许多类来简化常见编码,如对字条串或数组的操作,
HTML 代码生成,等等。这些助手类被编写在命名空间 `yii\helpers` 下,并且
@ -15,7 +15,7 @@ use yii\helpers\Html;
echo Html::encode('Test > test');
```
> 注意:为了支持 [自定义助手类](#customizing-helper-classes),Yii 将每一个助手类
> Note: 为了支持 [自定义助手类](#customizing-helper-classes),Yii 将每一个助手类
分隔成两个类:一个基类 (例如 `BaseArrayHelper`) 和一个具体的类 (例如 `ArrayHelper`).
当使用助手类时,应该仅使用具体的类版本而不使用基类。

10
docs/guide-zh-CN/input-validation.md

@ -185,7 +185,7 @@ return [
}]
```
> 注意:对于绝大多数验证器而言,若其 [[yii\base\Validator::skipOnEmpty]] 属性为默认值
> Note: 对于绝大多数验证器而言,若其 [[yii\base\Validator::skipOnEmpty]] 属性为默认值
true,则它们不会对空值进行任何处理。也就是当他们的关联特性接收到空值时,相关验证会被直接略过。在
[核心验证器](tutorial-core-validators.md) 之中,只有 `captcha`(验证码),`default`(默认值),`filter`(滤镜),`required`(必填),以及 `trim`(去首尾空格),这几个验证器会处理空输入。
@ -208,7 +208,7 @@ if ($validator->validate($email, $error)) {
}
```
> 注意:不是所有的验证器都支持这种形式的验证。比如 [unique(唯一性)](tutorial-core-validators.md#unique)核心验证器就就是一个例子,它的设计初衷就是只作用于模型类内部的。
> Note: 不是所有的验证器都支持这种形式的验证。比如 [unique(唯一性)](tutorial-core-validators.md#unique)核心验证器就就是一个例子,它的设计初衷就是只作用于模型类内部的。
若你需要针对一系列值执行多项验证,你可以使用 [[yii\base\DynamicModel]]
。它支持即时添加特性和验证规则的定义。它的使用规则是这样的:
@ -309,7 +309,7 @@ class MyForm extends Model
}
```
> 注意:缺省状态下,行内验证器不会在关联特性的输入值为空或该特性已经在其他验证中失败的情况下起效。若你想要确保该验证器始终启用的话,你可以在定义规则时,酌情将 [[yii\validators\Validator::skipOnEmpty|skipOnEmpty]] 以及 [[yii\validators\Validator::skipOnError|skipOnError]]
> Note: 缺省状态下,行内验证器不会在关联特性的输入值为空或该特性已经在其他验证中失败的情况下起效。若你想要确保该验证器始终启用的话,你可以在定义规则时,酌情将 [[yii\validators\Validator::skipOnEmpty|skipOnEmpty]] 以及 [[yii\validators\Validator::skipOnError|skipOnError]]
属性设为 false,比如,
> ```php
[
@ -351,7 +351,7 @@ class CountryValidator extends Validator
当终端用户通过 HTML 表单提供相关输入信息时,我们可能会需要用到基于 JavaScript 的客户端验证。因为,它可以让用户更快速的得到错误信息,也因此可以提供更好的用户体验。你可以使用或自己实现除服务器端验证之外,**还能额外**客户端验证功能的验证器。
> 补充:尽管客户端验证为加分项,但它不是必须项。它存在的主要意义在于给用户提供更好的客户体验。正如“永远不要相信来自终端用户的输入信息”,也同样永远不要相信客户端验证。基于这个理由,你应该始终如前文所描述的那样,通过调用 [[yii\base\Model::validate()]] 方法执行服务器端验证。
> Info: 尽管客户端验证为加分项,但它不是必须项。它存在的主要意义在于给用户提供更好的客户体验。正如“永远不要相信来自终端用户的输入信息”,也同样永远不要相信客户端验证。基于这个理由,你应该始终如前文所描述的那样,通过调用 [[yii\base\Model::validate()]] 方法执行服务器端验证。
### 使用客户端验证 <span id="using-client-side-validation"></span>
@ -452,7 +452,7 @@ JS;
}
```
> 技巧:上述代码主要是演示了如何支持客户端验证。在具体实践中,你可以使用 [in](tutorial-core-validators.md#in) 核心验证器来达到同样的目的。比如这样的验证规则:
> Tip: 上述代码主要是演示了如何支持客户端验证。在具体实践中,你可以使用 [in](tutorial-core-validators.md#in) 核心验证器来达到同样的目的。比如这样的验证规则:
> ```php
[
['status', 'in', 'range' => Status::find()->select('id')->asArray()->column()],

2
docs/guide-zh-CN/output-formatting.md

@ -120,7 +120,7 @@ echo Yii::$app->formatter->asTime('2014-10-06 12:41:00'); // 14:41:00
echo Yii::$app->formatter->asTime('2014-10-06 14:41:00 CEST'); // 14:41:00
```
> 注意:时区从属于全世界各国政府定的规则,可能会频繁的变更,因此你的系统的时区数据库可能不是最新的信息,
> Note: 时区从属于全世界各国政府定的规则,可能会频繁的变更,因此你的系统的时区数据库可能不是最新的信息,
> 可参考 [ICU manual](http://userguide.icu-project.org/datetime/timezone#TOC-Updating-the-Time-Zone-Data)
> 关于更新时区数据库的详情,
> 也可参考:[为国际化设置PHP环境](tutorial-i18n.md#setup-environment).

2
docs/guide-zh-CN/rest-authentication.md

@ -29,7 +29,7 @@ Yii 支持上述的认证方式,你也可很方便的创建新的认证方式
步骤1不是必要的,但是推荐配置,因为RESTful APIs应为无状态的,当[[yii\web\User::enableSession|enableSession]]为false,
请求中的用户认证状态就不能通过session来保持,每个请求的认证通过步骤2和3来实现。
> 提示: 如果你将RESTful APIs作为应用开发,可以设置应用配置中 `user` 组件的[[yii\web\User::enableSession|enableSession]],
> Tip: 如果你将RESTful APIs作为应用开发,可以设置应用配置中 `user` 组件的[[yii\web\User::enableSession|enableSession]],
如果将RESTful APIs作为模块开发,可以在模块的 `init()` 方法中增加如下代码,如下所示:
```php

2
docs/guide-zh-CN/rest-controllers.md

@ -140,4 +140,4 @@ public function checkAccess($action, $model = null, $params = [])
`checkAccess()` 方法默认会被[[yii\rest\ActiveController]]默认操作所调用,如果创建新的操作并想执行权限检查,
应在新的操作中明确调用该方法。
> 提示: 可使用[Role-Based Access Control (RBAC) 基于角色权限控制组件](security-authorization.md)实现`checkAccess()`。
> Tip: 可使用[Role-Based Access Control (RBAC) 基于角色权限控制组件](security-authorization.md)实现`checkAccess()`。

8
docs/guide-zh-CN/rest-quick-start.md

@ -73,7 +73,7 @@ class UserController extends ActiveController
]
```
> 补充:上述配置是可选的。若未按上述配置,API 将仅可以分辨
> Info: 上述配置是可选的。若未按上述配置,API 将仅可以分辨
`application/x-www-form-urlencoded``multipart/form-data` 输入格式。
@ -92,7 +92,7 @@ class UserController extends ActiveController
* `OPTIONS /users`: 显示关于末端 `/users` 支持的动词
* `OPTIONS /users/123`: 显示有关末端 `/users/123` 支持的动词
> 补充:Yii 将在末端使用的控制器的名称自动变为复数。(译注:个人感觉这里应该变为注意)
> Info: Yii 将在末端使用的控制器的名称自动变为复数。(译注:个人感觉这里应该变为注意)
> 你可以用 [[yii\rest\UrlRule::$pluralize]]-属性来配置此项。
你可以访问你的API用 `curl` 命令如下,
@ -171,7 +171,7 @@ Content-Type: application/json; charset=UTF-8
{"id":1,"username":"example","email":"user@example.com","created_at":1414674789,"updated_at":1414674789}
```
> 技巧:你还可以通过 Web 浏览器中输入 URL `http://localhost/users` 来访问你的 API。
> Tip: 你还可以通过 Web 浏览器中输入 URL `http://localhost/users` 来访问你的 API。
尽管如此,你可能需要一些浏览器插件来发送特定的 headers 请求。
如你所见,在 headers 响应,有关于总数,页数的信息,等等。
@ -182,7 +182,7 @@ Content-Type: application/json; charset=UTF-8
例如:URL `http://localhost/users?fields=id,email` 将只返回 `id``email` 字段。
> 补充:你可能已经注意到了 `http://localhost/users` 的结果包括一些敏感字段,
> Info: 你可能已经注意到了 `http://localhost/users` 的结果包括一些敏感字段,
> 例如 `password_hash`, `auth_key` 你肯定不希望这些出现在你的 API 结果中。
> 你应该在 [响应格式](rest-response-formatting.md) 部分中过滤掉这些字段。

2
docs/guide-zh-CN/rest-resources.md

@ -79,7 +79,7 @@ public function fields()
}
```
> 警告: 模型的所有属性默认会被包含到API结果中,应检查数据确保没包含敏感数据,如果有敏感数据,
> Warning: 模型的所有属性默认会被包含到API结果中,应检查数据确保没包含敏感数据,如果有敏感数据,
> 应覆盖`fields()`过滤掉,在上述例子中,我们选择过滤掉 `auth_key`, `password_hash``password_reset_token`.

4
docs/guide-zh-CN/runtime-handling-errors.md

@ -61,7 +61,7 @@ throw new NotFoundHttpException();
当`YII_DEBUG` 为 true (表示在调试模式),错误处理器会显示异常以及详细的函数调用栈和源代码行数来帮助调试,
当`YII_DEBUG` 为 false,只有错误信息会被显示以防止应用的敏感信息泄漏。
> 补充: 如果异常是继承 [[yii\base\UserException]],不管`YII_DEBUG`为何值,函数调用栈信息都不会显示,
> Info: 如果异常是继承 [[yii\base\UserException]],不管`YII_DEBUG`为何值,函数调用栈信息都不会显示,
这是因为这种错误会被认为是用户产生的错误,开发人员不需要去修正。
[[yii\web\ErrorHandler|error handler]] 错误处理器默认使用两个[视图](structure-views.md)显示错误:
@ -134,7 +134,7 @@ public function actionError()
* `message`: 错误信息
* `exception`: 更多详细信息的异常对象,如HTTP 状态码,错误码,错误调用栈等。
> 补充: 如果你使用 [基础应用模板](start-installation.md) 或 [高级应用模板](tutorial-advanced-app.md),
> Info: 如果你使用 [基础应用模板](start-installation.md) 或 [高级应用模板](tutorial-advanced-app.md),
错误操作和错误视图已经定义好了。

8
docs/guide-zh-CN/runtime-responses.md

@ -67,7 +67,7 @@ $headers->set('Pragma', 'no-cache');
$values = $headers->remove('Pragma');
```
> 补充: 头名称是大小写敏感的,在[[yii\web\Response::send()]]方法调用前新注册的头信息并不会发送给用户。
> Info: 头名称是大小写敏感的,在[[yii\web\Response::send()]]方法调用前新注册的头信息并不会发送给用户。
## 响应主体 <span id="response-body"></span>
@ -139,7 +139,7 @@ public function actionInfo()
}
```
> 注意: 如果创建你自己的响应对象,将不能在应用配置中设置 `response` 组件,尽管如此,
> Note: 如果创建你自己的响应对象,将不能在应用配置中设置 `response` 组件,尽管如此,
可使用 [依赖注入](concept-di-container.md) 应用通用配置到你新的响应对象。
@ -166,14 +166,14 @@ public function actionOld()
\Yii::$app->response->redirect('http://example.com/new', 301)->send();
```
> 补充: [[yii\web\Response::redirect()]] 方法默认会设置响应状态码为302,该状态码会告诉浏览器请求的资源
> Info: [[yii\web\Response::redirect()]] 方法默认会设置响应状态码为302,该状态码会告诉浏览器请求的资源
*临时* 放在另一个URI地址上,可传递一个301状态码告知浏览器请求的资源已经 *永久* 重定向到新的URId地址。
如果当前请求为AJAX 请求,发送一个 `Location` 头不会自动使浏览器跳转,为解决这个问题,
[[yii\web\Response::redirect()]] 方法设置一个值为要跳转的URL的`X-Redirect` 头,
在客户端可编写JavaScript 代码读取该头部值然后让浏览器跳转对应的URL。
> 补充: Yii 配备了一个`yii.js` JavaScript 文件提供常用JavaScript功能,包括基于`X-Redirect`头的浏览器跳转,
> Info: Yii 配备了一个`yii.js` JavaScript 文件提供常用JavaScript功能,包括基于`X-Redirect`头的浏览器跳转,
因此,如果你使用该JavaScript 文件(通过[[yii\web\YiiAsset]] 资源包注册),就不需要编写AJAX跳转的代码。

16
docs/guide-zh-CN/runtime-sessions-cookies.md

@ -69,7 +69,7 @@ foreach ($session as $name => $value) ...
foreach ($_SESSION as $name => $value) ...
```
> 补充: 当使用`session`组件访问session数据时候,如果session没有开启会自动开启,
> Info: 当使用`session`组件访问session数据时候,如果session没有开启会自动开启,
这和通过`$_SESSION`不同,`$_SESSION`要求先执行`session_start()`。
当session数据为数组时,`session`组件会限制你直接修改数据中的单元项,例如:
@ -132,7 +132,7 @@ $session['captcha.lifetime'] = 3600;
所有这些session类支持相同的API方法集,因此,切换到不同的session存储介质不需要修改项目使用session的代码。
> 注意: 如果通过`$_SESSION`访问使用自定义存储介质的session,需要确保session已经用[[yii\web\Session::open()]] 开启,
> Note: 如果通过`$_SESSION`访问使用自定义存储介质的session,需要确保session已经用[[yii\web\Session::open()]] 开启,
这是因为在该方法中注册自定义session存储处理器。
学习如何配置和使用这些组件类请参考它们的API文档,如下为一个示例
@ -167,7 +167,7 @@ CREATE TABLE session
- PostgreSQL: BYTEA
- MSSQL: BLOB
> 注意: 根据php.ini 设置的 `session.hash_function`,你需要调整`id`列的长度,
> Note: 根据 php.ini 设置的 `session.hash_function`,你需要调整`id`列的长度,
例如,如果 `session.hash_function=sha256` ,应使用长度为64而不是40的char类型。
@ -214,7 +214,7 @@ $session->addFlash('alerts', 'You are promoted.');
$alerts = $session->getFlash('alerts');
```
> 注意: 不要在相同名称的flash数据中使用[[yii\web\Session::setFlash()]] 的同时也使用[[yii\web\Session::addFlash()]],
> Note: 不要在相同名称的flash数据中使用[[yii\web\Session::setFlash()]] 的同时也使用[[yii\web\Session::addFlash()]],
因为后一个防范会自动将flash信息转换为数组以使新的flash数据可追加进来,因此,
当你调用[[yii\web\Session::getFlash()]]时,会发现有时获取到一个数组,有时获取到一个字符串,
取决于你调用这两个方法的顺序。
@ -280,7 +280,7 @@ unset($cookies['language']);
[[yii\web\Cookie::domain|domain]], [[yii\web\Cookie::expire|expire]]
可配置这些属性到cookie中并添加到响应的cookie集合中。
> 注意: 为安全起见[[yii\web\Cookie::httpOnly]] 被设置为true,这可减少客户端脚本访问受保护cookie(如果浏览器支持)的风险,
> Note: 为安全起见[[yii\web\Cookie::httpOnly]] 被设置为true,这可减少客户端脚本访问受保护cookie(如果浏览器支持)的风险,
更多详情可阅读 [httpOnly wiki article](https://www.owasp.org/index.php/HttpOnly) for more details.
@ -290,12 +290,12 @@ unset($cookies['language']);
使cookie不被客户端修改。该功能通过给每个cookie签发一个哈希字符串来告知服务端cookie是否在客户端被修改,
如果被修改,通过`request`组件的[[yii\web\Request::cookies|cookie collection]]cookie集合访问不到该cookie。
> 注意: Cookie验证只保护cookie值被修改,如果一个cookie验证失败,仍然可以通过`$_COOKIE`来访问该cookie,
> Note: Cookie验证只保护cookie值被修改,如果一个cookie验证失败,仍然可以通过`$_COOKIE`来访问该cookie,
因为这是第三方库对未通过cookie验证自定义的操作方式。
Cookie验证默认启用,可以设置[[yii\web\Request::enableCookieValidation]]属性为false来禁用它,尽管如此,我们强烈建议启用它。
> 注意: 直接通过`$_COOKIE` 和 `setcookie()` 读取和发送的Cookie不会被验证。
> Note: 直接通过`$_COOKIE` 和 `setcookie()` 读取和发送的Cookie不会被验证。
当使用cookie验证,必须指定[[yii\web\Request::cookieValidationKey]],它是用来生成s上述的哈希值,
可通过在应用配置中配置`request` 组件。
@ -310,5 +310,5 @@ return [
];
```
> 补充: [[yii\web\Request::cookieValidationKey|cookieValidationKey]] 对你的应用安全很重要,
> Info: [[yii\web\Request::cookieValidationKey|cookieValidationKey]] 对你的应用安全很重要,
应只被你信任的人知晓,请不要将它放入版本控制中。

6
docs/guide-zh-CN/start-databases.md

@ -64,7 +64,7 @@ return [
上面配置的数据库连接可以在应用中通过 `Yii::$app->db` 表达式访问。
> 补充:`config/db.php` 将被包含在应用配置文件 `config/web.php` 中,后者指定了整个[应用](structure-applications.md)如何初始化。请参考[配置](concept-configurations.md)章节了解更多信息。
> Info: `config/db.php` 将被包含在应用配置文件 `config/web.php` 中,后者指定了整个[应用](structure-applications.md)如何初始化。请参考[配置](concept-configurations.md)章节了解更多信息。
创建活动记录 <span id="creating-active-record"></span>
@ -86,7 +86,7 @@ class Country extends ActiveRecord
这个 `Country` 类继承自 [[yii\db\ActiveRecord]]。你不用在里面写任何代码。只需要像现在这样,Yii 就能根据类名去猜测对应的数据表名。
> 补充:如果类名和数据表名不能直接对应,可以覆写 [[yii\db\ActiveRecord::tableName()|tableName()]] 方法去显式指定相关表名。
> Info: 如果类名和数据表名不能直接对应,可以覆写 [[yii\db\ActiveRecord::tableName()|tableName()]] 方法去显式指定相关表名。
使用 `Country` 类可以很容易地操作 `country` 表数据,就像这段代码:
@ -107,7 +107,7 @@ $country->name = 'U.S.A.';
$country->save();
```
> 补充:活动记录是面向对象、功能强大的访问和操作数据库数据的方式。你可以在[活动记录](db-active-record.md)章节了解更多信息。除此之外你还可以使用另一种更原生的被称做[数据访问对象](db-dao)的方法操作数据库数据。
> Info: 活动记录是面向对象、功能强大的访问和操作数据库数据的方式。你可以在[活动记录](db-active-record.md)章节了解更多信息。除此之外你还可以使用另一种更原生的被称做[数据访问对象](db-dao)的方法操作数据库数据。
创建操作 <span id="creating-action"></span>

10
docs/guide-zh-CN/start-forms.md

@ -41,7 +41,7 @@ class EntryForm extends Model
该类继承自Yii 提供的一个基类 [[yii\base\Model]],该基类通常用来表示数据。
> 补充:[[yii\base\Model]] 被用于普通模型类的父类并与数据表**无关**。[[yii\db\ActiveRecord]] 通常是普通模型类的父类但与数据表有关联(译注:[[yii\db\ActiveRecord]] 类其实也是继承自 [[yii\base\Model]],增加了数据库处理)。
> Info: [[yii\base\Model]] 被用于普通模型类的父类并与数据表**无关**。[[yii\db\ActiveRecord]] 通常是普通模型类的父类但与数据表有关联(译注:[[yii\db\ActiveRecord]] 类其实也是继承自 [[yii\base\Model]],增加了数据库处理)。
`EntryForm` 类包含 `name``email` 两个公共成员,用来储存用户输入的数据。它还包含一个名为 `rules()` 的方法,用来返回数据验证规则的集合。上面声明的验证规则表示:
@ -102,11 +102,11 @@ class SiteController extends Controller
该操作首先创建了一个 `EntryForm` 对象。然后尝试从 `$_POST` 搜集用户提交的数据,由 Yii 的 [[yii\web\Request::post()]] 方法负责搜集。如果模型被成功填充数据(也就是说用户已经提交了 HTML 表单),操作将调用 [[yii\base\Model::validate()|validate()]] 去确保用户提交的是有效数据。
> 补充:表达式 `Yii::$app` 代表[应用](structure-applications.md)实例,它是一个全局可访问的单例。同时它也是一个[服务定位器](concept-service-locator.md),能提供 `request`,`response`,`db` 等等特定功能的组件。在上面的代码里就是使用 `request` 组件来访问应用实例收到的 `$_POST` 数据。
> Info: 表达式 `Yii::$app` 代表[应用](structure-applications.md)实例,它是一个全局可访问的单例。同时它也是一个[服务定位器](concept-service-locator.md),能提供 `request`,`response`,`db` 等等特定功能的组件。在上面的代码里就是使用 `request` 组件来访问应用实例收到的 `$_POST` 数据。
用户提交表单后,操作将会渲染一个名为 `entry-confirm` 的视图去确认用户输入的数据。如果没填表单就提交,或数据包含错误(译者:如 email 格式不对),`entry` 视图将会渲染输出,连同表单一起输出的还有验证错误的详细信息。
> 注意:在这个简单例子里我们只是呈现了有效数据的确认页面。实践中你应该考虑使用 [[yii\web\Controller::refresh()|refresh()]] 或 [[yii\web\Controller::redirect()|redirect()]] 去避免[表单重复提交问题](http://en.wikipedia.org/wiki/Post/Redirect/Get)。
> Note: 在这个简单例子里我们只是呈现了有效数据的确认页面。实践中你应该考虑使用 [[yii\web\Controller::refresh()|refresh()]] 或 [[yii\web\Controller::redirect()|redirect()]] 去避免[表单重复提交问题](http://en.wikipedia.org/wiki/Post/Redirect/Get)。
创建视图 <span id="creating-views"></span>
@ -176,7 +176,7 @@ http://hostname/index.php?r=site/entry
是的,其实数据首先由客户端 JavaScript 脚本验证,然后才会提交给服务器通过 PHP 验证。[[yii\widgets\ActiveForm]] 足够智能到把你在 `EntryForm` 模型中声明的验证规则转化成客户端 JavaScript 脚本去执行验证。如果用户浏览器禁用了 JavaScript, 服务器端仍然会像 `actionEntry()` 方法里这样验证一遍数据。这保证了任何情况下用户提交的数据都是有效的。
> 警告:客户端验证是提高用户体验的手段。无论它是否正常启用,服务端验证则都是必须的,请不要忽略它。
> Warning: 客户端验证是提高用户体验的手段。无论它是否正常启用,服务端验证则都是必须的,请不要忽略它。
输入框的文字标签是 `field()` 方法生成的,内容就是模型中该数据的属性名。例如模型中的 `name` 属性生成的标签就是 `Name`
@ -187,7 +187,7 @@ http://hostname/index.php?r=site/entry
<?= $form->field($model, 'email')->label('自定义 Email') ?>
```
> 补充:Yii 提供了相当多类似的小部件去帮你生成复杂且动态的视图。在后面你还会了解到自己写小部件是多么简单。你可能会把自己的很多视图代码转化成小部件以提高重用,加快开发效率。
> Info: Yii 提供了相当多类似的小部件去帮你生成复杂且动态的视图。在后面你还会了解到自己写小部件是多么简单。你可能会把自己的很多视图代码转化成小部件以提高重用,加快开发效率。
总结 <span id="summary"></span>

4
docs/guide-zh-CN/start-gii.md

@ -39,7 +39,7 @@ defined('YII_ENV') or define('YII_ENV', 'dev');
http://hostname/index.php?r=gii
```
> 补充: 如果你通过本机以外的机器访问 Gii,请求会被出于安全原因拒绝。你可以配置 Gii 为其添加允许访问的 IP 地址:
> Info: 如果你通过本机以外的机器访问 Gii,请求会被出于安全原因拒绝。你可以配置 Gii 为其添加允许访问的 IP 地址:
>
```php
'gii' => [
@ -113,7 +113,7 @@ http://hostname/index.php?r=country/index
* 模型:`models/Country.php` 和 `models/CountrySearch.php`
* 视图:`views/country/*.php`
> 补充:Gii 被设计成高度可定制和可扩展的代码生成工具。使用它可以大幅提高应用开发速度。请参考 [Gii](tool-gii.md) 章节了解更多内容。
> Info: Gii 被设计成高度可定制和可扩展的代码生成工具。使用它可以大幅提高应用开发速度。请参考 [Gii](tool-gii.md) 章节了解更多内容。
总结 <span id="summary"></span>

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save