Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP

Construyendo tu Startup con PHP: Requisitos Funcionales y Base de Datos...

Read Time: 22 mins
This post is part of a series called Building Your Startup With PHP.
Building Your Startup With PHP: Getting Started
Building Your Startup With PHP: Geolocation and Google Places

Spanish (Español) translation by David Castrillón (you can also view the original English article)

Final product imageFinal product imageFinal product image
What You'll Be Creating

Esta es la segunda parte de la serie Construye tu Startup con PHP, en la que te llevo a través del desarrollo, desde el concepto hasta el lanzamiento de mi Startup, Meeting Planner. En esta parte, te doy una visión general de los requisitos y los objetivos de las funciones y luego te conduzco a través del diseño de base de datos inicial y la migración.

Porque no vamos a ver nacer un montón de funcionalidades inmediatamente, este episodio puede parecer un poco árido, pero es esencial para sentar las bases para todo lo que seguirá. Si no has diseñado migraciones de base de datos de Active Record y no has utilizado la aplicación de scaffolding de Yii, Gii, probablemente aprenderás mucho.

Requisitos de Características

Antes de describir los detalles de la base de datos de Meeting Planner, te guiaré a través de las características de alto nivel que ofrecerá Meeting Planner.

Planear Reuniones

  • Permite a los usuarios crear una solicitud de reunión e invitar a otra persona (sólo una persona para nuestro producto mínimo viable).
  • Permitir a los usuarios sugerir y seleccionar lugares.
  • Permite a los usuarios proponer y elegir días y horarios.
  • Permite a los usuarios enviar notas entre sí durante el proceso de planificación de la reunión.
  • Sugiere lugares adecuados cerca del usuario para las reuniones.
  • Graba un registro (o historial) de todas las adiciones y cambios a las reuniones.

Soporte de Lugares

  • Permite a los usuarios añadir los lugares favoritos en los que les gusta reunirse regularmente.
  • Permite a los usuarios agregar sus propios lugares para reuniones como el hogar y la oficina.
  • Sugiere lugares cerca de cada participante o equidistante, basados en parte en su popularidad.

Soporte de Usuarios

  • Mantiene las listas de las reuniones del usuario en proceso, confirmadas y pasadas.
  • Permite a los usuarios proporcionar su información de contacto como números telefónicos y direcciones de Skype para las conferencias en línea.
  • Permite a los usuarios apagar los correos electrónicos no deseados, es decir, darse de baja.
  • Requiere que los usuarios autentiquen sus correos electrónicos antes de entregarles las invitaciones.
  • Hace fácil detener los correos electrónicos relacionados con invitaciones no deseadas, el spam por ejemplo.

Hace las cosas más fáciles y rápidas

  • Permiten a los usuarios crear plantillas que hacen que programar reuniones comunes sea más fácil, con tiempos y días sugeridos y lugares favoritos; por ejemplo, me gustaría agendar una mañana de café con tal y tal en mi lugar preferido, día de la semana y hora de inicio
  • Envía mensajes de correo electrónico con los cambios de la reunión, con enlaces a URL a los comandos para hacer cambios, por ejemplo, cancelar o solicitar un cambio en el lugar, día u hora; autentica los usuarios a través de códigos de verificación en estos enlaces.
  • Envía recordatorios de la reunión un día antes con datos de contacto y direcciones.

Generar ingresos

  • Permite a los anunciantes, por ejemplo, restaurantes, cafeterías y espacios de oficinas de alquiler, publicitar sus lugares.

Aunque lo anterior no es una lista exhaustiva de características, te da una idea clara de lo que necesitamos que soporte el esquema de la base de datos.

Instalar el repositorio de Meeting Planner

Para empezar a configurar tu entorno de desarrollo para el Meeting Planner, puedes usar mi guía Programando con Yii2: Introducción; sigue las instrucciones para instalar Composer.

Todos los tutoriales de Meeting Planner serán marcados en nuestro repositorio de Github de código abierto. Por lo tanto, para esta parte de la serie de tutoriales, puedes instalar el Marco Básico del Meeting Planner desde aquí.

Para el Meeting Planner, he instalado la plantilla de aplicación avanzada de Yii2 que proporciona una arquitectura un poco más robusta para aplicaciones complejas, por ejemplo, diferentes aplicaciones de front-end (usuario final) y back-end acceso (administrativo).

Para empezar con el código, tendrás que clonar el repositorio, compruebe el lanzamiento etiquetado para esta parte del tutorial, ejecuta inicializar, y ordénale a Composer actualizar los archivos:

