Luciano Baraglia
8 years ago
committed by
Paul Klimov
4 changed files with 143 additions and 31 deletions
@ -0,0 +1,72 @@ |
|||||||
|
Paginación |
||||||
|
========== |
||||||
|
|
||||||
|
Cuando hay muchos datos a mostrar en una sola página, una estrategia común es mostrarlos en varias |
||||||
|
páginas y en cada una de ellas mostrar sólo una pequeña porción de datos. Esta estrategia es conocida como *paginación*. |
||||||
|
|
||||||
|
Yii utiliza el objeto [[yii\data\Pagination]] para representar la información acerca del esquema de paginación. En particular, |
||||||
|
|
||||||
|
* [[yii\data\Pagination::$totalCount|cuenta total]] especifica el número total de ítems de datos. Ten en cuenta que |
||||||
|
este es normalmente un número mucho mayor que el número de ítems necesarios a mostrar en una simple página. |
||||||
|
* [[yii\data\Pagination::$pageSize|tamaño de página]] especifica cuántos ítems de datos contiene cada página. El valor |
||||||
|
por defecto es 20. |
||||||
|
* [[yii\data\Pagination::$page|página actual]] da el número de la página actual (comenzando desde 0). El valor |
||||||
|
por defecto es 0, lo que sería la primera página. |
||||||
|
|
||||||
|
Con un objeto [[yii\data\Pagination]] totalmente especificado, puedes obtener y mostrar datos en partes. Por ejemplo, |
||||||
|
si estás recuperando datos de una base de datos, puedes especificar las cláusulas `OFFSET` y `LIMIT` de la consulta a la BD |
||||||
|
correspondientes a los valores provistos por la paginación. A continuación hay un ejemplo, |
||||||
|
|
||||||
|
```php |
||||||
|
use yii\data\Pagination; |
||||||
|
|
||||||
|
// construye una consulta a la BD para obtener todos los artículos con status = 1 |
||||||
|
$query = Article::find()->where(['status' => 1]); |
||||||
|
|
||||||
|
// obtiene el número total de artículos (pero no recupera los datos de los artículos todavía) |
||||||
|
$count = $query->count(); |
||||||
|
|
||||||
|
// crea un objeto paginación con dicho total |
||||||
|
$pagination = new Pagination(['totalCount' => $count]); |
||||||
|
|
||||||
|
// limita la consulta utilizando la paginación y recupera los artículos |
||||||
|
$articles = $query->offset($pagination->offset) |
||||||
|
->limit($pagination->limit) |
||||||
|
->all(); |
||||||
|
``` |
||||||
|
|
||||||
|
¿Qué página de artículos devolverá el ejemplo de arriba? Depende de si se le es pasado un parámetro llamado `page`. |
||||||
|
Por defecto, la paginación intentará definir la [[yii\data\Pagination::$page|página actual]] con |
||||||
|
el valor del parámetro `page`. Si el parámetro no es provisto, entonces tomará por defecto el valor 0. |
||||||
|
|
||||||
|
Para facilitar la construcción de elementos UI que soporten paginación, Yii provee el widget [[yii\widgets\LinkPager]], |
||||||
|
que muestra una lista de botones de navegación que el usuario puede presionar para indicar qué página de datos debería mostrarse. |
||||||
|
El widget toma un objeto de paginación y tal manera conoce cuál es la página actual y cuántos botones |
||||||
|
debe mostrar. Por ejemplo, |
||||||
|
|
||||||
|
```php |
||||||
|
use yii\widgets\LinkPager; |
||||||
|
|
||||||
|
echo LinkPager::widget([ |
||||||
|
'pagination' => $pagination, |
||||||
|
]); |
||||||
|
``` |
||||||
|
|
||||||
|
Si quieres construir los elementos de UI manualmente, puedes utilizar [[yii\data\Pagination::createUrl()]] para generar URLs que |
||||||
|
dirigirán a las distintas páginas. El método requiere un parámetro de página y generará una URL apropiadamente formada |
||||||
|
contieniendo el parámetro de página. Por ejemplo, |
||||||
|
|
||||||
|
```php |
||||||
|
// especifica la ruta que la URL generada debería utilizar |
||||||
|
// Si no lo especificas, se utilizará la ruta de la petición actual |
||||||
|
$pagination->route = 'article/index'; |
||||||
|
|
||||||
|
// muestra: /index.php?r=article%2Findex&page=100 |
||||||
|
echo $pagination->createUrl(100); |
||||||
|
|
||||||
|
// muestra: /index.php?r=article%2Findex&page=101 |
||||||
|
echo $pagination->createUrl(101); |
||||||
|
``` |
||||||
|
|
||||||
|
> Tip: puedes personalizar el parámetro `page` de la consulta configurando |
||||||
|
la propiedad [[yii\data\Pagination::pageParam|pageParam]] al crear el objeto de la paginación. |
@ -0,0 +1,31 @@ |
|||||||
|
Trabajar con Passwords |
||||||
|
====================== |
||||||
|
|
||||||
|
La mayoría de los desarrolladores saben que los passwords no deben ser guardados en texto plano, pero muchos desarrolladores aún creen |
||||||
|
que es seguro aplicar a los passowrds hash `md5` o `sha1`. Hubo un tiempo cuando utilizar esos algoritmos de hash mencionados era suficiente, |
||||||
|
pero el hardware moderno hace posible que ese tipo de hash e incluso más fuertes, puedan revertirse rápidamente utilizando ataques de fuerza bruta. |
||||||
|
|
||||||
|
Para poder proveer de una seguridad mayor para los passwords de los usuarios, incluso en el peor de los escenarios (tu aplicación sufre una brecha de seguridad), |
||||||
|
necesitas utilizar un algoritmo que resista los ataques de fuerza bruta. La mejor elección actualmente es `bcrypt`. |
||||||
|
En PHP, puedes generar un hash `bcrypt` utilizando la [función crypt](http://php.net/manual/en/function.crypt.php). Yii provee |
||||||
|
dos funciones auxiliares que hacen que `crypt` genere y verifique los hash más fácilmente. |
||||||
|
|
||||||
|
Cuando un usuario provee un password por primera vez (por ej., en la registración), dicho password necesita ser pasado por un hash: |
||||||
|
|
||||||
|
|
||||||
|
```php |
||||||
|
$hash = Yii::$app->getSecurity()->generatePasswordHash($password); |
||||||
|
``` |
||||||
|
|
||||||
|
El hash puede estar asociado con el atributo del model correspondiente, de manera que pueda ser almacenado en la base de datos para uso posterior. |
||||||
|
|
||||||
|
Cuando un usuario intenta ingresar al sistema, el password enviado debe ser verificado con el password con hash almacenado previamente: |
||||||
|
|
||||||
|
|
||||||
|
```php |
||||||
|
if (Yii::$app->getSecurity()->validatePassword($password, $hash)) { |
||||||
|
// todo en orden, dejar ingresar al usuario |
||||||
|
} else { |
||||||
|
// password erróneo |
||||||
|
} |
||||||
|
``` |
@ -1,32 +1,35 @@ |
|||||||
Mirando Hacia Adelante |
Mirando Hacia Adelante |
||||||
====================== |
====================== |
||||||
|
|
||||||
Hasta ahora, has creado una aplicación completa en Yii, y has aprendido cómo implementar algunas de las características más típicas y necesarias, como la de obtener datos de los usuarios a través de un formulario HTML, y traer datos de la base de datos |
Si has leído el capítulo "Comenzando con Yii" completo, has creado una aplicación completa en Yii. En el proceso, has aprendido cómo implementar algunas |
||||||
para mostrarlos en forma paginada. También has aprendido cómo utilizar la herramienta [Gii](tool-gii.md) para generar |
características comúnmente necesitadas, tales como obtener datos del usuario a través de formularios HTML, traer datos desde la base de datos, |
||||||
código automáticamente, lo que transforma el hecho de programar en una tarea tan simple como la de completar algunos formularios. |
y mostrar datos utilizando paginación. También has aprendido a utilizar [Gii](https://github.com/yiisoft/yii2-gii/blob/master/docs/guide/README.md) para generar |
||||||
En esta sección, resumiremos los recursos acerca de Yii que ayudan a ser más productivos al utilizar la librería. |
código automáticamente. Utilizar Gii para la generación de código transforma la carga en el proceso de tu desarrollo Web en una tarea tan simple como solamente completar unos formularios. |
||||||
|
|
||||||
|
Esta sección resumirá los recursos disponibles de Yii que te ayudarán a ser más productivo al utilizar el framework. |
||||||
|
|
||||||
* Documentación |
* Documentación |
||||||
- La Guía Definitiva: |
- [La Guía Definitiva](http://www.yiiframework.com/doc-2.0/guide-README.html): |
||||||
Como el nombre indica, la guía precisamente define cómo Yii debería trabajar y te da una guía general |
Como su nombre lo indica, la guía define precisamente cómo debería trabajar Yii y provee guías generales |
||||||
acerca de cómo usar la librería. Este es el tutorial simple más importante de Yii que deberías leer |
acerca de su utilización. Es el tutorial más importante de Yii, y el que deberías leer |
||||||
antes de empezar a escribir código. |
antes de escribir cualquier código en Yii. |
||||||
- La Referencia de Clases: |
- [La Referencia de Clases](http://www.yiiframework.com/doc-2.0/index.html): |
||||||
Este especifica el uso de cada clase provista por Yii. Debería ser utilizado mayormente cuando estés escribiendo |
Esta especifica el uso de cada clase provista por Yii. Debería ser utilizada principalmente cuando estás escribiendo |
||||||
código y quieras entender el funcionamiento de alguna clase, método o propiedad en particular. |
código y deseas entender el uso de una clase, método o propiedad en particular. El uso de la referencia de clases es mejor luego de un entendimiento contextual del framework. |
||||||
- Artículos de la Wiki: |
- [Los Artículos de la Wiki](http://www.yiiframework.com/wiki/?tag=yii2): |
||||||
Estos artículos son escritos por usuarios de Yii basado en experiencias propias. En su mayoría son escritos |
Los artículos de la wiki son escritos por usuarios de Yii basados en sus propias experiencias. La mayoría de ellos están escritos |
||||||
como recetas que muestran cómo resolver problemas particulares en Yii. Aunque la calidad de estos artículos |
como recetas de cocina, y muestran cómo resolver problemas particulares utilizando Yii. Si bien la calidad de estos |
||||||
puede ser tan buena como la Guía Definitiva, son particularmente útiles al cubrir aspectos más amplios |
puede no ser tan buena como la de la Guía Definitiva, son útiles ya que cubren un espectro muy amplio |
||||||
y puede a menudo ofrecer soluciones listas para usar. |
de temas y puede proveer a menudo soluciones listas para usar. |
||||||
- Libros |
- [Libros](http://www.yiiframework.com/doc/) |
||||||
* [Extensiones](http://www.yiiframework.com/extensions/): |
* [Extensiones](http://www.yiiframework.com/extensions/): |
||||||
Yii cuenta con una librería de cientos de extensiones que han sido provistas por la comunidad de usuarios que pueden ser fácilmente integradas |
Yii puede hacer alarde de una librería de miles de extensiones contribuidas por usuarios, que pueden fácilmente conectadas a tu aplicación, haciendo que el desarrollo de la misma sea todavía más fácil y rápido. |
||||||
en tu aplicación y lograr que sea más simple y rápido desarrollarla. |
|
||||||
* Comunidad |
* Comunidad |
||||||
- [Foro](http://www.yiiframework.com/forum/) |
- Foro: <http://www.yiiframework.com/forum/> |
||||||
- [GitHub](https://github.com/yiisoft/yii2) |
- Chat IRC: El canal #yii en la red freenode (<irc://irc.freenode.net/yii>) |
||||||
- [Facebook](https://www.facebook.com/groups/yiitalk/) |
- Chat Gitter: <https://gitter.im/yiisoft/yii2> |
||||||
- [Twitter](https://twitter.com/yiiframework) |
- GitHub: <https://github.com/yiisoft/yii2> |
||||||
- [LinkedIn](https://www.linkedin.com/groups/yii-framework-1483367) |
- Facebook: <https://www.facebook.com/groups/yiitalk/> |
||||||
|
- Twitter: <https://twitter.com/yiiframework> |
||||||
|
- LinkedIn: <https://www.linkedin.com/groups/yii-framework-1483367> |
||||||
|
- Stackoverflow: <http://stackoverflow.com/questions/tagged/yii2> |
||||||
|
Loading…
Reference in new issue