2010-11-03 19 views
13

Estoy tomando el control de un proyecto PHP existente. Noté que el desarrollador anterior usa una página index.php para todo el sitio, actualmente más de 10 páginas. Este es el segundo proyecto que he visto hecho así. No veo la ventaja con este enfoque. De hecho, parece que complica mucho todo, porque ahora no puedes agregar una página nueva al sitio y vincularla. También debe asegurarse de actualizar la página de índice principal con una cláusula if para buscar ese tipo de página y luego cargar la página. Parece que si solo están tratando de reutilizar una plantilla, sería más fácil de usar, incluye para el encabezado y el pie de página y luego crea cada página nueva con los archivos a los que se hace referencia.¿Por qué usar una sola página index.php para todo el sitio?

¿Alguien puede explicar por qué se usaría este enfoque? ¿Es esto alguna forma de un patrón MVC con el que no estoy familiarizado? PHP es un segundo idioma, por lo que no estoy tan familiarizado con las mejores prácticas.

He tratado de hacer algunas búsquedas en Google de "página de índice único con php" y cosas por el estilo, pero no puedo encontrar ningún buenos artículos que explican por qué se está utilizando este enfoque. Realmente quiero patear este viejo material y no continuar por ese camino, pero quiero tener un buen razonamiento antes de hacer la sugerencia.

+0

Similar a http://stackoverflow.com/questions/604046/having-a-single-entry-point-to-a-website-bad-good-non-issue – zerkms

+0

@zerkms Gracias por el punto al similar artículo. Estaba teniendo el momento más difícil de encontrar algo como lo que estaba buscando. Le echaré un vistazo. – spinon

+0

'controlador frontal php' probablemente traería más resultados. Enlaces Seo-friendly es la razón principal en mi opinión –

Respuesta

16

Un controlador frontal (index.php) asegura que todo lo que es común a todo el sitio (por ejemplo, la autenticación) siempre se maneja correctamente, independientemente de la página que solicita. Si tiene 50 diferentes archivos PHP dispersos por todos lados, es difícil manejar eso. ¿Y qué ocurre si decide cambiar el orden en que se cargan los archivos comunes de la biblioteca? Si tiene solo un archivo, puede cambiarlo en un solo lugar. Si tiene 50 puntos de entrada diferentes, debe cambiarlos todos.

Alguien podría decir que cargar todo el material común todo el tiempo es una pérdida de recursos y sólo se debe cargar los archivos que son necesarios para esta página en particular. Cierto. Pero los marcos de PHP actuales hacen un uso intensivo de OOP y carga automática, por lo que este "desperdicio" ya no existe.

Un controlador frontal también hace que sea muy fácil para usted tener URLs bonitas en su sitio, porque usted es absolutamente libre de usar la URL que desee y enviarla a cualquier controlador/método que necesite.De lo contrario, está atascado con cada URL que termina en .php seguido de una fea lista de cadenas de consulta, y la única forma de evitar esto es utilizar reglas de reescritura aún más feas en su archivo .htaccess. Incluso WordPress, que tiene docenas de puntos de entrada diferentes (especialmente en la sección de administración), obliga a las solicitudes más comunes a pasar por index.php para que pueda tener un formato de enlace permanente flexible.

Casi todos los marcos web en otros idiomas usan puntos de entrada únicos, o más exactamente, se llama a un solo script para iniciar un proceso que luego se comunica con el servidor web. Django funciona así. CherryPy funciona así. Es muy natural hacerlo de esta manera en Python. El único lenguaje ampliamente utilizado que permite que las aplicaciones web se escriban de otra manera (excepto cuando se usa como un script CGI antiguo) es PHP. En PHP, puede darle a cualquier archivo una extensión de .php y será ejecutado por el servidor web. Esto es muy poderoso y hace que PHP sea fácil de aprender. Pero una vez que se pasa de un cierto nivel de complejidad, el enfoque de punto único de entrada comienza a parecer mucho más atractivo.

+0

Gracias por la respuesta en profundidad. Puedo ver algo de valor en esto y creo que probablemente sea más la implementación que se hizo aquí la que me está molestando. – spinon

-1

Normalmente, estos enfoques se utilizan cuando los contenidos de las páginas están determinados por los contenidos de la base de datos. Por lo tanto, todo el trabajo se haría en un solo archivo. Esto se ve a menudo en los sistemas CMS.

+0

Sí, pude ver eso. Pero todos tienen páginas de contenido separadas que se cargan con una cláusula if en la página de índice. Simplemente no puedo ver el valor de tener una página redirigir todas las solicitudes. Quiero decir que reutiliza una plantilla, pero eso se puede lograr fácilmente con una inclusión. – spinon

0

Bueno, si lo único que cambia es la dirección URL, no parece como se hace por cualquier motivo, además de los propósitos estéticos ...

+0

No estoy seguro de seguir. Las páginas cambian porque cada una tiene una página php que se está creando. Simplemente se está cargando en la página de índice para que la URL permanezca igual y solo cambien los parámetros. – spinon

+0

Significado de un "aspecto estético" 'mysite.com/? Page = about' vs' mysite.com/about.php' – JustcallmeDrago

0

En cuanto a mí - solo punto de entrada puede ayudar a tener una mejor control de su aplicación: ayuda a manejar errores fácilmente, solicitudes de ruta, aplicación de depuración.

+0

¿Por qué encaminar las solicitudes a través de un único archivo? El servidor web ya enrutará las solicitudes a las páginas individuales. Los errores generalmente serían manejados por las páginas php individuales que contienen el contenido. Simplemente no realmente viendo el gran valor aquí. – spinon

+0

@spinon: al menos es importante para mí ;-) Así es como me gusta desarrollar aplicaciones, en función de mis más de 7 años de experiencia ;-) – zerkms

+0

@spinon: supongamos que durante la generación de la página su base de datos cae. Entonces obtienes una excepción en el medio de tu página separada. ¿Dónde vas a atrapar esta excepción? ;-) – zerkms

0

Un solo "index.php" es una manera fácil de asegurarse de que todas las peticiones a su aplicación fluyen a través de la misma puerta. De esta forma, cuando agrega una segunda página, no tiene que asegurarse de que la inicialización, la autenticación, la autorización, el registro, etc. estén todos configurados: la obtiene de forma gratuita por mérito del marco.

En frameworks web modernos esto podría llegar a utilizar un controlador frontal, pero es imposible decir desde una gran cantidad de código PHP/desarrolladores sufren de síndrome de NIH.

+0

pero no puedes poner todo esto en un solo archivo de inclusión y luego tener la misma funcionalidad. Pero es una implementación personalizada y no un marco. – spinon

+0

Sí, podrías, pero si lo olvidas, podrías tener un gran problema. No conozco el contexto de su sitio ni nada sobre eso. Estoy respondiendo según las experiencias que he tenido al trabajar en varios sitios. –

1

Tener un solo archivo index.php en el directorio público también puede proteger contra en el caso de que el intérprete de PHP a la baja. Muchos frameworks usan el archivo index.php para incluir el archivo bootstrap fuera de la raíz del documento. Si esto sucede, el usuario podrá ver su código fuente de este único archivo en lugar de toda la base de código.

Cuestiones relacionadas