Estoy usando MAMP en mi entorno de desarrollo local. Por lo tanto, necesito apuntar a la URL de mi localhost de front-end preferida: ~/Sites/mp/frontend/web:

Si navegas en tu explorador a http://localhost:8888/mp, deberías ver algo como esto:

Meeting Planner Yii2 Home PageMeeting Planner Yii2 Home PageMeeting Planner Yii2 Home Page

Luego, necesitarás crear una base de datos en MySQL y configurar los parámetros en \environments\dev\common\main-local.php:

Antes de que podamos profundizar aún más en el funcionamiento de las migraciones, me gustaría guiarte a través del diseño de la base de datos preliminar.

Diseñando el Esquema de Base de Datos

Porque estoy en las primeras etapas de la construcción del código, estoy tratando de hacer un minucioso trabajo de construcción de la base de datos; sin embargo, es probable que el diseño necesite cambiar o evolucionar a medida que avanzamos.

Las migraciones de Active Record de Yii hacen relativamente fácil, crear programáticamente, las bases de datos en diferentes ambientes, por ejemplo, locales y de producción y gradualmente evolucionarlas. Puedes aprender más acerca Active Record de Yii aquí.

La tabla del Usuario

La primera migración construye la tabla del usuario, y se incluye en la plantilla de la aplicación avanzada de Yii — ver /mp/console/migrations/m130524_201442_init.php.

Esta migración le dice a Yii crear una nueva tabla SQL con los campos necesarios para una tabla de usuario que se muestra a continuación:

Puedes ejecutar la primera migración como se muestra a continuación:

Deberías ver algo como esto:

Yii provee soporte web incorporado para operaciones comunes tales como registro, login, logout y más. Esta tabla y esta funcionalidad proporcionará la base de apoyo para nuestras capacidades de autenticación iniciales. Podemos más tarde extenderla de varias maneras, por ejemplo soportando Twitter o Google OAuth para la autenticación.

Con las migraciones de Active Record, también puedes migrar hacia atrás. Esto puede ser especialmente útil durante el desarrollo. Por ejemplo, el comando migrating down borrará la tabla User:

Si necesitas ajustar el diseño de tu tabla, puedes hacerlo y luego volver a migrarla.

La Tabla Meeting

El esquema de la tabla Meeting y todas las tablas asociadas con las reuniones serán muy importantes para la funcionalidad de nuestra aplicación.

Aquí está el esquema de base para una reunión:

La base de una reunión consiste en un dueño, algún tipo de designador para la reunión, un mensaje de invitación, un campo de estado, y los campos estándar creados y actualizados para la hora.

Con Active Record, Yii puede ayudarnos a crear automáticamente relaciones entre las tablas. En la tabla Meeting, vamos a crear a una relación en la que cada Reunión tenga un propietario en la tabla User. Para ello en la migración, creamos una clave externa la conectando Meeting-> Owner_ID a User-> ID.

También tendremos que eliminar la clave externa en la migración inversa:

Ten paciencia conmigo defino más el esquema antes de saltar en el sistema de andamiaje automatizado de Yii, Gii.

Puedes ver todas las migraciones en la carpeta /mp/console/migrations:

Meeting Planner MigrationsMeeting Planner MigrationsMeeting Planner Migrations

Revisaremos la mayoría de ellos a continuación.

La Tabla Place

Los lugares también son un componente crítico en el Meeting Planner, porque son los lugares en los que todo el mundo se reunirá. Están indexados por geolocalización y referencia de Google Places.

Aquí está el esquema de un lugar:

Los lugares consisten en un name, place_type, status, created_at y updated_at. Pero también incluyen un identificador de Google google_place_id para relacionarlos con el directorio de Google Places.

Ten en cuenta que no hay ninguna geolocalización asociada con un lugar en esta tabla. Esto es porque la máquina MySQL InnoDB no soporta las indexaciones espaciales. Así que he creado una tabla secundaria utilizando la tabla MyISAM para las coordenadas de geolocalización de los lugares. Es la tabla Place_GPS

Observa que está relaciona con la tabla del lugar por place_id. La localización de los lugares es simplemente una coordenada de GPS - o Punto de MySQL.

La Tabla Participant

Los participantes de la reunión se almacenan en una tabla de unión llamada Participant. Se unen a la tabla de reunión por meeting_id y la tabla de usuario por participant_id. Si deseamos tener más participantes en una reunión, esta tabla lo permitirá en el futuro.

Otras Tablas de Reunión Relacionadas

Hay otras tablas que ayudan a definir las opciones de la planeación de la reunión.

