Para comenzar a tender un puente sobre lo que podría ser su única experiencia con la programación web, lo que pensé que haría es robar un par de ejemplos que se pueden haber visto en 50 si tomaste el pasado o dos años o no tener si usted tomó hace unos años que son pasos de bebé hacia una piridina conocido como CBM, Modelo Vista Controlador, y ¿qué significa esto? Esto es lo veremos de nuevo tal vez es sólo una forma de partida para limpiar el diseño de algunos pieza basada en la web de software, o podría ser del lado del cliente basamos también, pero vamos a utilizar en el contexto de PHP, para que podamos comenzar a para hacer más complejo proyectos y especie de diferentes tipos separados de código dentro de la aplicación; en particular por lo que cuando tener varias personas que trabajan en un proyecto que es mucho más fácil dibujar líneas. Así que primero vamos a echar un mirar de una manera subóptima de la aplicación de algo. Supongamos que yo quería hacer un super sitio web del curso simple para 50 o cualquier otra clase, y que clase tiene cosas como conferencias y un programa de estudios. Yo podría hacer algo como un etiqueta h1 en la parte superior de mi página y una lista desordenada con elementos de la lista li con el fin que sólo tienen una lista con viñetas de opciones de menú, así que super simple. Así que ¿cómo podemos hacer esto? Bueno, déjame ir a mi ventana de terminal aquí, y veo que tengo una lectura me y nos vincularemos a este código en la página web del curso en un poco, y noto que tengo dot índice htm - php punto índice. Así que déjame ir adelante y abrir eso, y por supuesto que es una especie tonto que esta incluso llamó php porque todo lo que tengo es un comentario php y luego todo lo demás es sólo código html crudo. Pero, de nuevo se trata de la versión cero, por lo que un paso hacia algo más interesante, pero noto que he cifrados duros CS50 como el título, CS50 en el h1, y ahora tengo el vinculan conferencias, Ahora tengo el enlace temario. Muy bien, así que no lo hace parece tan descabellado hasta que siga un enlace similar conferencias, y te das cuenta Le parece bien que es diferente contenido, sino que es algo de la misma cosa; se trata de un título de la página y lista desordenada. Hago clic en la semana cero de el año pasado, y es algo de la misma cosa, un h1 etiqueta y una lista desordenada y, finalmente, hacer clic en esto, y me pongo a alguna hoja, que es las diapositivas de esa conferencia en particular. Entonces algo me dice Estoy a punto de encogerse. Si abro conferencias dot aviso php que es bastante de copiar y pegar desde el archivo anterior; Acabo de cambiar el título a h1, y lo que estos enlaces son. Peor aún, si me voy en la semana cero punto php, que es el mismo trabajo de copiar y pegar con sólo un poco de el contenido ajustado. Así que sin duda hay una oportunidad para mejorar, y seguramente este debe ser una buena regla de oro; en cualquier momento que sienta usted mismo copiando y pegando algo más que quizá una vez, banderas rojas deben espero empezar a apagarse. Pero ¿cómo hacemos para trata de mejorar esto? Bueno, hay un par de maneras, y las técnicas que puede utilizar en php han evolucionado a lo largo tiempo, pero vamos a tratar este caso. Déjame ir a la versión uno, por lo que la próxima versión de este, y voy a tratar de limpiarlo un poco. Bien, uno de php de mecanismos más simples para la solución de este problema es la vieja escuela requiere la función, que más o menos tiene una copia y pegar el contenido de algún archivo aquí, como c es aguda incluyen, y otros idiomas tienen construcciones muy similares. Así se ve un poco extraña ahora, definitivamente no es un completar mirando la página web, pero se supone que lo que hay dentro de php header punto. Todas las otras cosas, a la derecha, la etiqueta html, la etiqueta de la cabeza, la etiqueta del título, todas las cosas que estaba por encima de la esencia principal de la página, que es sin duda sólo la lista desordenada, y en el pie de página es, probablemente, al igual que el cuerpo de la etiqueta de cierre, la etiqueta del HTML cerrado; bastante aburridas pero cosas duplicadas. Muy bien, y seguro suficiente si voy en la cabecera de puntos php es sólo tipo de fragmento huérfano desde la parte superior, y si ir a pie de página del punto php, Es la huérfana fragmento de la parte inferior, y estoy usando esos mismos fragmentos en mis otros archivos, como conferencias salpican php. Muy bien, así que lo mejor en esto usted decir? ¿Sí? La simplicidad. La simplicidad? Yo no conozco a ese tipo de miradas mucho más aterrador para mí ahora, ¿verdad? Si quisiera cambiar su encabezado, usted no tendría que cambiarlo en todo el anterior como archivos. Usted acaba de cambiarlo en su cabecera. Exactamente, así que tal vez en ese sentido es más simple, tal vez me encuadro como es sólo que es más fácil para actualizarlo. Es tal vez un poco más limpio porque se actualiza en un solo lugar. Así que eso es bastante convincente; lo que es una desventaja de este enfoque o lo que queda un problema que en realidad no hemos resuelto? ¿Sí? [Comentario Off Mic] Sí, exactamente, quiero decir, yo soy Todavía copiar y pegar; que es un poco menos, pero sólo levantado dos de estos archivos, y que prácticamente aún parecía idéntica. Hubo un requerir en el superior, un requisito en la parte inferior, y una desordenada lista en el medio que en sí era todavía Estructuralmente la misma. Por otra parte, cuenta de esto, si yo realmente ver este ejemplo, déjame ir a la Versión Uno ahora, y noto que tengo CS50 Syllabus Lecture. Uh oh, CS50 Semana Semana Cero Uno y CS50 Miércoles Viernes, He especie de cortar una esquina. Lo que era - lo que eran esos títulos antes? [Comentario Off Mic] Eran como conferencias en Semana Cero, como que era una especie del más sexy, y que en realidad tenido cierto dinamismo a la misma, y esto es una especie de - soy sólo tipo de batea ahora y suponiendo que sólo todo el sitio es CS50 y bien que funciona, pero es ciertamente no es tan elegante o como una especie de derecho reenviar como lo era antes, pero eso tiene sentido, porque si nos fijamos en php punto índice y conferencias salpican php y la semana cero punto php, todos están incluidos el mismo archivo, así que ¿cómo podemos mejorar esto? ¿Cuál es la próxima iteración de este código, probablemente, va a hacer? [Comentario Off Mic] Sí, exactamente, lo que si - y permítanme resumir con que esencialmente queremos parametrizar esa cabecera de modo que si aún hay una etiqueta h1 codificado, pero las cosas en el medio, al aire libre y la etiqueta de cierre, es presumiblemente dinámico, y que viene de otra cosa. Tal vez el "get string" o el cosa tras el signo de interrogación en el URL que oscilaban otra cosa, así que vamos a echar un vistazo. Así que si entro en la versión dos, Ahora noto que tengo tiene un archivo adicional, se ve como ayudantes salpican php. Yo realmente no sé por dónde comenzar, así que voy a empezar justo en el índice, como siempre, y ahora cuenta que es un poco diferente, así que tengo una línea de requerir en la parte superior que requiere ayudantes salpican php, pero puedo llamarlo lo que yo quiera, pero ahora cuenta de la línea de tres hay una llamada a la función para hacer cabecera, que es interesante en la medida como lo que se aprobó en al parecer, el título personalizado para esta página en particular. Mientras tanto hay render pie de página en la parte inferior, y yo no necesito ninguna parametrización no es sólo un pie de página, pero ahora no parece a ser un paso hacia una mejor solución, render encabezado toma, y qué hacer al cuadrado paréntesis indican para aquellos que no han visto php siempre o por un tiempo? [Comentario Off Mic] Sí, es una matriz. Es una matriz asociativa o un hash que asocia llaves con los valores; es como Java Scripts, notación objeción, o en otros idiomas, syntaxs similares. Muy bien, así que lo que es en ayudantes dot php? En ayudantes salpican php es sólo un par de funciones, render encabezado y pie de página hacen. Así que un par de detalles si es menos familiar, por lo que en primer lugar el hecho de ese encabezado render toma argumento de datos que es aparentemente asignado el vacío matriz no significa qué? ¿Qué significa hacer iguales soporte abierto cerrado soporte como un parámetro en php? Es el valor predeterminado. Así que si no paso en serie o cualquier argumento que sea a la cabecera de render o el render función de pie de página, Al menos puedo fideicomiso como el autor de esas funciones que los datos mínimamente ser un conjunto vacío; no va a ser indefinido o falso, o algo así, será exactamente lo Se lo di como un defecto. Ahora bien, esto es un poco de una especie de una manera hackish de símbolos de carga en su espacio de nombre por así decirlo, pero funciona bastante bien para este fin de la aplicación de nuestra propia especie de motor de plantillas del hombre pobre. Muy bien, hay una gran cantidad de herramientas que nos permiten mantener Python Rubí y php que le dan capacidades de plantillas y eso es exactamente lo que queremos. Queremos una plantilla que tiene una etiqueta abierta h1, un h1 tag cerrado, y una especie de un lugar titular en el medio, y queremos llenar los lugar titulares por medio de esta función, por lo que esta función extraer la casualidad para darle la siguiente capacidades. Si usted tiene una asociativa de matriz con pares de valores clave como foo es igual a bar, extracto creará una variable local llamado signo eficaz dólar foo y darle un valor de bar por lo que explota su asociativo matriz a partir de pares de valores clave en nuevas variables con los valores correspondientes. Y luego requerir encabezado dot punto php es el mismo que antes, así que lo que estamos es probable que vamos para observar el interior de php header punto? Es probablemente tiene esa etiqueta h1 y la etiqueta de cierre; ¿qué está pasando estar dentro de ella probablemente en entre ella? [Comentario Off Mic] Exactamente, es probable que haya algún mención de dólar signo title y bastante seguro si puedo ampliar en esto no es mi etiqueta del título, ahí está mi etiqueta h1, y en el interior de que es una inserción dinámica del título de la muestra de dólar, pero sólo por si acaso, Estoy haciendo esto especial HTML cargar atrozmente llamado función, pero es útil; qué hace o qué es lo que protege contra? Esto es realmente una solución a una amenaza que está insinuando; habrías nos llevó a. [Comentario Off Mic] Exactamente, así que si un malicioso usuario o una víctima inocente de un ataque de phishing hecho clic en un enlace que en sí mismo tenía un signo de interrogación y algo así como foo es igual, y luego el valor de foo era en realidad como soporte abierto escritura, soporte cerrado, y luego algo de código JavaScript; si no llama a este función principal de largo, usted realmente estar infectando HTML puro en su página web, el resultado de que es que puede ser infectado. Usted podría estar engañando al usuario en la ejecución de código JavaScript que él o ella hizo en realidad no tienen la intención. Y a pesar de que por lo general solo estás haciendo daño a ti mismo, como sólo usted sabe un idiota se va a escribir en escritura paréntesis abierto, soporte cerrado, y decir de alerta o algo por el estilo y hacer de él o ella con algún resultado extraño, Si usted consigue engañado que haga clic en un vínculo que tiene JavaScript prima incrustado en él como el valor de ese atributo, usted puede, entre otras cosas robar las cookies de alguien porque hay una propiedad llamado documento de punto de galletas en JavaScript que le permite para agarrar la cookie de sesión de un usuario, y si usted recuerda lo que un sesión ataque secuestro es, Larga historia corta, que es una manera de realmente engañar a alguien para para que te den ese virtuales sello en la mano y luego tomar sobre su cuenta de Facebook o algún otro tipo de cuenta. Muy bien, por lo que este es un poco largo, Pero es sólo el uso de código html crudo. Este es el equivalente de llamar eco o imprimir eficazmente, y esencialmente estamos insertando que dinámicamente. Entonces, ¿qué más queda aquí? Bueno, déjame ir a Versión de tres aquí, y vamos a ver un poco diferente - mismo diseño exacto del archivo pero aviso que en esta ocasión vamos a generalizar el encabezado y pie de página como plantillas, así que lo que Qué quiero decir con eso? ¿Cuál es la única cosa eso es diferente aquí? ¿Qué ha cambiado desde la última versión? Sutil, pero es sin duda apenas un mejor diseño más limpio. ¿Sí? [Comentario Off Mic] Sí, hay una sola función estándar de procesamiento; Yo no me caso especial rindo cabecera o dejar sin pie de página, ambos de los cuales si aviso a los ayudantes dot php, estamos casi idénticas a excepción de sus nombres y las plantillas que incluyen. ¿Por qué no parametrizar la función de hacer que y toma un argumento, que es el nombre de la plantilla, y un segundo argumento opcional que son los pares de valores clave que desea conectar pulg Así que si ahora te miro ayudantes salpican aviso php que estoy siendo un poco más de lujo ahora. De hecho, me estoy comprobando lo hace el existe el archivo y si es así que adelante y requieren de ella; por si acaso accidentalmente el usuario tipos en algún nombre de la plantilla falsa que No quiero tirar un error en el programa, de manera que podamos mínimamente hacerlas este favorecer aquí. De acuerdo, pero ¿podemos llevar esto un paso más allá? En esta versión aquí observe lo siguiente. Yo sólo he escrito ls, y lo que salta inmediatamente a cabo es algo diferente. Así que hay dos directorios, derecha, por lo que este es ahora un paso hacia lo que finalmente será una más marco adecuado. Esto es un poco descuidado de mí para estar lanzando todo de mi contenido en el interior de un directorio de acceso público que, literalmente, se llama público. Y a pesar de que, por desgracia, una gran cantidad de marcos, los más viejos, especialmente, e incluso algunos mensajes web, Sueño de host entre ellos, las fuerzas a que ponga todos sus archivos en el equivalente de un directorio público, incluso si los archivos podrían incluir contraseñas de base de datos y los nombres de usuario o otras credenciales, eso no es en absoluto un buen diseño. Mucho mejor sólo se pone en el directorio público lo que no tiene absolutamente para ser accesible de usuario, y todo lo demás que está incluida como ayudantes salpican php, no hay razón para que ese debe ser accesible a través de una web navegador con la url. Puede ser que sea completamente inocuo si el usuario quiere ver quizá que pares, pero es sólo el principio de que, y Dios no lo quiera que realmente hace tener un nombre de usuario o contraseña; usted no desea que el usuario accidentalmente o ser intencionalmente poder acceder a él. Así que no estamos muy a enfoque perfecto aquí, de notar lo siguiente ahora. En php punto índice, observe que Todavía estoy requiriendo ayudantes, pero lo estoy haciendo de tal manera que yo soy una especie de organización de todo de los archivos que se incluirán en un subdirectorio llamado convencionalmente incluye, y luego me llamo rinde por Encabezado y pie que antes. Así que lo único Que he hecho es una especie de reorganizar mis directorios a ser un poco más anal sobre la estructura de archivos. Pero si ahora nos vamos a este quinto ejemplo, notar aquí que ahora tener un trío de carpetas, y esto es un poco equívoca en el momento porque para simplicidad por el bien de la clase, Yo sólo he tirado todo en John Harvard Directorio Público sólo para que podamos navegar vía un navegador, pero aviso - ignorar esta parte por un momento, el hecho de que estoy ahí. Tenga en cuenta que tengo tres subdirectorios: público, plantillas, e incluye. La idea ahora es que en un configurado correctamente el servidor web que sería decirle a Apache que este página de acceso público archivos de aquí, y en ninguna otra parte. Entonces, ¿qué piensa usted de archivos Voy a ver el interior de público si tecleo ls? ¿Qué hay al menos un archivo eso es probablemente allí? [Comentario Off Mic] Vale php punto índice, y qué archivo no es, obviamente, allí, entre otros? Como ayudantes salpican php, encabezado php punto, el pie de página del punto php; todos los fragmentos, toda la funcionalidad que en realidad no necesitan ser de acceso público, que necesita para ser utilizable por los archivos que son de acceso público, pero ellos mismos, ningún usuario necesita ver o requieren una dirección URL para ayudantes dot php. Nótese que en vez si voy en includes hay ayudantes salpican php, y si entro en plantillas, hay pie de página y header php punto. Francamente, yo podría haber puesto en el mismo directorio, pero yo estoy tratando de ser incluso más anal por mantener archivos que son sólo una especie de plantillas estáticas diferente a partir de archivos funcionales como ayudantes salpican php, y sólo estoy adherido a algunos convenciones bastante comunes llamando a los directorios incluye y plantillas. Así que lo único que cambiado entonces es de nuevo el camino. Si vamos por aquí notará que ahora sólo tengo para incluir un directorio relativo, punto punto barra incluye ayudantes salpican php, o puedo ser un poco más adecuado y realmente hacer algo así, php y mucho de las lenguas tienen estos símbolos especiales que representan el el directorio del archivo actual, así subrayar dir subrayado subrayar subrayado representa cualquier directorio es de este archivo, y por lo que si usted acaba de concatenar con el operador de punto, que, que permitan lograr el mismo resultado, y tiende a ser un poco más robusta porque usted puede conseguir en situaciones con relativa directorios estaban diciendo dot o punto punto puede en realidad te introduzca en el lugar equivocado, por lo que este tiende a ser un poco más robusto. Muy bien, así que lo que aunque los restos? ¿Qué es lo que sigue No gusta de este? ¿Qué podría mejorarse y comentarios al respecto antes creo que todavía hay algunos problemas? [Comentario Off Mic] Bien, seguramente no tenemos para empezar a escribir como los sitios de que se parecen a esto, ¿verdad? Esto no se siente todo lo que mucho mejor, todavía hay copy paste. Todavía tengo la requiere línea en la parte superior. Todavía tengo render encabezado hacer pie de página. Hay una gran cantidad de duplicación. ¿Sí? [Comentario Off Mic] Sí, exactamente, así que hemos dado un paso hacia una especie de desdoblamiento la "c" de la "v", por lo MVC es el Modelo Vista Controlador; controlador es una especie de cerebros de la aplicación. Modelo tiende a ser el de datos o alguna funcionalidad compartida, y vista tiende a ser la la estética, la plantilla, por lo que hemos dado un paso hacia separando la "c" de la "v" porque ahora, al menos, tenemos directorio de esta plantilla, pero incluso allí, en esencia tener un controlador por archivo. No parece que haya mucha lógica pasando aquí, pero php punto índice es efectivamente un controlador. Cuando usted visita una URL y que termina en el índice de puntos php, toda la lógica que implementa esa página es correcta en php punto índice, y igual para conferencias dot php. Lo mismo para la semana cero punto php. Así que hemos tipo de strone nuestra lógica por todo el lugar, y se siente como esto no va escalar muy bien una vez que tener no cuatro, sino cuarenta páginas si cada página comienza con me copiando una versión anterior del archivo y sólo retocando algunos del contenido en el interior de la misma. Tan solo nos hemos tomado un paso hacia el este, y una de las herramientas vamos a introducir el miércoles es un enmarcador llamado "Laravel" y esto es muy marco php popular, otros incluyen "Fuelphp." Hay un más viejo llamado "CodeIgniter." Hay uno llamado "Cake". Hay uno llamado "Symphony". Quiero decir si Google marcos php, hay una atroz número de frameworks como que la gente que práctica. Laravel es uno de los más arriba y recién llegados; que es uno de los más limpio queridos, y encontrará que en última instancia ayuda usted ahorrar un poco de tiempo a pesar de que no hay un poco de una curva de aprendizaje, sino que vamos a guiar que durante el miércoles. Por otra parte, vamos a introducir lo que se llama un "ORM." En este caso, vamos a utilizar algo que viene con este marco llamado Laravel. Se llama "Elocuente" y esto es sólo una capa de código que le permite entre otras cosas hablan a bases de datos. Y también en este caso, vamos a robar un ejemplo que es ya sea reciente o un retroceso para la algunos de ustedes de 50. Si tomaste 50, y que hiciste "CS50 Finanzas" se puede recordar los archivos que usted escribe o reescribió esa mirada así, se trataba de inicio de sesión php de puntos, y en el momento, especialmente desde que No pasamos mucho tiempo en los fundamentos de PHP desde el principio, esto puede tener en sí sido bastante difícil, y así lo hicimos, de hecho, tratar de simplificar el diseño. Nosotros realmente no separamos "M" de "V" de "C" todo lo que mucho para los problemas que "Siete CS50 Finanzas" notar la única cosa que debe comenzar con suerte que pronto se frote el mal manera, es algo como esto. Quiero decir, no sólo era login php dot un controlador. También estaba hablando directamente a una base de datos específicamente utilizando secuela, que no va escalar muy bien cuando de empezar a trabajar con una o dos o tres socios. Por ejemplo, si uno de los los socios son responsables para la creación de su tablas de bases de datos y viene con los índices y averiguar lo que debería ser la clave, el las claves principales, las claves externas, y todo eso, decidir los nombres de tabla y todo eso. Ahora la otra persona en el grupo necesita saber todo de las decisiones de diseño que él o ella ha hecho, y que ahora necesitan para codificar esas decisiones en su archivo, por lo que ahora o ella es bastante mucho más restringida no volver a cambiar los nombres de las tablas. Nunca más para cambiar esos nombres presentados sin informarle. Por otra parte, no se puede realmente trabajar fácilmente en el mismo archivo sin chocar uno con el otro si o ella es constantemente el cambio de nombres, y usted tiene la edad versiones y demás, así que esto es sólo invita montones y montones de dolores de cabeza. Por otra parte, como veremos ver en poco tiempo, a pesar de que no era necesario hacer todo consultas sofisticadas aquí, una vez que usted comienza a tener múltiples mesas, dos mesas, tres, cinco, diez mesas en una MySql o en general, una base de datos relacional, usted tiene que unirse a las tablas a menudo si es familiar, y usted tiene combinar los datos de uno con el otro, y francamente sus consultas secuela empezar a ser más largas, y más largo, y más, y más complejo, y apenas comienza a poner mucho más fácil cometer errores y mucho más difícil de hacer las cosas bien. Y por lo que herramientas como Elocuente y ORM va para ayudarnos a modelar nuestros datos y también va con eficacia para generar el código que nos que empezar a consultar bases de datos en formas más sofisticadas. Así que si usted tiene una clave principal aquí y una clave externa aquí, todo lo que necesita que hacer es enseñar que ORM, Object Mapper Relación, lo que la relación es y se darán cuenta de lo que consultas para ejecutar para usted. Y sólo en raras casos no se necesita para escribir necesariamente Código secuela ti mismo. Si usted realmente desea afinar algo, pero en su mayor parte, se puede acaba de empezar el tratamiento de entidades en sus bases de datos como verdadero objetos y no a estas filas planas que de alguna manera tiene que reconstruir y de normalizar.