Advertisement
  1. Code
  2. PHP

Subdominios del estilo de Basecamp con CodeIgniter

Scroll to top
Read Time: 13 min

Spanish (Español) translation by Luis Chiabrera (you can also view the original English article)

CodeIgniter es un marco PHP sencillo y ligero que se utiliza para crear aplicaciones web potentes. Hoy vamos a hacer algo ingenioso: combinaremos nombres de usuario y subdominios para hacer que la experiencia del usuario sea más cohesiva.

Si estás un poco confundido, esta función les permite a los usuarios acceder a sus cuentas escribiendo una URL personalizada, que se asigna a su nombre de usuario, como harbinger.yourapp.com.


Visión general

En este tutorial, vamos a crear tanto una vista frontal como una vista de aplicación de fondo, similar a la configuración utilizada en Basecamp, donde visitar basecamphq.com muestra la página de inicio, pero al visitar un subdominio muestra la página de inicio de sesión.

Usaremos la dirección ficticia nettutsapp.com y crearemos una página de "panel de control" de muestra; sin embargo, podrías incorporar esto en un proyecto existente con relativa facilidad.

basecamp-comaprebasecamp-comaprebasecamp-comapre

Antes de comenzar, asegúrate de tener un servidor web con PHP instalado. También es necesario descargar CodeIgniter; en el ejemplo, estoy usando CodeIgniter 2.0, pero el código debería funcionar en 1.7.2. ¡Entonces empecemos!


Paso 1: Configuración de DNS

Primero, debemos configurar nuestra configuración de DNS para que todos los subdominios se resuelvan en una sola dirección. Si estás trabajando en un servidor en vivo, entonces tendrás que cambiar la configuración de tu DNS con la compañía que maneja tu DNS. Esto es más comúnmente tu host web o registrador de dominio.

Para cubrir cada configuración en este tutorial tomaría demasiado tiempo. En su lugar, pídele ayuda a tu host para configurar subdominios comodín. Podrías esperar agregar algo como la línea a continuación a tu configuración de DNS.

En cambio, si estás trabajando en un servidor local, agregar un subdominio comodín al archivo hosts es bastante complicado. Lo que prefiero hacer es agregar entradas individuales para propósitos de prueba. Estos pueden ser eliminados después de que hayas terminado. Para nuestro dominio, necesitamos agregar cuatro entradas de la siguiente manera:

  • 127.0.0.1 nettutsapp.com
  • 127.0.0.1 user1.nettutsapp.com
  • 127.0.0.1 user2.nettutsapp.com
  • 127.0.0.1 user3.nettutsapp.com

Configuración de hosts de Mac

Para hacer esto en una Mac, abre Terminal y escribe sudo nano / etc / hosts. Usa las teclas de flecha para moverte a la parte inferior del documento y agrega las entradas a la parte inferior del archivo. Una vez hecho esto, presiona Ctrl + X e Y para confirmar el guardado.

dns-terminal1dns-terminal1dns-terminal1

Configuración de hosts de Windows

Si estás utilizando Windows, ve al directorio C: \ Archivos de programa \ system32 \ drivers \ etc y abre el archivo de hosts en el Bloc de notas o en tu editor de texto preferido. Agrega cuatro entradas, que se muestran arriba, y guarda el archivo.

Si has realizado cambios de DNS en un servidor activo, tomará un tiempo antes de que notes algún efecto. Si realizaste cambios en tu archivo de hosts, los cambios serán inmediatos.


Paso 2: Configuración de Apache

El objetivo aquí es configurar dos hosts virtuales en la configuración de Apache: uno sirve para la página de inicio (página de inicio de Basecamp) y el otro para la página que se ve cuando se accede a través de un subdominio (página del panel).

Para agregar nuevas entradas, debes abrir el archivo httpd.conf, que se encuentra en el directorio de instalación de Apache. Se encuentra a menudo en la carpeta bin / apache / conf. Sin embargo, dependiendo de la configuración de tu servidor, la ubicación puede variar.

Una vez abierto, debes agregar las dos entradas, que se muestran a continuación. Asegúrate de cambiar el DocumentRoot a una ubicación de tu elección, que hayas creado.

Nota: Recuerda el comodín y la ruta diferente del directorio en el segundo VirtualHost.

Usuarios de WAMP: recomiendo leer esta publicación, que describe cómo configurar VirtualHosts. También puedes encontrar problemas de permiso; así que recomiendo colocar tus directorios de VirtualHost dentro del directorio www.

Una vez que hayas guardado el archivo, debes reiniciar Apache para que los cambios surtan efecto.

Asegúrate de haber creado los directorios que especificaste en el archivo httpd.conf antes de iniciar el servidor.


Paso 4: Probando la configuración de nuestro servidor

Antes de probar la configuración, coloca una página html básica en cada uno de los directorios que creaste anteriormente. Tal vez agrega una sola línea de texto a cada uno, para que puedas diferenciarlos. He copiado un ejemplo para que lo uses.

