Organice su próximo proyecto PHP de la manera correcta

Al comenzar con PHP, puede ser abrumador descubrir la mejor manera de organizar un proyecto. Si alguna vez ha estado confundido con dónde colocar sus imágenes, bibliotecas externas o mantener su lógica separada de su diseño, consulte estos consejos; te llevarán en la dirección correcta.

Detalles del tutorial

  • Programa: PHP / Proyectos
  • Versión: 1
  • Dificultad: Fácil
  • Tiempo estimado de finalización: 20 minutos

Estructura de directorios

Yo diría que la primera cosa para que su proyecto se ponga en marcha rápidamente es tener una estructura de directorios sólida que puede reutilizar para múltiples proyectos. Si está utilizando un marco, generalmente proporcionará una estructura para usar, pero en este escenario estamos trabajando en un sitio o aplicación simple.

Descompostura

  • Probablemente estés muy familiarizado con el public_html estructura. Esta es la raíz de documentos en la que se accede a todos sus archivos públicos (/public_html/page.php se accede en example.com/page.php).

    • img - Todos tus archivos de imagen. Decidí dividir las imágenes de contenido de las imágenes de diseño.
    • css - Todos tus archivos css.
    • js - Todos tus archivos javascript.
  • los recursos El directorio debe contener todas las bibliotecas de terceros, bibliotecas personalizadas, configuraciones y cualquier otro código que actúe como un recurso en su proyecto..

    • config.php - Archivo de configuración principal. Debe almacenar la configuración de todo el sitio.
    • biblioteca - Ubicación central para todas las bibliotecas personalizadas y de terceros.
    • Plantillas - Componentes reutilizables que conforman su diseño..

El archivo de configuración

