forked from yiisoft/yii
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
qiang.xue
committed
Jan 1, 2012
1 parent
a418b97
commit 26bdbe3
Showing
236 changed files
with
12,512 additions
and
1,301 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
Configurando la Base de Datos | ||
============================= | ||
|
||
Habiendo creado un esqueleto para la aplicación y terminado el diseño de la base de datos, en esta sección vamos a crear la base de datos del blog y establecer una conexión en el esqueleto de la aplicación | ||
|
||
|
||
Creando la Base de Datos | ||
------------------------ | ||
|
||
Elegimos crear una base de datos SQLite. Como el soporte de bases de datos en Yii está hecho por encima de [PDO](http://www.php.net/manual/en/book.pdo.php), podemos facilmente cambiar entre diferentes tipos de SGBD (e.g. MySQL, PostgreSQL) sin la necesidad de cambiar código en nuestra aplicación. | ||
|
||
Creamos el archivo de base de datos `blog.db` en el directorio `/wwwroot/blog/protected/data`. Notar que tanto el directorio y el archivo de la base de datos deben tener permisos de escritura por el Servidor Web, como lo requiere SQLite. Podemos simplemente copiar el archivo de base de datos desde el demo de blog en nuestra instalación de Yii que se encuentra en `/wwwroot/yii/demos/blog/protected/data/blog.db`. También podemos generar la base de datos ejecutando las sentencias SQL del archivo `/wwwroot/yii/demos/blog/protected/data/schema.sqlite.sql`. | ||
|
||
> Tip: Para ejecutar sentencias SQL, podemos usar la herramienta de línea de comando `sqlite3` que se encuentra en [Sitio Oficial de SQLite](http://www.sqlite.org/download.html). | ||
|
||
Estableciendo Conexión | ||
---------------------- | ||
|
||
Para usar la base de datos del blog en el esqueleto de la aplicación que creamos, necesitamos modificar su [configuración de aplicación](http://www.yiiframework.com/doc/guide/basics.application#application-configuration) que se encuentra en el script PHP `/wwwroot/blog/protected/config/main.php`. El script retorna un array asociativo consitiendo de pares nombre-valor, cada uno de los cuales es usado para inicializar una propiedad con permisos de escritura de la [instancia de la aplicación](http://www.yiiframework.com/doc/guide/basics.application). | ||
|
||
Configuramos el componente `db` como sigue, | ||
|
||
~~~ | ||
[php] | ||
return array( | ||
...... | ||
'components'=>array( | ||
...... | ||
'db'=>array( | ||
'connectionString'=>'sqlite:/wwwroot/blog/protected/data/blog.db', | ||
'tablePrefix'=>'tbl_', | ||
), | ||
), | ||
...... | ||
); | ||
~~~ | ||
|
||
La configuración anterior dice que tenemos un [componente de aplicación](http://www.yiiframework.com/doc/guide/basics.application#application-component) `db` donde la propiedad `connectionString` debe ser inicializada como `sqlite:/wwwroot/blog/protected/data/blog.db` y la propiedad `tablePrefix` debe ser `tbl_`. | ||
|
||
Con esta configuración, podemos acceder al objeto de conexión de la BD usando `Yii::app()->db` en cualquier lugar de nuestro código. Notar que `Yii::app()`retorna una instancia de la aplicación que creamos en el script de entrada. Si se está interesado en los posibles métodos y propiedad que una conexión a BD tiene, hay que fijarse en su [Referencia de Clase|CDbConnection]. De todas formas, en la mayoría de los casos no vamos a usar el objeto de conexión a BD directamente. En vez de eso, vamos a utilizar [ActiveRecord](http://www.yiiframework.com/doc/guide/database.ar) para acceder a la base de datos. | ||
|
||
Nos gustaría explicar un poco más acerca de la propiedad `tablePrefix` que seteamos en la configuración. Esto indica que la conexión `db` debe respetar el hecho que estamos usando `tbl_` como el prefijo de los nombres de las tablas de base de datos. En particular, si en una sentencia SQL hay un token entre llaves dobles (e.g. `{{post}}`), entonces la conexión `db` debe traducirlo al nombre de la tabla con el prefijo (e.g. `tbl_post`) antes de enviarlo al SGBD para ejecución. Esta característica es útil especialmente si en un futuro necesitamos modificar el prefijo de los nombres de las tablas sin tocas el código fuente. Por ejemplo, si estamos desarrollando un Gestor de Contenido (CMS), podemos explotar esta característica para que cuando sea instalado en un nuevo entorno, los usuarios puedan elegir el prefijo de tabla que deseen. | ||
|
||
> Tip: Si se quiere usar MySQL en vez de SQLite para almacenar los datos, | ||
> se puede crear una base de datos MySQL llamada `blog` usando las sentencias | ||
> SQL que se encuentran en `/wwwroot/yii/demos/blog/protected/data/schema.mysql.sql`. | ||
> Luego, modificar la configuración de la aplicación de la siguiente forma, | ||
> | ||
> ~~~ | ||
> [php] | ||
> return array( | ||
> ...... | ||
> 'components'=>array( | ||
> ...... | ||
> 'db'=>array( | ||
> 'connectionString' => 'mysql:host=localhost;dbname=blog', | ||
> 'emulatePrepare' => true, | ||
> 'username' => 'root', | ||
> 'password' => '', | ||
> 'charset' => 'utf8', | ||
> 'tablePrefix' => 'tbl_', | ||
> ), | ||
> ), | ||
> ...... | ||
> ); | ||
> ~~~ | ||
|
||
<div class="revision">$Id: prototype.database.txt 2332 2010-08-24 20:55:36Z mdomba $</div> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
Diseño General | ||
============== | ||
|
||
Basado en el análisis de requerimientos, decidimos usar las siguientes tablas en la base de datos para guardar los datos persistentes de nuestro blog: | ||
|
||
* `tbl_user` guarda la información del usuario, incluyendo el nombre de usuario y password. | ||
* `tbl_post` guarda la información del post. Consiste principalmente de las siguientes columnas: | ||
- `title`: requerido, titulo del post; | ||
- `content`: requerido, contenido del post, el cual usa: [formato Markdown](http://daringfireball.net/projects/markdown/syntax); | ||
- `status`: requerido, estado del post, puede contener uno de los siguientes valores: | ||
* 1, significa que el post es un borrador y no es visible al público; | ||
* 2, significa que el post está disponible al público; | ||
* 3, significa que el post está desactualizado y no es visible en la lista de posts (aunque sí se puede acceder individualmente) | ||
- `tags`: opcional, una lista de palabras separadas por comas, que categorizan al post. | ||
* `tbl_comment`guarda la información del comentario del post. Cada comentario está asociado con un post y principalmente consiste en las siguientes columnas: | ||
- `name`: requerido, el nombre del autor; | ||
- `email`: requerido, el email del autor; | ||
- `website`: opcional, la URL del sitio web del autor; | ||
- `content`: requerido, el contenido del comentario en formato de texto plano. | ||
- `status`: requerido, estado del comentario, indica si el comentario está aprobado (valor 2) o no (valor 1). | ||
* `tbl_tag` guarda información sobre la frecuencia de la etiqueta del post, necesario para implementar la nube de etiquetas. La tabla contiene principalmente las siguientes columnas: | ||
- `name`: requerido, el nombre único de la etiqueta; | ||
- `frequency`: requerido, la cantidad de veces que la etiqueta aparece en los posts. | ||
* `tbl_lookup`guarda información genérica para la localizar información. Es esencialmente un mapeo entre valores enteros y cadenas de texto. El primero se refiere a la representación en nuestro código, mientras el segundo se corresponde con la presentación a los usuarios finales. Por ejemplo, usamos el entero 1 para representar el estado de un post en borrador y una cadena `Draft` mostrar éste estado a los ususarios finales. Esta tabla consiste principalmente de las siguientes columnas: | ||
- `name`: la representación textual del item de datos que va a ser desplegada al usuario final; | ||
- `code`: la representación numérica del item de datos; | ||
- `type`: el tipo del item de datos; | ||
- `position`: el orden relativo en el que se muestran los items de datos entre los demás items del mismo tipo. | ||
|
||
El siguiente diagrama de Entidad-Relación (ER) muestra la estructura de la tablas y las relaciones entre ellas. | ||
|
||
![Entity-Relation Diagram of the Blog Database](schema.png) | ||
|
||
Sentencias SQL completas correspondientes al diagrama pueden ser encontradas en [el blog demo](http://www.yiiframework.com/demos/blog/). En nuestra instalación de Yii, se encuentran en el archivo `/wwwroot/yii/demos/blog/protected/data/schema.sqlite.sql`. | ||
|
||
|
||
|
||
> Info: Nombramos todos los nombres de tablas y columnas en minúscula. Esto se debe a que diferentes Gestores de Bases de Datos, cuentan con diferentes criterios para el trato de mayúsculas y minúsculas, por lo que evitamos este tipo de problemas. | ||
> | ||
> También agregamos un prefijo `tbl_` a todas nuestras tablas. Esto se hace con dos propósitos. Primero, el prefijo introduce un Espacio de Nombres (namespace) a las tablas en caso de que necesiten coexistir con otras tablas en la misma base de datos, lo cual sucede seguido en entornos compartidos donde una base de datos es usada por múltiples aplicaciones. Segundo, usando prefijos en las tablas reducimos la posibilidad de tener algunos nombres de tablas que sean palabras reservadas en el Gestor de Base de Datos que utilicemos. | ||
|
||
Dividimos el desarrollo de nuestra aplicación de blog en los siguientes hitos. | ||
|
||
* Hito 1: crear un prototipo del sistema de blog. Debe consistir de las funcionalidades más requeridas. | ||
* Hito 2: completar el gestor de posts. Esto incluye, listar, mostrar, actualizar y borrar posts. | ||
* Hito 3: completar el gestor de comentarios. Esto incluye crear, listar, aprobar, actualizar y borrar comentarios de posts. | ||
* Hito 4: implementar portlets. Esto incluye a los portlets de menú, login, nube de etiquetas y de comentarios recientes | ||
* Hito 5: Ajustes finales y puesta en producción. | ||
|
||
<div class="revision">$Id: start.design.txt 1677 2010-01-07 20:29:26Z qiang.xue $</div> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
Análisis de Requerimientos | ||
===================== | ||
|
||
La Aplicación de Blog que desarrollaremos cuenta con un usuario. El propietario del sistema va a ser capaz de ejecutar las siguientes acciones: | ||
|
||
* Login y logout | ||
* Crear, actualizar y borrar posts | ||
* Publicar, despublicar y archivar posts | ||
* Aprobar y borrar comentarios | ||
|
||
El resto de los usuarios son "invitados" que van a poder ejecutar las siguientes acciones: | ||
|
||
* Leer posts | ||
* Crear comentarios | ||
|
||
Se incluyen los siguientes requerimientos adicionales para este sistema: | ||
|
||
* La página inicial del sistema debe mostrar una lista de los posts más recientes. | ||
* Si una página contiene más de 10 posts, deben ser desplegados en páginas. | ||
* El sistema debe ser capaz de listar posts con determinada etiqueta. | ||
* El sistema debe mostrar una nube de tags indicando su frecuencia de uso. | ||
* El sistema debe mostrar una lista de los comentarios más recientes. | ||
* El sistema debe ser capaz de poder verse con varios temas. | ||
* El sistema debe contar con URLs amigables para los buscadores. | ||
|
||
<div class="revision">$Id: start.requirements.txt 683 2009-02-16 05:20:17Z qiang.xue $</div> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.