A continuación, abre tu navegador favorito y primero verifica la dirección nettutsapp.com. Si todo funciona, deberías estar mirando la página que colocaste en el directorio 'nettutsappfront'.

A continuación, comprueba un subdominio, por ejemplo. user1.nettutsapp.com; Esto debería mostrarte la otra página que creaste en el directorio.

config-successconfig-successconfig-success

Puedes continuar para verificar los otros subdominios que especificaste en el archivo de hosts, que deberían mostrar la página guardada en nuestro directorio.

Paso 5: Instalación de CodeIgniter

Este tutorial asume que sabes cómo instalar CodeIgniter. Si no es así, deberías echar un vistazo a este video tutorial de Jeffrey Way, que explica el proceso en detalle.

Coloca los archivos CodeIgniter en nuestro directorio después de eliminar la página html que creamos anteriormente. Si estás utilizando CodeIgniter 1.7.2, es posible que desees sacar la carpeta de la aplicación de la carpeta del sistema.

nettutsapp-cinettutsapp-cinettutsapp-ci

Prueba la instalación explorando la URL user1.nettutsapp.com, y deberías ver la Página de bienvenida de CodeIgniter.

nettutsapp-ci-welcomenettutsapp-ci-welcomenettutsapp-ci-welcome

Paso 6: Configuración de CodeIgniter

Configura CodeIgniter como lo harías normalmente, como se describe en este tutorial. Es posible que desees eliminar el index.php de la URL, cargar automáticamente algunas bibliotecas o ayudantes, etc. Para los fines de este tutorial, necesitamos cargar automáticamente la biblioteca database y el ayudante de url. Abre el archivo autoload.php en el directorio de config y agrega las entradas relevantes.

También necesitamos cambiar el controlador predeterminado a uno que haremos, llamado panel de control. Este valor se puede cambiar dentro del archivo /config/routes.php.

Base_url

Para los subdominios de usuario, debemos hacer que la variable base_url sea dinámica, ya que la aplicación recibirá solicitudes de varios subdominios potenciales.

La forma más sencilla de hacerlo es mediante el uso de la variable HTTP_HOST. Abre el archivo config.php, busca la variable $ config ['base_url'] y reemplázala con el siguiente código:

Este código permite las conexiones HTTPS; sin embargo, si nunca piensas utilizar HTTPS, puedes simplificarlo a base_url = $ _SERVER ['HTTP_HOST'].

Configuración de la base de datos

Antes de continuar y agregar la configuración de la base de datos en nuestra aplicación CodeIgniter, debemos crear tanto la base de datos como una tabla de muestra.

Esta aplicación de ejemplo utiliza una base de datos y una tabla. Esta tabla contendrá todos los subdominios asignados actualmente, y cierta información básica sobre ellos. Si has decidido utilizar este código en tu propia aplicación, generalmente deberás asignar varios usuarios a un solo subdominio, sin embargo, el esquema de la base de datos está fuera del alcance de este tutorial.

La tabla se llama nt_subdomains, dentro de la base de datos ntapp, y tiene cuatro campos:

  • subdomain_id(primary, auto_increment)
  • subdomain_name
  • user_fname
  • user_sname

También he completado la tabla con dos registros, que coinciden con los subdominios que hemos agregado a nuestro archivo de hosts:

php-my-adminphp-my-adminphp-my-admin

Ahora podemos abrir la configuración de la base de datos, el archivo que se encuentra en /application/config/database.php, y editar los siguientes valores para que coincidan con tus ajustes de configuración personales.

Y hemos terminado de configurar nuestra instalación CodeIgniter. Vamos a empezar a usar los subdominios en nuestra aplicación.


Paso 7: Creando Nuestros Controladores y Vistas

Para esta aplicación, vamos a crear dos controladores. El primero es un controlador de error, que muestra un error si el subdominio no se ha registrado para su uso en la aplicación. El otro controlador es nuestro controlador de tablero principal, que es lo que el usuario ve si el subdominio se ha agregado a nuestra base de datos.

Controlador de error

Sigamos adelante y creamos nuestro controlador de errores. Primero, crea un nuevo archivo en el directorio / application / controllers, y llámelo error.php. Nota: el nombre del archivo es importante

Agrega el código de arriba a nuestro nuevo archivo error.php. La función de index carga una vista llamada 'error', que crearemos más adelante.

Controlador de tablero

Ahora necesitamos crear el controlador del tablero principal, que se cargará cuando un usuario ingrese a uno de los subdominios. El controlador luego verificará si el subdominio ha sido registrado y lo redireccionará según sea necesario. Agregaremos este código más adelante, pero primero, debemos crear el controlador básico.

Crea un nuevo archivo dentro del directorio de los controllers y asígnale el nombre dashboard.php. Dentro de este archivo, necesitamos crear el controlador y cargar la vista del tablero. Copia el código de abajo y guarda el archivo.

Vista de error

