Cómo gestionar múltiples aplicaciones en CodeIgniter

Hoy, vamos a explorar cómo puede administrar múltiples aplicaciones en el marco web de CodeIgniter usando un solo código base. En el transcurso de eso, seguiremos adelante y crearemos dos aplicaciones de CodeIgniter diferentes que compartirán el código base de código de CodeIgniter..

Compartir la base de código central en diferentes aplicaciones no es algo nuevo, ya que se practica en diferentes marcos y sistemas de código abierto, y CodeIgniter no es diferente. Fácilmente le permite administrar múltiples aplicaciones que comparten la biblioteca principal de CodeIgniter y los archivos API, y al mismo tiempo podría usar diferentes bases de datos y configuraciones específicas del sitio.

Para empezar, veremos los beneficios de la configuración de varios sitios y, a medida que avancemos, veremos una demostración práctica de lo que se necesita para configurar varias aplicaciones en el marco de CodeIgniter..

Beneficios de la configuración multisite

En esta sección, destacaremos un par de beneficios de tener una configuración multisitio.

Uno de los beneficios más obvios que podría señalar de inmediato es que la configuración de varios sitios comparte una base de código común, y eso debería facilitar mucho más los procesos de actualización y mantenimiento de su aplicación..

Por ejemplo, imaginemos que tiene diez aplicaciones diferentes de CodeIgniter corriendo bajo su cinturón. Y acaba de saber que hay una nueva versión del marco CodeIgniter disponible para actualización y le gustaría actualizarla lo antes posible para asegurarse de que el código permanezca seguro y estable..

Si tuviera una base de código separada para cada una de sus aplicaciones, definitivamente sería un proceso tedioso recorrer cada sitio y actualizarlo a su vez. Con la configuración multisitio, solo tiene que hacerlo una vez, ya que la base de código principal se comparte en todos los sitios!

A continuación, le permite utilizar una base de datos diferente para cada aplicación, aunque compartan una base de código común. De hecho, es uno de los casos de uso más populares de la configuración de varios sitios.!

Además de usar una base de datos diferente para cada aplicación, puede crear una configuración que use la misma base de datos pero un tema o diseño diferente en la interfaz de usuario..

Si aún utiliza el enfoque basado en FTP para mover los archivos de su sitio a través de diferentes servidores, diría que le encantará el enfoque de múltiples sitios, ya que minimiza su trabajo en gran medida.!

Cómo crear múltiples aplicaciones

En esta sección, configuraremos la estructura de directorios básica para implementar una configuración multisitio..

En la raíz de su aplicación CodeIgniter, cree un aplicaciones directorio. Este es el directorio principal que albergará nuestras diferentes aplicaciones..

A continuación, sigue adelante y crea dos nuevos directorios.-aplicaciones / app_one y aplicaciones / app_two. Por supuesto, puedes nombrarlo como quieras, pero por ahora lo mantendré simple..

Entonces, como puede ver, vamos a configurar dos aplicaciones diferentes que usarán la base de código única del marco CodeIgniter. Aunque la configuración de varios sitios reutilizará la mayoría de los archivos de la estructura de CodeIgniter, todavía necesitamos duplicar un par de archivos y directorios para cada una de las aplicaciones que creamos..

Permítame enumerar rápidamente los archivos y directorios que debería copiar de la aplicación predeterminada en primer lugar.

Copie los siguientes directorios del directorio de aplicación predeterminado a aplicaciones / app_one y aplicaciones / app_two:

  • cache
  • configuración
  • troncos

Como puede ver, es obvio tener directorios separados para cache y troncos para cada aplicación. Y el configuración El directorio es una necesidad para el funcionamiento de su aplicación CodeIgniter, por lo que vamos a copiarlo de todos modos.

A continuación, copiemos un par de archivos junto con los directorios necesarios que nos permiten probar nuestra aplicación multisitio.

Copie los siguientes archivos a nuestro app_one y app_two aplicaciones de la aplicación predeterminada CodeIgniter:

  • controladores / bienvenida.php
  • vistas / errores
  • views / welcome_message.php

Para su referencia rápida, el controladores / bienvenida.php el archivo debería verse como

 * @ver https://codeigniter.com/user_guide/general/urls.html * / public function index () $ this-> load-> view ('welcome_message'); 

Y el views / welcome_message.php el archivo debería verse como.

    Bienvenido a CodeIgniter    

Bienvenido a CodeIgniter! Estás navegando en la aplicación uno!

La página que estás viendo está siendo generada dinámicamente por CodeIgniter.

Si desea editar esta página, la encontrará en:

application / views / welcome_message.php

El controlador correspondiente para esta página se encuentra en:

aplicación / controladores / Welcome.php

Si está explorando CodeIgniter por primera vez, debe comenzar por leer la Guía del usuario.

Página renderizada en tiempo transcurrido segundos. '. CI_VERSION. '': "?>

Por supuesto, debe cambiar el siguiente mensaje en el archivo de vista para que podamos diferenciar la aplicación durante la prueba.

por aplicaciones / app_one / views / welcome_message.php, debería verse como

Bienvenido a CodeIgniter! Estás navegando en la aplicación uno!

Y para aplicaciones / app_two / views / welcome_message.php, debería verse como

Bienvenido a CodeIgniter! Estás navegando la aplicación dos!