La Tabla Meeting Time

Esta tabla contiene todos los horarios sugeridos para la reunión (y las fechas) al comienzo, las cuales son una marca de tiempo. Suggested_by muestra quién sugirió el tiempo. Y status determina si el horario fue seleccionado para la reunión.

La Tabla Meeting Place

Esta tabla muestra cuáles lugares han sido sugeridos para la reunión:

La Tabla Meeting Log

Esta tabla registra el historial de todas las adiciones y cambios para una reunión específica. Se registra cada acción tomada durante la programación de la reunión para proporcionar un historial cronológico de los eventos relacionados con una reunión. Ayudará a que los usuarios vean un registro de todos los cambios en sus reuniones con el tiempo, y también es probable que nos ayude en el desarrollo con la depuración.

La Tabla Meeting Note

Los usuarios estarán habilitados para enviar notas cortas de ida y vuelta cuando hagan cambios en las reuniones. Esta tabla registra esas notas.

Otras Tablas Relacionadas al Usuario

Hay varias tablas para ampliar la definición del usuario.

La Tabla Friend

Esta es una tabla índice que lista los amigos de cada usuario. También rastrea si son amigos favoritos y el número de reuniones que han tenido. Esto puede ser útil para simplificar la programación, por ejemplo con amigos frecuentes o favoritos primero.

La Tabla User Place

Se trata de una tabla de índice de lugares donde el usuario prefiere reunirse o donde se ha reunido en el pasado. Rastrearemos sus lugares favoritos y el número de reuniones celebradas por ese usuario aquí. El campo is_special indicará que un lugar es la casa, la oficina o lugar de encuentros del usuario.

La Tabla User Contact

Esta tabla proporciona información de contacto de un usuario específico, por ejemplo, números telefónicos, dirección de Skype y notas asociadas para ponerse en contacto con el usuario en aquellos lugares.

Para simplificar, saltaré sobre el esquema de la plantilla de reuniones en este momento. Y todavía no he desarrollado las funciones relacionadas con los ingresos. La razón principal de esto es que tengo mucho en mi plato al momento de lograr y hacer que corran las funciones principales y completar los primeros episodios de esta serie de tutoriales. Sin embargo, este es un momento de aprendizaje. Es un buen ejemplo de un emprendedor con recursos limitados, centrándose en la funcionalidad sin "darse cuenta" que la generación de ingresos también es una característica principal. Porque creo que puedo arrancar inicialmente el Meeting Planner sin ingresos, es un compromiso que puedo hacer en este momento.

Ejecutar las Migraciones de la Base de Datos

Ahora que tienes un poco más de fondo en nuestro esquema de base de datos y las migraciones de Active Records, vamos a ejecutar el resto de ellas:

Deberías ver algo como esto:

Del mismo modo, cuando instalemos el Meeting Planner en producción, usaremos las migraciones para construir también allí la base de datos inicial. No hay necesidad de exportar e importar archivos SQL que pueden romperse dependiendo de la variedad de versiones que podremos utilizar entre cada entorno.

Registrando el Usuario Administrador

Antes de ir más allá, necesitas registrarte como usuario administrador. Haz clic en el enlace de registro en la barra de herramientas y simplemente regístrate en la aplicación.

Meeting Planner SignupMeeting Planner SignupMeeting Planner Signup

Si el registro fue exitoso, cuando regreses a la página principal, verás que la barra de herramientas indica el estado de tu sesión.

Meeting Planner Toolbar Logged InMeeting Planner Toolbar Logged InMeeting Planner Toolbar Logged In

Estos formularios y la lógica de la aplicación están incluidos en la plantilla de aplicación avanzada de Yii.

Usando Gii de Yii para Construir el Andamiaje

Ahora podemos construir el andamiaje para soportar el código Modelo Vista Controlador para las operaciones CRUD (Create, Read, Update, Delete) comunes.

Usaremos Gii, el increíble generador de código de Yii, para construir mucho del código de nuestro framework básico. El nombre puede ser tonto pero es increíblemente poderoso y central para el desarrollo de Yii. Empezaremos con las reuniones y los lugares.

Usando Gii

Apunta tu navegador a http://localhost:8888/mp/gii. Deberías ver esto:

Meeting Planner Yii2 Gii CRUD MenuMeeting Planner Yii2 Gii CRUD MenuMeeting Planner Yii2 Gii CRUD Menu

Generando Modelos