La página de error se mostrará cuando un usuario intente acceder a un subdominio, que la aplicación no ha registrado para su uso. Para los fines del tutorial, simplemente crea una página básica, mostrando el mensaje Subdominio no registrado. Agrega el código a continuación a un nuevo archivo llamado error.php y guárdalo dentro de la carpeta de aplicaciones / vistas.

Vista de tablero

initial-dashboardinitial-dashboardinitial-dashboard

Por el momento, solo crearemos una página de tablero básico. Puedes usar la misma estructura que la vista de error y simplemente cambiarla para leer Nettuts Dashboard, o algo parecido. Guarda la página como dashboard.php, dentro de la carpeta de aplicaciones / vistas.

Prueba las dos vistas visitando las URL:

  • user1.nettutsapp.com/index.php/error
  • user1.nettutsapp.com/index.php/dashboard

¿Funciona? Vamonos.


Paso 8: Extendiendo nuestro controlador de tablero (Parte 1)

El siguiente paso es extraer el nombre del subdominio en nuestro controlador para que podamos usarlo en una consulta de base de datos.

Vamos a insertar nuestro código de verificación de subdominio en la función de construct dentro del controlador del tablero. (Debajo de parent::Controller()). Esto significa que el subdominio se verificará cuando se acceda a cualquiera de las funciones dentro del controlador del tablero.

La forma más fácil de extraer el nombre del subdominio es usar la función de explode de PHP y configurar el delimitador en '.' Como solo necesitamos la primera parte, podemos dividirla en dos partes y luego asignar la primera parte (el nombre del subdominio) a una variable.

Para probar esto, podemos hacer echo de la variable en el controlador. Observa el código a continuación:

Accede a las URL de sus subdominios y verás el subdominio correcto en tu página, como se muestra a continuación.Nota: Puedes eliminar la declaración de eco ahora.

subdomain-parse1subdomain-parse1subdomain-parse1

Ahora que tenemos acceso al nombre del subdominio en nuestro controlador, podemos verificar si se ha agregado la tabla que creamos anteriormente.

Utilizaremos la clase ActiveRecord de CodeIgniter para construir nuestras consultas, que verificará la tabla para el subdominio al que se accede. Si está presente, el usuario podrá acceder a la página del panel. Si, por otro lado, no se ha ingresado al subdominio, entonces se les niega el acceso y luego se los redirige a la página de error que creamos anteriormente.

Para este tutorial, no usaremos modelos, ya que hace que el tutorial sea mucho más fácil de seguir. CodeIgniter es bastante flexible ya que no te obliga a usarlos.

Primero, debemos ensamblar la consulta como se muestra a continuación. Este código solo funcionará en PHP5, ya que utiliza el encadenamiento de métodos; Sin embargo, puedes cambiarlo a tu gusto.

Podemos usar la función CodeIgniter row () para verificar si ese subdominio existe en la tabla. Si no es así, entonces necesitamos usar la función de redirección para redirigir a nuestros usuarios al controlador de error. La siguiente parte del código está abajo:

Probemos esto accediendo a user1.nettutsapp.com, que debería dirigirte a la página del panel. Ahora, intenta user3.nettutsapp.com, que debería redirigirte a la página de error, ya que no se ingresó en la tabla.

subdomain-comapre1subdomain-comapre1subdomain-comapre1

Paso 9: Extendiendo nuestro Controlador de Tablero (Parte 2)

Ahora podemos usar la información de la tabla para mostrar información específica para cada subdominio.

Agregaremos a la función de index en nuestro controlador de tablero. Primero, copia el código del nombre del subdominio y la consulta de la base de datos que usamos antes.

Estamos utilizando la función row () de CodeIgniter para recuperar el resultado de la consulta. La función de row devuelve una sola fila de resultados, lo que significa que no necesitamos usar un bucle foreach; es innecesario

Luego, asigna los valores de columna de user_fname y user_sname a la array, $ data, que luego se pasa a la view.

Podemos usar estos valores dentro de nuestra vista usando las variables $ fname y $ sname. Abre la vista del tablero y edítala para leer:

¡Y hemos terminado! Vamos a probarlo.


Paso 10: Pruebas

Prueba todas las URL y, con suerte, si todo fue de acuerdo con el plan, los resultados deberían ser los siguientes:

  • nettutsapp.com → Front End Page
  • user1.nettutsapp.com → Panel de control (John Doe)
  • user2.nettutsapp.com → Panel de control (Steve Smith)
  • user3.nettutsapp.com → Página de error
finalresultfinalresultfinalresult

Controlador y código de vista

Aquí está la referencia completa utilizada para nuestros controladores y vistas:

Controlador de tablero

Controlador de error

Vista de tablero

Vista de error


Conclusión

Por supuesto, este tutorial describe solo una forma de obtener esta ingeniosa funcionalidad. Estoy seguro de que hay muchos más; así que siéntete libre de participar con tus pensamientos y opiniones en la sección de comentarios a continuación.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
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.