Como diseñadores y desarrolladores, nuestro principal objetivo es hacer el menor trabajo posible. Una forma de alcanzar este objetivo es con los archivos de configuración. Para tener una mejor idea de lo que debería tener el archivo de configuración, consulte este ejemplo.

 array ("db1" => array ("dbname" => "database1", "username" => "dbUser", "password" => "pa $$", "host" => "localhost"), "db2 "=> array (" dbname "=>" database2 "," username "=>" dbUser "," password "=>" pa $$ "," host "=>" localhost "))," urls "=> array ("baseUrl" => "http://example.com"), "path" => array ("resources" => "/ path / to / resources", "images" => array ("content" = > $ _SERVER ["DOCUMENT_ROOT"]. "/ Images / content", "layout" => $ _SERVER ["DOCUMENT_ROOT"]. "/ Images / layout"))); / * Normalmente, colocaré lo siguiente en un archivo de arranque o en algún tipo de archivo de configuración del entorno (código que se ejecuta al inicio de cada solicitud de página), pero funcionan igual de bien en su archivo de configuración si está en php (algunas alternativas a php son archivos xml o ini). * / / * Crear constantes para rutas muy utilizadas facilita mucho las cosas. ex. require_once (LIBRARY_PATH. "Paginator.php") * / defined ("LIBRARY_PATH") o define ("LIBRARY_PATH", realpath (dirname (__ FILE__). '/ library')); definido ("TEMPLATES_PATH") o define ("TEMPLATES_PATH", realpath (dirname (__ FILE__). '/ templates')); /* Error al reportar. * / ini_set ("error_reporting", "true"); error_reporting (E_ALL | E_STRCT); ?>

Este es un archivo de configuración básico de inserción. Una matriz multidimensional sirve como una estructura flexible para acceder a varios elementos de configuración, como las credenciales de la base de datos.

  • db - Almacene las credenciales de la base de datos u otros datos pertenecientes a sus bases de datos.
  • rutas - rutas de uso común a varios recursos para su sitio.
    • archivos de registro
    • subir directorios
    • recursos
  • urls: almacenar urls puede ser realmente útil al hacer referencia a recursos remotos en todo el sitio.
  • correos electrónicos: almacene correos electrónicos de depuración o de administración para usarlos cuando maneje errores o en formularios de contacto.

El uso de constantes para las rutas de uso común hace que las declaraciones incluyan (exigir o incluir) una brisa, y si la ruta cambia alguna vez, solo deberá actualizarla en un lugar.

Uso de diferentes archivos de configuración para entornos múltiples

Al usar diferentes archivos de configuración para múltiples entornos, puede tener configuraciones relevantes dependiendo del entorno actual. Es decir, si usa diferentes credenciales de base de datos o rutas diferentes para cada entorno, al configurar los archivos de configuración respectivos, se asegura de que su código funcionará sin problemas al actualizar su sitio en vivo. Esto también le permite tener diferentes configuraciones de informe de errores basadas en el entorno actual. ¡Nunca jamás muestres errores en tu sitio en vivo! La visualización de errores en el sitio en vivo podría exponer datos confidenciales a los usuarios (como contraseñas).

El diseño

Las plantillas reutilizables son otro gran ahorro de tiempo. Hay algunas bibliotecas geniales para crear plantillas (como Smarty), y siempre recomiendo el uso de dicha biblioteca en lugar de reinventar la rueda. Estas bibliotecas ofrecen una gran cantidad de funciones (como métodos de ayuda para formatear la moneda y ofuscar las direcciones de correo electrónico). Como este es un sitio simple, no queremos tomarnos el tiempo de configurar la biblioteca y usaremos las plantillas básicas más básicas. Lo logramos al incluir secciones o módulos comunes en las páginas de nuestro sitio; De esta manera, si queremos cambiar algo en el encabezado, como agregar un enlace a la navegación global, se propaga en todo el sitio..

header.php

    Sitio simple   

Sitio simple

  • Casa
  • Artículos
  • portafolio

rightPanel.php

  • PHP
  • HTML
  • CSS

footer.php

Contenido de pie de página ...

index.php

Digamos que ponemos todos nuestros componentes de diseño (encabezado, pie de página, panel derecho) en nuestro directorio de recursos bajo plantillas.

 

Llevándolo más lejos

Si bien este sistema de plantillas básicas le brinda un gran comienzo, puede llevarlo mucho más lejos. Por ejemplo, puede crear una clase o funciones que incluyan todos los archivos de plantilla y aceptar un archivo de contenido como un argumento para representar dentro del diseño. De esta manera, no necesita seguir incluyendo los archivos de plantilla en cada página de su sitio, sino abstraer esa lógica, lo que significa menos trabajo en el futuro. Te mostraré un ejemplo rápido.

/resources/library/templateFunctions.php

 0) foreach ($ variables as $ key => $ value) if (strlen ($ key)> 0) $ $ key = $ value;  require_once (TEMPLATES_PATH. "/header.php"); eco "
\ n "." \ t
\ n "; if (file_exists ($ contentFileFullPath)) require_once ($ contentFileFullPath); else / * Si no se encuentra el archivo, el error se puede manejar de muchas maneras. En este caso, solo incluiremos un error template. * / require_once (TEMPLATES_PATH. "/error.php"); // close content div echo "\ t
\ n "; require_once (TEMPLATES_PATH." /rightPanel.php "); // close container div echo"
\ n "; require_once (TEMPLATES_PATH." /footer.php ");?>

index.php

Esto es asumiendo que tiene un archivo llamado home.php en su directorio de plantillas que actúa como una plantilla de contenido.

 $ setInIndexDotPhp); renderLayoutWithContentFile ("home.php", $ variables); ?>

home.php

 

Página de inicio

Los beneficios de este método incluyen:

  • Mayor separación de lógica y vista (php y html). La separación de las preocupaciones como esta hace que el código sea más limpio, y el trabajo del diseñador o desarrollador se vuelve más fácil, ya que en su mayoría trabajan con su código respectivo.

  • La encapsulación de la lógica de la plantilla en una función le permite realizar cambios en la forma en que la plantilla se procesa sin actualizarla en cada página de su sitio..

Enlaces simbólicos

En los sistemas basados ​​en Unix (os x, linux) hay una pequeña característica llamada symlinks (enlaces simbólicos). Los enlaces simbólicos son referencias a directorios o archivos reales en el sistema de archivos. Esto es realmente bueno para cuando tiene un recurso compartido, como una biblioteca utilizada entre varios proyectos. Aquí hay algunas cosas concretas que puedes hacer con los enlaces simbólicos:

  • Tenga dos versiones de su directorio de recursos. Al actualizar su servidor en vivo, puede cargar sus últimos archivos en un directorio arbitrario. Simplemente apunte el enlace simbólico a este nuevo directorio actualizando instantáneamente su base de código. Si algo sale mal, puede retroceder instantáneamente al directorio anterior (en funcionamiento).

  • Los recursos compartidos se gestionan fácilmente con enlaces simbólicos. Supongamos que tiene una biblioteca personalizada en la que ha estado trabajando, cualquier actualización de la biblioteca que realice en un proyecto estará disponible de inmediato en otro.

Uso de enlaces simbólicos

Enlaces simbólicos vs enlaces duros

Los enlaces simbólicos, o enlaces blandos, actúan como referencias a rutas completas en el sistema de archivos. Puede usar enlaces simbólicos en múltiples ubicaciones y el sistema de archivos los trata como si fueran el archivo real o el directorio al que hacen referencia. Los enlaces duros, por otro lado, son punteros a un archivo en el disco (piense en los accesos directos en Windows); Te llevan a la ubicación real del archivo..

Hay algunas cosas que debe considerar al usar enlaces simbólicos. La configuración de su servidor debe estar configurada para seguir los enlaces simbólicos. Para Apache esto se hace en el archivo httpd.conf. Busque el bloque de directorio y asegúrese de que haya opciones FollowSymLinks. Si no es así, agrégalo y luego reinicia Apache..

 Opciones FollowSymLinks AllowOverride None 

Creando enlaces simbólicos en OS X

Hay 2 formas de crear enlaces simbólicos en OS X:

  • A través de la línea de comando, navegue (cd, cambiar directorio) al directorio en el que desea que se cree el enlace simbólico, luego use el siguiente comando:

    $: ln -s / ruta / a / actual / dir targetDir

    Así que si nuestra biblioteca personalizada vive en ~ / Sitios / bibliotecas / myCustomLibrary Nos gustaría cd a donde queremos usar esa biblioteca cd ~ / Sites / mySite / resources / library y escribe:

    $: ln -s ~ / Sitios / bibliotecas / myCustomLibrary myCustomLibrary

    Tenga en cuenta que este método debería funcionar en todos los sistemas operativos basados ​​en Unix.

  • La alternativa es a través del buscador. Al mantener presionado alt + cmd mientras hace clic y arrastra un archivo, se crea un enlace simbólico (o alias en os x) que apunta al archivo.

Creación de enlaces simbólicos en Windows

Para lograr esto en Windows, deberá usar el comando mklink en el símbolo del sistema:

 C: \ mklink / D C: \ library \ myCustomLibrary C: \ Users \ derek \ Sites \ mySite \ resources \ library \ myCustomLibrary

Resumen

Estos consejos están destinados a los principiantes o aquellos que crean sitios o aplicaciones simples. Idealmente para aplicaciones o sitios más grandes, querrá considerar algo más avanzado como la arquitectura MVC y la programación orientada a objetos. Le animo a mirar estos una vez que se haya mojado los pies y sienta que ha superado la mayoría de los pasos anteriores. Decidí no cubrir el control de la fuente ya que es un tema bastante grande por sí solo, pero estos consejos le ayudarán a organizar sus archivos para facilitar el control de la fuente si lo desea (sugerencia: almacene elementos como imágenes de diseño en su directorio de recursos y haga un enlace simbólico en su / public_html / img dir). Definitivamente busque el control de código fuente, como subversion o git para todos sus proyectos.

Espero que estos consejos le sean útiles cuando comience su próximo proyecto PHP. Gracias!

Recursos

  • Smarty Templating Engine
  • Arquitectura multitier
  • MVC
  • Programación orientada a objetos
  • Subversion para diseñadores (control de versiones)
  • Enlaces simbólicos
  • Enlaces duros
  • Síganos en Twitter o suscríbase a la Fuente RSS de NETTUTS para obtener más artículos y artículos de desarrollo web diarios.