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 |
||||
====================== |
||||
|
||||
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 |
||||
para mostrarlos en forma paginada. También has aprendido cómo utilizar la herramienta [Gii](tool-gii.md) para generar |
||||
código automáticamente, lo que transforma el hecho de programar en una tarea tan simple como la de completar algunos formularios. |
||||
En esta sección, resumiremos los recursos acerca de Yii que ayudan a ser más productivos al utilizar la librería. |
||||
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 |
||||
características comúnmente necesitadas, tales como obtener datos del usuario a través de formularios HTML, traer datos desde la base de datos, |
||||
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 |
||||
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 |
||||
- La Guía Definitiva: |
||||
Como el nombre indica, la guía precisamente define cómo Yii debería trabajar y te da una guía general |
||||
acerca de cómo usar la librería. Este es el tutorial simple más importante de Yii que deberías leer |
||||
antes de empezar a escribir código. |
||||
- La Referencia de Clases: |
||||
Este especifica el uso de cada clase provista por Yii. Debería ser utilizado mayormente cuando estés escribiendo |
||||
código y quieras entender el funcionamiento de alguna clase, método o propiedad en particular. |
||||
- Artículos de la Wiki: |
||||
Estos artículos son escritos por usuarios de Yii basado en experiencias propias. En su mayoría son escritos |
||||
como recetas que muestran cómo resolver problemas particulares en Yii. Aunque la calidad de estos artículos |
||||
puede ser tan buena como la Guía Definitiva, son particularmente útiles al cubrir aspectos más amplios |
||||
y puede a menudo ofrecer soluciones listas para usar. |
||||
- Libros |
||||
- [La Guía Definitiva](http://www.yiiframework.com/doc-2.0/guide-README.html): |
||||
Como su nombre lo indica, la guía define precisamente cómo debería trabajar Yii y provee guías generales |
||||
acerca de su utilización. Es el tutorial más importante de Yii, y el que deberías leer |
||||
antes de escribir cualquier código en Yii. |
||||
- [La Referencia de Clases](http://www.yiiframework.com/doc-2.0/index.html): |
||||
Esta especifica el uso de cada clase provista por Yii. Debería ser utilizada principalmente cuando estás escribiendo |
||||
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. |
||||
- [Los Artículos de la Wiki](http://www.yiiframework.com/wiki/?tag=yii2): |
||||
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 de cocina, y muestran cómo resolver problemas particulares utilizando Yii. Si bien la calidad de estos |
||||
puede no ser tan buena como la de la Guía Definitiva, son útiles ya que cubren un espectro muy amplio |
||||
de temas y puede proveer a menudo soluciones listas para usar. |
||||
- [Libros](http://www.yiiframework.com/doc/) |
||||
* [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 |
||||
en tu aplicación y lograr que sea más simple y rápido desarrollarla. |
||||
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. |
||||
* Comunidad |
||||
- [Foro](http://www.yiiframework.com/forum/) |
||||
- [GitHub](https://github.com/yiisoft/yii2) |
||||
- [Facebook](https://www.facebook.com/groups/yiitalk/) |
||||
- [Twitter](https://twitter.com/yiiframework) |
||||
- [LinkedIn](https://www.linkedin.com/groups/yii-framework-1483367) |
||||
|
||||
- Foro: <http://www.yiiframework.com/forum/> |
||||
- Chat IRC: El canal #yii en la red freenode (<irc://irc.freenode.net/yii>) |
||||
- Chat Gitter: <https://gitter.im/yiisoft/yii2> |
||||
- GitHub: <https://github.com/yiisoft/yii2> |
||||
- 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