>> Para comezar a construír unha ponte que pode ser a súa única experiencia
con programación web, o que eu penso que eu ía facer é roubar unha parella
dos exemplos que pode ver en 50
se tomou no pasado ano ou dous, ou pode non ter
se tomou hai uns anos
que son pequenos pasos cara a a piridina saber como MBC,
Model View Controller, eo que significa isto?
Isto é que imos ver de novo posible é só un xeito de partida
para limpar o deseño dalgúns peza baseada na web de software,
ou pode ser do lado do cliente base, así como, pero imos usalo
no contexto PHP, para que poidamos comezar
para facer máis complexa proxectos e tipo
de tipos diferentes de distintos código dentro da aplicación;
particularmente, de modo que cando ten varias persoas traballando
nun proxecto que é moi máis doado para deseñar liñas.
Entón, primeiro imos dar un ollar a unha forma sub-óptima
de aplicar algo.
Supoñamos que eu quería facer unha super website curso simple para 50
ou calquera outro tipo, e esa clase ten cousas
como conferencias e un plan de estudos.
Eu podería facer algo así como un tag h1 na parte superior da miña páxina
e unha lista non ordenada con elementos da lista lin en orde
só para ter unha lista con viñetas de opcións de menú, de xeito super sinxelo.
Entón, como podemos facelo?
Ben, deixe-me ir ao meu fiestra de terminal aquí,
e entender que eu teño unha lectura me e imos obrigar a este código
na páxina web de suposto de aquí a pouco,
e entender que eu teño índice punto htm - php índice punto.
Entón deixe-me ir adiante e abrir que, e con certeza é unha especie
parvo que este mesmo chamado php
porque todo o que teño é un comentario php
e despois todo o demais é só código HTML cru.
Pero, de novo, esta é a versión cero,
así un paso para algo máis interesante,
de ter en conta que eu codificado CS50 como o título, CS50 no h1,
e agora eu teño a conexión de conferencias,
agora eu teño o enlace Syllabus.
Todo ben, de xeito que non parece tan irracional
ata que siga unha ligazón como conferencias, e entender
Todo ben que é distinto contido, pero é medio
da mesma cousa; É un título da páxina e lista non ordenada.
Clic semana cero, a partir de o ano pasado, e é unha especie
da mesma cousa, un h1 etiqueta e unha lista non ordenada
e finalmente clic iso, e chegar a algunhas follas,
que é os diapositivas que clase particular.
Entón, algo me di Estou a piques de encoller.
Se eu abrir conferencias dot aviso php
que é practicamente copia e pega a partir do ficheiro anterior;
Eu só cambiou o título para h1, eo que estas ligazóns son.
Peor aínda, se eu for en semana de cero punto php,
é o mesmo traballo de copia cartafol
con só un pouco de contido alterados.
Así, certamente hai unha oportunidade aquí para mellorar,
e por suposto que debe ser unha boa regra de ouro;
sempre que sentir copiando a si mesmo
e pegando algo quizais máis que unha vez,
bandeiras vermellas deben espero comezar a saír.
Pero como é que imos sobre como mellorar isto?
Así, hai algunhas formas, e as técnicas que pode usar
en php teñen evolucionado ó longo tempo, pero imos tratar este.
Déixeme entrar en versión un, así que a próxima iteración deste,
e deixe-me tentar limpa-lo un pouco.
Correcto, unha das php mecanismos máis sinxelo
para solucionar este problema é a vella escola requiren función,
o que practicamente fai unha copia e pasta de contidos
dalgún ficheiro aquí, como c é nítida inclúen,
e outras linguas teñen construcións moi similares.
Polo tanto, parece un pouco estraño agora,
definitivamente non é un completar mirando páxina web,
pero probablemente o que se dentro php header punto.
Todas as outras cousas, á dereita, etiqueta html, etiqueta cabeza,
o título de tag, as cousas que estaba enriba da esencia principal
da páxina, que é sen dúbida só a lista non ordenada,
e no pé é probablemente como a etiqueta de corpo pechado,
tag HTML pechado; moi desinteressante
pero cousas duplicación.
Todo ben, e seguramente suficiente, se eu for
en cabeceira dot php é só tipo do fragmento orfo
dende o principio, e se eu poñerse en pé dot php,
É o orfo fragmento a partir da parte inferior,
e eu estou a usar os mesmos fragmentos nos meus outros arquivos,
como conferencias dot php.
Todo ben, entón o que hai de mellor sobre o que diría?
Si?
>> Simplicidade.
>> Simplicidade?
Eu non sei que este tipo de aspecto moito máis asustado para min agora, non?
>> Se eu quixese cambiar a súa cabeceira, non tería
para muda-la en toda a anterior como ficheiros.
Só cambia-lo no seu cabeceira.
>> Exactamente, polo que é posible que en Neste sentido, é máis simple,
talvez enmarcalo lo como é só que é máis doado para actualiza-lo.
É quizais un pouco máis limpo
porque actualizar iso nun só lugar.
Entón, iso é moi convincente; o que é unha desvantaxe
deste enfoque ou O que queda problema
que non temos realmente resolto?
Si?
[Comentario Off Mic]
Si, exactamente, quero dicir, eu son aínda copiar e pegar;
é un pouco menos, pero eu só tirado para arriba de dous deses ficheiros,
e eles practicamente aínda parecía idéntico.
Houbo un requiren a arriba, un requiren na parte inferior,
e un non-ordenada lista no medio
aínda que por si só era estruturalmente o mesmo.
Ademais, teña en conta que, se eu realmente ver este exemplo,
déixeme ir á versión One agora,
e entender que eu teño CS50 Palestra Syllabus.
Uh oh, CS50 Semana Cero Week Un e CS50 mércores venres,
Eu medio que cortar un canto.
O que se - o que eran eses títulos anteriormente?
[Comentario Off Mic]
Eran como conferencias en Semana Cero, como se fose tipo
de máis sexy, e realmente tiña algún dinamismo a el,
e iso é unha especie de - eu son só unha especie de punting agora
e só asumindo que todo o sitio é CS50
e funciona ben, pero é certamente non tan elegante
ou como unha especie de recta encamiñar como era antes,
pero que ten sentido, xa que se ollar para php índice dot
e conferencias dot php ea semana de cero php punto,
son todos, incluíndo o mesmo arquivo,
entón como podemos mellorar isto?
Cal é a próxima iteração este código probablemente vai facer?
[Comentario Off Mic]
Si, exactamente, por iso, se - e deixe-me resumir
que esencialmente quere parametrizar esta cabeceira
para que si aínda hai un tag h1 codificado, pero o material
no medio, a ceo aberto ea marca de preto,
presuntamente é dinámica, e vindo doutra cousa.
Quizais o "get cadea" ou o cousa despois do punto de interrogación
no URL estaban nalgún lugar outra cousa, entón imos dar un ollo.
Entón, se eu entrar na versión dous,
agora entende que eu teño teño un arquivo adicional,
parece que axudantes dot php.
Realmente non sei por onde comezan entón eu vou comezar só
no índice como como sempre, e agora ter en conta que é un pouco diferente,
entón eu teño unha liña requiren
na parte superior requirindo axudantes dot php,
pero eu podo chamalo o que eu queira,
pero agora entende liña de tres hai unha chamada de función
para facer cabeceira, que é interesante na medida
como o que está a ser pasado Ao parecer, o título personalizado
Para que esta páxina particular.
Mentres tanto hai renderizar rodapé na parte inferior,
e eu non teño ningunha parametrización non é só
un pé, pero agora parece
ser un paso cara a unha mellor solución, render cabeceira leva,
e que facer a praza parénteses indican a aqueles
que non viron php nunca ou en cando?
[Comentario Off Mic]
Si, é un array.
É unha matriz asociativa ou un hash que asocia chaves
con valores; é como Java Scripts, notación obxección,
ou noutros idiomas, syntaxs semellantes.
Todo ben, entón o que é en axudantes dot php?
En axudantes dot php é só un par de funcións,
facer cabeceira e facer rodapé.
Así, un par de detalles menos familiar,
Entón, primeiro de todo, o feito
este cabeceira facer leva un argumento de datos que, ao parecer,
concedido o baleiro disposición non significa o que?
Que significa facer iguais soporte aberto pechado soporte
como un parámetro en php?
É o valor por defecto.
Entón, se eu non pasar en orde ou calquera argumento que sexa
para facer a cabeceira ou o render función rodapé,
Podo polo menos a confianza como o autor destas funcións
que os datos serán minimamente ser un array baleiro;
non vai ser indefinido ou falsa, ou algo así,
que vai ser exactamente o que Eu dei-lle como un estándar.
Agora iso é un pouco de unha especie de un xeito hackish de símbolos de carga
no seu espazo de nome por así dicir,
pero funciona moi ben para este fin
de implantación de nosa propia especie de mecanismo de modelaxe do home pobre.
Todo ben, hai unha gran cantidade de ferramentas para fora alí para Python Rubi
php e que lle dan capacidades de templates
e iso é o que queremos.
Queremos un modelo que ten unha tag aberta h1, un h1 pechada tag,
e unha especie de lugar titular no medio,
e queremos encher aqueles lugar titulares por medio desta función,
así que esta función extraer só acontece
para darlle a seguinte capacidades.
Se tes un asociativa da matriz con pares de valores clave
como foo é igual a bar, extracto vai crear unha variable local
chamado sinal efectivamente dólar pepe e darlle un valor de bar
polo que estoura seu asociativo matriz de pares de valores clave
en novas variables con os valores correspondentes.
E, entón, esixe cabeceira dot dot php é o mesmo de antes,
entón o que estamos, probablemente, vai a ver dentro php header punto?
Probablemente ten esa etiqueta h1 ea marca de preto; o que está pasando
estar dentro del probablemente no medio del?
[Comentario Off Mic]
Exactamente, hai probablemente algúns mención do título cifrão
e por suposto, se eu aumentar o zoom este non é o meu título de tag,
alí está a miña etiqueta h1, e dentro do que é unha inserción dinámica
do título de sinal de dólar, pero só para unha boa medida,
Estou facendo iso html especial cobrar atrozmente nomeado
función, pero é útil; o que fai
ou o que é o que se protexer contra?
Esta é realmente unha solución a unha ameaza que está insinuando;
que tería nos levou a.
[Comentario Off Mic]
Exactamente, polo que, se un mal intencionado usuario ou unha vítima inocente
dun ataque de phishing clic nun enlace
que en auto tiña un punto de interrogación e algo así como foo iguais,
e logo, o valor de de foo era realmente
como soporte aberto guión, soporte pechado,
e logo, algún código JavaScript;
se non chamar este principal función longa,
realmente estar infectando html cru na súa páxina web,
o resultado que se que pode ser enganado.
Podes estar enganando o usuario en execución de código JavaScript
que el ou ela fixo en realidade non pretendo.
E a pesar de normalmente só está prexudicando a si mesmo,
como só sabe que un idiota vai escribir
no guión soporte aberto, soporte pechado, e dicir alerta
ou algo así e facer el ou ela mesma
con algún resultado estraño, se non se enganou
a facer clic nun enlace que ten JavaScript crúa embutido nel
como o valor do atributo,
pode, entre outras cousas roubar as cookies de alguén
porque non hai unha propiedade chamado cookie dot documento
en JavaScript que permite que para incorporarse o cookie de sesión do usuario,
e se se lembra o que é un sesión hijacking ataque é,
longa historia curta, que é unha forma de realmente enganar alguén
en dar-lle que virtuais selo de man e, a continuación, tomar
sobre a súa conta en Facebook ou algún outro tipo de conta.
Todo ben, entón esta é un pouco longo,
pero está só usando código HTML cru.
Isto é o equivalente de chamar de eco
ou imprimir de forma eficaz, e estamos introducindo esencialmente
que dinamicamente.
Entón, o que máis permanece aquí?
Ben, deixe-me entrar Versión Tres aquí,
e imos ver un pouco diferente -
mesmo esquema exacto do arquivo pero aviso
que esta vez imos xeneralizar a cabeceira e pé de páxina
como modelos, de xeito que que quero dicir con iso?
Que é o único que é diferente aquí?
Que cambiou desde a última versión?
Sutil, pero é, sen dúbida, só un proxecto mellor máis limpo.
Si?
[Comentario Off Mic]
Si, hai só unha función estándar prestar;
Non caso especial facer cabeceira ou rodapé facer,
ambas as cales se A retirada axudantes dot php,
estamos practicamente idéntico con excepción dos seus nomes
e os modelos que incluídos.
¿Por que non basta parametrizar a función de facer
e ter un argumento, que é o nome do modelo,
e un segundo argumento opcional que son os pares de valores clave
que quere plug in
Entón, se eu agora ollar axudantes dot aviso php
que estou sendo un pouco máis sofisticado agora.
En realidade, estou comprobando é que a ficheiro existe e se é así, vai adiante
e esixiren; só no caso de o usuario accidentalmente tipo
nalgún nome do modelo falso ti Non quero lanzar un erro
no programa para que poidamos minimamente facerlles esta
favorecer aquí.
Todo ben, pero podemos levar isto un paso adiante?
Nesta versión aquí conta o seguinte.
Acaba de ls ingresaran, e o que inmediatamente salta
a é un pouco diferente.
Polo tanto, hai dous directorios, dereito,
e por iso este é agora un paso cara o que acabará por ser a máis
estrutura adecuada.
Este é tipo de desleixado de min para estar xogando todo
do meu contido dentro dun directorio de acceso público
que literalmente se chama pública.
E aínda que, por desgraza, unha morea de frameworks,
especialmente os máis antigos, e mesmo algunhas mensaxes na web,
Soño Anfitrión entre eles, as forzas que poña todos os seus arquivos
o equivalente a un directorio público mesmo
se os seus arquivos pode incluír contrasinais de base de datos
e os nomes de usuario ou outros tales credenciais,
que non é de todo bo deseño.
Moito mellor é só poñer
no directorio público o que absolutamente non ten
ser accesible ao usuario, e todo máis
que está incluíndo como axudantes dot php,
non hai ningunha razón para que iso debe ser accesible a través dun web
navegador cun url.
Pode ser completamente inocuo se o usuario quere ver se cadra
que pares, pero é só do principio de que,
e Deus me libre realmente fai ter un nome de usuario ou contrasinal;
non quere que a usuario accidentalmente
ou intencionadamente sendo poder acceder a ela.
Entón, nós non estamos totalmente nun visión perfecta aquí,
pero teña en conta o seguinte momento.
En php índice punto, teña en conta que Eu aínda estou esixindo axudantes,
pero eu estou facendo iso de tal forma que eu son unha especie de organizar todo
dos arquivos que será incluído
nun subdirectorio chamado convencionalmente inclúe,
e logo, eu chamo de procesar a cabeceira e pé como antes.
Entón o único Eu teño feito é unha especie
de reorganizar os meus cartafoles para ser un pouco máis anal
sobre a estrutura do arquivo.
Pero se imos agora Neste quinto exemplo,
notar aquí que nós agora ten un trío de carpetas,
e isto é algo erro no momento
porque pola simplicidade por unha cuestión de clase,
Acaba xogado todo
en John Harvard Directorio Público só
para que poidamos navegar el vía un navegador, pero aviso -
ignorar esta parte por só un momento,
o feito de que eu estou alí.
Repare que eu teño tres subdirectorios: público,
modelos, e inclúe.
A idea é agora cando, nun debidamente configurado servidor web eu
diría que este Apache web ten acceso público
ficheiros aquí, e en ningún outro lugar.
Entón, o arquivo que pensas Eu estou indo a ver o interior
de público, se eu tecleo ls?
¿Que hai de polo menos un ficheiro isto pode ser aí?
[Comentario Off Mic]
Ok php índice punto e o ficheiro, obviamente, non é
alí, entre outros?
Como axudantes dot php, header php punto, pé dot php;
todo fragmentos, toda a funcionalidade
que realmente non precisa para ser accesible ao público,
el que ser utilizable por os ficheiros
que son accesibles ao público, pero eles mesmos,
ningún usuario precisa ver ou quire un URL para axudantes dot php.
Teña en conta que, ao contrario, se eu for
en inclúe non hai axudantes dot php,
e se eu entrar en modelos,
hai rodapé e header php punto.
Francamente, eu podería ter posto los no mesmo directorio,
pero eu estou tentando ser aínda máis anal sobre como manter arquivos
que son só unha especie de modelos estáticos diferente
a partir de arquivos de servizo como axudantes dot php,
e eu só estou unirse a algúns convencións bastante comúns
chamando os directorios inclúe e modelos.
Entón o único que modificada, entón, é unha vez máis o camiño.
Ou tamén por aquí notar que agora eu só teño
para incluír un directorio relativo,
dot dot barra inclúe axudantes dot php,
ou podo ser un pouco máis axeitado e realmente facer algo
así, php e moi
de linguas teñen eses símbolos especiais
que representan a directorio do ficheiro actual,
así subliñado subliñado dir subliñado subliñado representa
calquera directorio é deste arquivo,
e por iso, se acaba de concatenar co operador do punto, que,
que alcanzarían o mesmo resultado,
e tende a ser un pouco máis robusto, porque pode obter
en situacións con relativa directorios foron só dicindo dot
ou dot dot realmente trae-lo para o lugar incorrecto,
de xeito que este tende a ser un pouco máis robusto.
Todo ben, entón o que aínda restos?
O que aínda non me gusta sobre iso?
O que podería ser mellorado e comentou sobre iso antes, eu creo que
que aínda hai algunhas cuestións?
[Comentario Off Mic]
Seguro, seguro que non temos para comezar a escribir como lugares
que se parecen con iso, non?
Este non se sente todo isto moito mellor,
hai aínda copiar e pegar.
Eu aínda teño o require liña na parte superior.
Eu aínda teño facer cabeceira facer rodapé.
Hai unha morea de duplicación.
Si?
[Comentario Off Mic]
Si, exactamente, polo que tivemos un paso cara a unha especie de división
o "c" do "v", de xeito MVC é Model View Controller;
controlador é unha especie de cerebros da aplicación.
Modelo tende a ser a datos ou algunha característica compartida
e tende a ser vista a estética, o modelo,
polo que demos un paso cara a separando a "c" do "v"
porque agora, polo menos, ter directorio deste modelo,
pero aínda alí, esencialmente ter un controlador por arquivo.
Non parece que hai moita lóxica a suceder aquí,
pero php índice punto é efectivamente un controlador.
Cando visita un URL e rematando no índice dot php,
toda a lóxica de que aplica esta páxina está seguro
en php índice punto e mesmo para conferencias dot php.
O mesmo para a semana de cero php punto.
Entón nós medio que Strone nosa lóxica en todo o lugar,
e parece que iso non vai
a escala moi ben, xa que ter non catro, pero corenta páxinas
se cada páxina comeza con me copiando unha versión máis antiga
do ficheiro e só aprimorando algúns
do contido dentro dela.
Entón, tivemos só un paso cara a iso,
e unha das ferramentas imos introducir
o mércores é un conspirador chamado "Laravel"
e isto é moi framework PHP popular,
Outros inclúen "Fuelphp."
Hai un máis vello chamado "CodeIgniter."
Hai un chamado "bolo".
Hai un chamado "Sinfonía".
Quero dicir, se Google frameworks PHP,
hai unha atroz número de frameworks como
que as persoas que aplicou.
Laravel é un dos máis para arriba e chegados;
é unha das máis limpas queridos, e atoparás
que en última análise, axuda aforrar algo
de tempo, aínda que non haxa un pouco de unha curva de aprendizaxe,
pero que ha guía máis o mércores.
Ademais, imos introducir o que se chama "ORM".
Neste caso, imos empregar algo que vén
con este cadro chamado Laravel.
É chamado de "elocuente" e esta é só unha capa de código
que lle permite, entre outras cousas falar con bases de datos.
E, tamén aquí, déixeme roubar un exemplo que sexa recente
ou un retroceso para algúns de vós a partir de 50.
Se tardou 50 anos, e fixeches "CS50 Finanzas,"
pode recuperar arquivos que escribe ou reescreveu que mirar
así, este foi o login php punto e no momento en que,
especialmente dende que non gastar moito tempo
en fundamentos php ao comezo,
si isto pode ter foi bastante reto,
e foi o que fixemos, en realidade, tentar simplificar o deseño.
Nós realmente non separar "M" en "V" de "C" tanto así
aos problemas que "Sete CS50 Finanzas,"
de notar que o único que debe esperamos comezar
pronto esfregar-lle o mal de feito, é algo así.
Quero dicir, non só foi este Iniciar php punto un controlador.
Tamén estaba a falar directamente
para unha base de datos especialmente usar secuela, o cal non
para dimensionar moi ben cando comeza a traballar con unha
ou dous ou tres socios.
Por exemplo, se un de dos socios é responsable
para crear o seu táboas de base de datos e que vén
con seus índices e descubrir
o que a clave debe ser, o claves primarias, claves estranxeiras,
e todo iso, decidir sobre os nomes das tabelas e todo iso.
Agora a outra persoa en o grupo que saber todo
das decisións de proxecto que el ou ela fixo, e agora ten que
ao ríxido código esas decisións no seu ficheiro, entón agora
ou ela é fermosa moi restrinxido
para nunca máis cambiar eses nomes de táboa.
Nunca máis para cambiar eses nomes arquivados
sen informarlles lo.
Ademais, non pode realmente facilmente traballar no mesmo ficheiro
sen chocar uns cos outros, se
ou ela é constantemente cambio de nomes,
e ten a idade versións e así por diante,
Polo tanto, esta é só invitando moitas e moitas dores de cabeza.
Ademais, como veremos ver en pouco tempo,
aínda que non necesita
facer particularmente consultas sofisticados aquí,
unha vez que comezar a ter varios mesas, dúas mesas, tres, cinco,
dez mesas nun MySQL ou xeralmente unha base de datos relacional,
tes que xuntar as táboas moitas veces se coñece, e ten
para combinar datos de un co outro,
e francamente as procuras secuela comezan a estar máis tempo, e máis,
e máis, e máis complexa, e só comeza
para estar moito máis fácil cometer erros
e moito máis difícil de facer as cousas dereito.
E así como ferramentas Elocuente e ORM vai
para axudarnos a modelar os nosos datos e Tamén vai efectivamente
para xerar o código que nós Debe comezar a consultar bases de datos
en formas máis sofisticadas.
Entón, se ten unha chave primaria aquí e unha clave estranxeira
aquí, todo o que precisa que facer é ensinar que ORM,
Obxecto Relación Mapper, o que este relación é
e vai descubrir o que consultas para realizar para ti.
E só en raras casos que precisa
escribir necesariamente código secuela si mesmo.
Se realmente quere sintonizar algo bo,
pero a maior parte, pode Só ten que comezar a tratar entidades
nos seus bancos de datos como certos obxectos e non estas liñas planas
que precisa de algún tipo de reconstruír e de normalizar.