Ahora, hemos hecho todo lo que se refiere a nuestra configuración de varios sitios. Sin embargo, no funcionará de inmediato, ya que todavía debemos informar a CodeIgniter acerca de nuestra configuración multisitio ya que siempre carga la aplicación predeterminada ubicada en el solicitud directorio.

Últimos retoques

Echemos un vistazo rápido a la configuración que configura el directorio de aplicaciones predeterminado. Sigue adelante y abre el index.php Archivo en la raíz de su aplicación y busque el siguiente fragmento de código.

/ * * ----------------------------------------------- ---------------- * NOMBRE DEL DIRECTORIO DE SOLICITUD * ----------------------------- ---------------------------------- * * Si desea que este controlador frontal use una "aplicación" diferente * directorio que el predeterminado puede establecer su nombre aquí. El directorio * también puede ser renombrado o reubicado en cualquier lugar de su servidor. Si lo hace, * use una ruta de acceso absoluta (completa) del servidor. * Para obtener más información, consulte la guía del usuario: * * https://codeigniter.com/user_guide/general/managing_apps.html * * NO TRAILING SLASH! * / $ application_folder = 'application';

En el fragmento de código anterior queda bastante claro que le permite establecer la ruta de acceso de su aplicación predeterminada. Este es el lugar donde podemos realizar cambios para que recoja la aplicación predeterminada de un directorio que no sea el predeterminado..

Por supuesto, puedes seguir adelante y hacer algo como esto, y eso debería funcionar. app_one solicitud.

$ application_folder = 'applications / app_one';

Por otro lado, ¿qué harías si quisieras correr? app_two? Como un rapidito, podrías copiar el index.php archivo a index_app_one.php y index_app_two.php para cada aplicación. En su host virtual, asegúrese de realizar los cambios correspondientes.

Por otro lado, prefiero un enfoque ligeramente diferente, y me gustaría confiar en el ENV Variable para elegir entre las diferentes aplicaciones en tiempo de ejecución..

Por ejemplo, puede configurar la costumbre ENV variable en NGINX como se muestra en el siguiente fragmento de código.

// establezca la variable env CI_DEFAULT_APP en la directiva de "ubicación" de vhost fastcgi_param CI_DEFAULT_APP applications / app_one;

Si está utilizando el servidor web Apache, lo mismo podría lograrse con:

SetEnv CI_DEFAULT_APP applications / app_one

A continuación, revisemos el código en el index.php archivo que aprovecha el ENV Variable para decidir la aplicación por defecto para ejecutar..

… $ Application_folder = (isset ($ _ SERVER ['CI_DEFAULT_APP'])? $ _SERVER ['CI_DEFAULT_APP']: 'application');… 

Así que, como puedes ver, comprobamos la existencia de la CI_DEFAULT_APP ENV variable en primer lugar, y si no está disponible, volveremos a la aplicación predeterminada.

La mayoría de las veces, usted desea ejecutar sus diferentes aplicaciones en diferentes dominios. Idealmente, me gustaría usar dos hosts virtuales diferentes para cada aplicación. Un ejemplo rápido de cada host virtual debería tener este aspecto en el contexto de NGINX.

El dominio www.ci-app-one.com apunta a app_one:

servidor escuchar YOUR_IP: 80; nombre_de_servidor www.ci-app-one.com; raíz / var / www / html; index index.html index.php; ubicación ~ * \. (jpg | jpeg | gif | css | png | js | ico | html) $ access_log desactivado; caduca max;  location / # Verifique si existe un archivo o un archivo de índice de directorio; de lo contrario, diríjalo a index.php. try_files $ uri $ uri / /index.php;  ubicación ~ \ .php $ root / var / www / html; fastcgi_split_path_info ^ (. + \. php) (. *) $; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME / var / www / html $ fastcgi_script_name; fastcgi_param CI_DEFAULT_APP applications / app_one; incluye fastcgi_params; 

Del mismo modo, el dominio www.ci-app-two.com apunta a app_two:

servidor escuchar YOUR_IP: 80; nombre_de_servidor www.ci-app-two.com; raíz / var / www / html; index index.html index.php; ubicación ~ * \. (jpg | jpeg | gif | css | png | js | ico | html) $ access_log desactivado; caduca max;  location / # Verifique si existe un archivo o un archivo de índice de directorio; de lo contrario, diríjalo a index.php. try_files $ uri $ uri / /index.php;  ubicación ~ \ .php $ root / var / www / html; fastcgi_split_path_info ^ (. + \. php) (. *) $; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME / var / www / html $ fastcgi_script_name; fastcgi_param aplicaciones CI_DEFAULT_APP / app_two; incluye fastcgi_params; 

Por supuesto, ¡puede seguir adelante y probar sus cambios para ver si realmente funciona o no! No dudes en hacerme una consulta si tienes algún problema..

Y esa fue la forma bastante sencilla en la que puede configurar múltiples aplicaciones en el marco CodeIgniter usando un solo código base..

Conclusión

Hoy pasamos por un aspecto interesante del marco de CodeIgniter que le permite administrar múltiples aplicaciones usando un solo código base. Los beneficios obvios de eso son una fácil actualización y mantenimiento de su base de código existente.

CodeIgniter es una poderosa plataforma PHP. Ya sea que esté comenzando o no, o que esté comenzando con la próxima versión, no se olvide de consultar lo que tenemos disponible para usted también..

Comparta sus pensamientos si ya ha implementado algo similar o lo hubiera abordado de una manera ligeramente diferente. De cualquier manera, me encantaría escuchar tus pensamientos.!