Cuando se compila con Gii, generalmente comienzas con el Generador de Modelo para cada tabla. Antes de que puedas utilizar el Generador de Modelo, tienes que correr tus migraciones para crear las tablas en la base de datos, como lo hicimos anteriormente. Gii utiliza las definiciones de la tabla SQL para generar el código para tu Modelo.

Meeting Planner Yii2 Gii Model GeneratorMeeting Planner Yii2 Gii Model GeneratorMeeting Planner Yii2 Gii Model Generator

Usemos el Generador de Modelo para generar el código de la tabla Meeting. El código ya se ha generado en tu repositorio Github, pero no dudes en pasar a través de estos ejercicios otra vez. Gii previsualizará y opcionalmente sobrescribirá el código por ti.

Rellena el generador de modelo como se muestra a continuación para el modelo de la reunión:

Meeting Planner Yii2 Gii Model Generator MeetingsMeeting Planner Yii2 Gii Model Generator MeetingsMeeting Planner Yii2 Gii Model Generator Meetings

Luego, genera el modelo para el lugar:

Meeting Planner Yii2 Gii Model Generator Place TableMeeting Planner Yii2 Gii Model Generator Place TableMeeting Planner Yii2 Gii Model Generator Place Table

Gii es asombroso - al construir sobre la definición de nuestra tabla, genera toneladas de lógica.

En el modelo /mp/frontend/models/Meeting.php, verás etiquetas de atributos autogenerados:

Genera reglas de validación de campos para los formularios:

Y genera relaciones en la base de datos - aquí hay algunos ejemplos:

Generando CRUD

Ahora podemos usar el generador CRUD para construir el código para crear, leer, actualizar y borrar operaciones.

Visita el Generador CRUD y creálo para las reuniones. Ten en cuenta que el front-end es la aplicación Yii que verá el usuario.

Meeting Planner Yii2 Gii CRUD GeneratorMeeting Planner Yii2 Gii CRUD GeneratorMeeting Planner Yii2 Gii CRUD Generator

Al hacer clic en Vista Previa, deberías ver algo como esto:

Meeting Planner Yii2 Gii Model Generator OverwriteMeeting Planner Yii2 Gii Model Generator OverwriteMeeting Planner Yii2 Gii Model Generator Overwrite

Cuando haces clic en Generar, deberías ver los siguientes resultados:

Meeting Planner Yii2 Gii Model Generator SuccessMeeting Planner Yii2 Gii Model Generator SuccessMeeting Planner Yii2 Gii Model Generator Success

A continuación, repite el proceso anterior para los lugares.

Ya, en realidad puedes buscar reuniones y lugares en nuestro sitio para ver el código que se ha generado en la acción. Apunta a tu navegador en http://localhost:8888/mp/meeting. Debe verse algo como esto:

Meeting Planner Meeting ControllerMeeting Planner Meeting ControllerMeeting Planner Meeting Controller

Si has registrado tu cuenta, debes ser capaz de crear una reunión. Observa que Gii no sabe la diferencia entre los campos que nuestro código debe manejar y los que deben ser proporcionados por los usuarios. Podremos limpiarlos en los próximos tutoriales. Por ahora, necesitarás ingresar números enteros para owner_id (uso 1, que es el primer usuario registrado), meeting_type, status, created_at y updated_at:

Meeting Planner Meeting Create FormMeeting Planner Meeting Create FormMeeting Planner Meeting Create Form

Después de crear un par de reuniones, la página de índice de reuniones tendrá el siguiente aspecto:

Meeting Planner Meeting Controller with DataMeeting Planner Meeting Controller with DataMeeting Planner Meeting Controller with Data

Combinando el poder de Gii y Yii hace que construir aplicaciones web sea mucho más rápido de lo que sería de otra manera. Es bastante sorprendente que con solo una estructura de tabla de base de datos y un bloque de código para la migración, podamos avanzar pasos al trabajar con los controladores y los formularios, construidos de manera responsive con Bootstrap.

¿Qué sigue?

Espero que hayas encontrado el repaso de la base de datos y Gii interesantes. El próximo artículo de esta serie se centrará en la construcción de las funcionalidades sobre los lugares. Describirá cómo usar Google Places, Google Maps y la geolocalización de HTML5 para construir las características que necesita el Meeting Planner. Si deseas echar un vistazo a estos temas, escribí un tutorial relacionado, Cómo Usar Zillow Mapas de Barrio y Geolocalización de HTML5.

Por favor siéntete libre de agregar tus preguntas y comentarios abajo; generalmente, participo en los debates. También puedes encontrarme en Twitter @reifman o envíame un correo electrónico directamente.

Enlaces Relacionados

Advertisement
Did you find this post useful?
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.