>> Per començar a estendre un pont sobre el que podria ser la seva única experiència
amb la programació web, el que vaig pensar que faria és robar un parell
d'exemples que poden haver vist en 50
si vas prendre el passat o dos anys o no tenir
si vostè va prendre fa uns anys
que són passos de nadó cap 01:00 piridina conegut com CBM,
Model Vista Controlador, i què vol dir això?
Això és el veurem de nou potser és només una forma de partida
per netejar el disseny d'alguns peça basada en la web de programari,
o podria ser del costat del client basem també, però utilitzarem
en el context de PHP, perquè puguem començar a
per fer més complex projectes i espècie
de diferents tipus separats de codi dins de l'aplicació;
en particular pel que quan tenir diverses persones que treballen
en un projecte que és molt més fàcil dibuixar línies.
Així que primer anem a fer una mirar d'una manera subòptima
de l'aplicació d'alguna cosa.
Suposem que jo volia fer un super lloc web del curs simple per a 50
o qualsevol altra classe, i que classe té coses
com conferències i un programa d'estudis.
Jo podria fer alguna cosa com un etiqueta h1 a la part superior de la meva pàgina
i una llista desordenada amb elements de la llista li per tal
que només tenen una llista amb vinyetes d' opcions de menú, així que super simple.
Així que com podem fer això?
Bé, deixa anar al meu finestra de terminal aquí,
i veig que tinc una lectura em i ens vincularem a aquest codi
a la pàgina web del curs en una mica,
i noto que tinc dot índex htm - php punt índex.
Així que permetin-me anar endavant i obrir això, i per descomptat que és una espècie
ximple que aquesta fins i tot va cridar php
perquè tot el que tinc és un comentari php
i després tota la resta és només codi html cru.
Però, de nou es tracta de la versió zero,
de manera que un pas cap una mica més interessant,
però noto que he xifrats durs CS50 com el títol, CS50 al h1,
i ara tinc el vinculen conferències,
Ara tinc l'enllaç temari.
Molt bé, així que no ho fa sembla tan desgavellat
fins que segueixi un enllaç similar conferències, i t'adones
Li sembla bé que és diferent contingut, sinó que és una cosa
de la mateixa cosa; es tracta d'un títol de la pàgina i llista desordenada.
Faig clic a la setmana zero de l'any passat, i és una cosa
de la mateixa cosa, un h1 etiqueta i una llista desordenada
i, finalment, fer clic a això, i em poso a alguna fulla,
que és les diapositives de aquesta conferència en particular.
Llavors alguna cosa em diu Estic a punt de encongir.
Si obro conferències dot avís php
que és bastant de copiar i enganxar des del fitxer anterior;
Acabo de canviar el títol a h1, i el que aquests enllaços són.
Pitjor encara, si em vaig en la setmana zero punt php,
que és la mateixa feina de copiar i enganxar
amb només una mica de el contingut ajustat.
Així que sens dubte hi ha una oportunitat per millorar,
i segurament aquest ha ser una bona regla d'or;
en qualsevol moment que senti vostè mateix copiant
i pegant una mica més que potser una vegada,
banderes vermelles han espere començar a apagar-se.
Però com fem per tracta de millorar això?
Bé, hi ha un parell de maneres, i les tècniques que pot utilitzar
en php han evolucionat al llarg temps, però anem a tractar aquest cas.
Déjame anar a la versió 1, de manera que la propera versió d'aquest,
i vaig a tractar de netejar una mica.
Bé, un php de mecanismes més simples
per a la solució d'aquest problema és la vella escola requereix la funció,
que més o menys té una còpia i enganxar el contingut
d'algun arxiu aquí, com c és aguda inclouen,
i altres idiomes tenen construccions molt similars.
Així es veu una mica estranya ara,
definitivament no és un completar mirant la pàgina web,
però se suposa que el que cal dins del PHP header punt.
Totes les altres coses, a la dreta, l'etiqueta html, l'etiqueta del cap,
l'etiqueta del títol, totes les coses que estava per sobre de l'essència principal
de la pàgina, que és sens dubte només la llista desordenada,
i al peu de pàgina és, probablement, igual que el cos de l'etiqueta de tancament,
l'etiqueta de l'HTML tancat; bastant avorrides
però coses duplicades.
Molt bé, i segur suficient si vaig
a la capçalera de punts php és només tipus de fragment orfe
des de la part superior, i si anar a peu de pàgina del punt php,
És l'òrfena fragment de la part inferior,
i estic fent servir aquests mateixos fragments en els meus altres arxius,
com conferències esquitxen php.
Molt bé, així que el millor en això vostè dir?
Sí?
>> La simplicitat.
>> La simplicitat?
Jo no conec aquest tipus de mirades molt més aterridor per a mi ara, oi?
>> Si volgués canviar el seu encapçalat, vostè no hauria de
canviar a tot el anterior com arxius.
Vostè acaba de canviar en la seva capçalera.
>> Exactament, així que potser en aquest sentit és més simple,
potser em va enquadrar com és només que és més fàcil per actualitzar-lo.
És potser una mica més net
perquè s'actualitza en un sol lloc.
Així que això és bastant convincent; el que és un desavantatge
d'aquest enfocament o el que queda un problema
que en realitat no hem resolt?
Sí?
[Comentari Off Mic]
Sí, exactament, vull dir, jo sóc Encara copiar i enganxar;
que és una mica menys, però només aixecat dos d'aquests arxius,
i que pràcticament encara semblava idèntica.
Hi va haver un requerir al superior, un requisit a la part inferior,
i una desordenada llista en el medi
que en si era encara Estructuralment la mateixa.
D'altra banda, compte d'això, si jo realment veure aquest exemple,
m'ho dius a mi anar a la Versió Un ara,
i noto que tinc CS50 Syllabus Lecture.
Uh oh, CS50 Setmana Setmana Zero Un i CS50 Dimecres Divendres,
He espècie de tallar una cantonada.
El que era - el que eren aquests títols abans?
[Comentari Off Mic]
Eren com conferències a Setmana Zero, com que era una espècie
del més sexy, i que en realitat tingut cert dinamisme a la mateixa,
i això és una mena de - sóc només tipus de batea ara
i suposant que només tot el lloc és CS50
i bé que funciona, però és certament no és tan elegant
o com una espècie de dret reenviar com ho era abans,
però això té sentit, perquè si ens fixem en php punt índex
i conferències esquitxen php i la setmana zero punt php,
tots estan inclosos el mateix arxiu,
així que com podem millorar això?
Quina és la propera versió del aquest codi, probablement, va a fer?
[Comentari Off Mic]
Sí, exactament, el que si - i permetin-me resumir
amb què essencialment volem parametritzar aquesta capçalera
de manera que si encara hi ha una etiqueta h1 codificat, però les coses
en el medi, a l'aire lliure i l'etiqueta de tancament,
és presumiblement dinàmic, i que ve d'una altra cosa.
Potser el "get string" o el cosa després del signe d'interrogació
en l'URL que oscil · laven una altra cosa, així que anem a fer una ullada.
Així que si entro a la versió 2,
Ara noto que tinc té un arxiu addicional,
es veu com a ajudants esquitxen php.
Jo realment no sé per on començar, així que vaig a començar just
en l'índex, com sempre, i ara compte que és una mica diferent,
així que tinc una línia de requerir
a la part superior que requereix ajudants esquitxen php,
però puc dir- el que jo vulgui,
però ara compte de la línia de tres hi ha una crida a la funció
per fer capçalera, que és interessant en la mesura
com el que es va aprovar en pel que sembla, el títol personalitzat
per a aquesta pàgina en particular.
Mentrestant hi ha render peu de pàgina a la part inferior,
i jo no necessito cap parametrització no és només
un peu de pàgina, però ara no sembla
a ser un pas cap a una millor solució, render encapçalat presa,
i què fer al quadrat parèntesi indiquen per a aquells
que no han vist php sempre o per un temps?
[Comentari Off Mic]
Sí, és una matriu.
És una matriu associativa o un hash que associa claus
amb els valors; és com Java Scripts, notació objecció,
o en altres idiomes, syntaxs similars.
Molt bé, així que el que és en ajudants dot php?
En ajudants esquitxen php és només un parell de funcions,
render encapçalat i peu de pàgina fan.
Així que un parell de detalls si és menys familiar,
pel que en primer lloc el fet
aquest encapçalat render presa argument de dades que és aparentment
assignat el buit matriu no vol dir què?
Què significa fer iguals suport obert tancat suport
com un paràmetre en php?
És el valor predeterminat.
Així que si no pas en sèrie o qualsevol argument que sigui
a la capçalera de render o el render funció de peu de pàgina,
Almenys puc fideïcomís com el autor d'aquestes funcions
que les dades mínimament ser un conjunt buit;
no serà indefinit o fals, o alguna cosa així,
serà exactament el L'hi vaig com un defecte.
Ara bé, això és una mica d'una espècie de una manera hackish de símbols de càrrega
en el seu espai de nom per dir-ho,
però funciona prou bé per a aquest fi
de l'aplicació de la nostra pròpia espècie d' motor de plantilles de l'home pobre.
Molt bé, hi ha una gran quantitat de eines que ens permeten mantenir Python Rubí
i php que li donen capacitats de plantilles
i això és exactament el que volem.
Volem una plantilla que té una etiqueta oberta h1, 1 h1 tag tancat,
i una espècie d'un lloc titular en el medi,
i volem omplir els lloc titulars per mitjà d'aquesta funció,
pel que aquesta funció extreure la casualitat
per donar-li la següent capacitats.
Si vostè té una associativa de matriu amb parells de valors clau
com foo és igual a bar, extracte crearà una variable local
anomenat signe eficaç dòlar foo i donar-li un valor de bar
pel que explota el seu associatiu matriu a partir de parells de valors clau
en noves variables amb els valors corresponents.
I després requerir encapçalat dot punt php és el mateix que abans,
així que el que estem és probable que anem per observar l'interior del PHP header punt?
És probablement té aquesta etiqueta h1 i l'etiqueta de tancament; Què està passant
estar dins d'ella probablement a entre ella?
[Comentari Off Mic]
Exactament, és probable que hi hagi algun menció de dòlar signe title
i bastant segur si puc ampliar en això no és el meu etiqueta del títol,
aquí està el meu etiqueta h1, ia l'interior que és una inserció dinàmica
del títol de la mostra de dòlar, però només per si de cas,
Estic fent això especial HTML carregar atroçment anomenat
funció, però és útil; què fa
o què és el que protegeix contra?
Això és realment una solució a una amenaça que està insinuant;
hauries ens va portar a.
[Comentari Off Mic]
Exactament, així que si un maliciós usuari o una víctima innocent
d'un atac de phishing fet clic a un enllaç
que en si mateix tenia un signe d'interrogació i una mena foo és igual,
i després el valor de foo era en realitat
com a suport obert escriptura, suport tancat,
i després una mica de codi JavaScript;
si no crida a aquest funció principal de llarg,
vostè realment estar infectant HTML pur a la seva pàgina web,
el resultat que és que pot ser infectat.
Vostè podria estar enganyant a l'usuari en l'execució de codi JavaScript
que ell o ella va fer en realitat no tenen la intenció.
I tot i que en general només estàs fent mal a tu mateix,
com només vostè sap una idiota es va a escriure
en escriptura parèntesi obert, suport tancat, i dir d'alerta
o alguna cosa per l'estil i fer d'ell o ella
amb algun resultat estrany, Si aconsegueix enganyat
que feu clic a un vincle que té JavaScript primera incrustat en ell
com el valor d'aquest atribut,
vostè pot, entre altres coses robar les galetes d'algú
perquè hi ha una propietat anomenat document de punt de galetes
en JavaScript que li permet per agafar la galeta de sessió d'un usuari,
i si vostè recorda el que un sessió atac segrest és,
Llarga història curta, que és una manera de realment enganyar algú per
perquè et donin aquest virtuals segell a la mà i després prendre
sobre el seu compte de Facebook o algun altre tipus de compte.
Molt bé, de manera que aquest és una mica llarg,
Però és només l'ús de codi html cru.
Aquest és l'equivalent de cridar ressò
o imprimir eficaçment, i essencialment estem inserint
que dinàmicament.
Llavors, què més queda aquí?
Bé, deixa anar a Versió de tres aquí,
i anem a veure una mica diferent -
mateix disseny exacte de l'arxiu però avís
que en aquesta ocasió anem a generalitzar la capçalera i peu de pàgina
com a plantilles, així que el que Què vull dir amb això?
Quina és l'única cosa això és diferent aquí?
Què ha canviat des l'última versió?
Subtil, però és sens dubte tot just un millor disseny més net.
Sí?
[Comentari Off Mic]
Sí, hi ha una sola funció estàndard de processament;
Jo no em caso especial rendeixo capçalera o deixar sense peu de pàgina,
dos dels quals si avís als ajudants dot php,
estem gairebé idèntiques a excepció dels seus noms
i les plantilles que inclouen.
Per què no parametritzar la funció de fer que
i pren un argument, que és el nom de la plantilla,
i un segon argument opcional que són els parells de valors clau
que desitja connectar polz
Així que si ara et miro ajudants esquitxen avís php
que estic sent un poc més de luxe ara.
De fet, m'estic comprovant ho fa el existeix l'arxiu i si és així que endavant
i requereixen d'ella; per si de cas accidentalment l'usuari tipus
en algun nom de la plantilla falsa que No vull llençar un error
en el programa, de manera que puguem mínimament fer aquest
afavorir aquí.
D'acord, però ¿podem portar això un pas més enllà?
En aquesta versió aquí observi el següent.
Jo només he escrit ls, i el que salta immediatament
a terme és una mica diferent.
Així que hi ha dos directoris, dreta,
pel que aquest és ara un pas cap el que finalment serà una més
marc adequat.
Això és una mica descuidat de mi per estar llançant tot
de la meva contingut a l'interior d'un directori d'accés públic
que, literalment, es diu públic.
I tot i que, per desgràcia, una gran quantitat de marcs,
els més vells, especialment, i fins i tot alguns missatges web,
Somni d'amfitrió entre ells, les forces a que posi tots els seus arxius
en l'equivalent d'un directori públic, fins i tot
si els arxius podrien incloure contrasenyes de base de dades
i els noms d'usuari o altres credencials,
això no és en absolut un bon disseny.
Molt millor només es posa
en el directori públic el que no té absolutament
per ser accessible d'usuari, i tota la resta
que està inclosa com a ajudants esquitxen php,
no hi ha raó perquè aquest ha de ser accessible a través d'una web
navegador amb la url.
Pot ser que sigui completament innocu si l'usuari vol veure potser
que parells, però és només el principi que,
i Déu no ho vulgui que realment fa tenir un nom d'usuari o contrasenya;
vostè no desitja que el usuari accidentalment
o ser intencionalment poder accedir-hi.
Així que no estem molt a enfocament perfecte aquí,
de notar el següent ara.
En php punt índex, observi que Encara estic requerint ajudants,
però ho estic fent de manera que jo sóc una mena d'organització de tot
dels arxius que s'inclouran
en un subdirectori anomenat convencionalment inclou,
i després em dic rendeix per Capçalera i peu que abans.
Així que l'únic Que he fet és una espècie
de reorganitzar meus directoris a ser una mica més anal
sobre l'estructura d'arxius.
Però si ara ens anem a aquest cinquè exemple,
notar aquí que ara tenir un trio de carpetes,
i això és una mica equívoca en el moment
perquè per simplicitat pel bé de la classe,
Jo només he tirat tot
en John Harvard Directori Públic només
perquè puguem navegar via un navegador, però avís -
ignorar aquesta part per un moment,
el fet que estic aquí.
Tingueu en compte que tinc tres subdirectoris: públic,
plantilles, i inclou.
La idea ara és que en un configurat correctament el servidor web que
seria dir-li a Apache que aquest pàgina d'accés públic
arxius d'aquí, i en cap altra part.
Llavors, què pensa vostè d'arxius Vaig a veure l'interior
de públic si tecleig ls?
Què hi ha almenys un arxiu això és probablement allà?
[Comentari Off Mic]
Val php punt índex, i un arxiu no és, òbviament,
allà, entre d'altres?
Com ajudants esquitxen php, encapçalat php punt, el peu de pàgina del punt php;
tots els fragments, tota la funcionalitat
que en realitat no necessiten ser d'accés públic,
que necessita per ser utilitzable pels arxius
que són d'accés públic, però ells mateixos,
cap usuari necessita veure o requereixen una adreça URL per ajudants dot php.
Noteu que en comptes si vaig
en includes hi ajudants esquitxen php,
i si entro en plantilles,
hi ha peu de pàgina i header php punt.
Francament, jo podria haver posat en el mateix directori,
però jo estic tractant de ser fins i tot més anal per mantenir arxius
que són només una mena de plantilles estàtiques diferent
a partir d'arxius funcionals com a ajudants esquitxen php,
i només estic adherit a alguns convencions bastant comuns
trucant al llistat inclou i plantilles.
Així que l'únic que canviat llavors és de nou el camí.
Si anem per aquí notarà que ara només tinc
per incloure un directori relatiu,
punt punt barra inclou ajudants esquitxen php,
o puc ser una mica més adequat i realment fer alguna cosa
així, php i molt
de les llengües tenen aquests símbols especials
que representen el directori del fitxer actual,
així subratllar dir subratllat subratllar subratllat representa
qualsevol directori és d'aquest arxiu,
i pel que si vostè acaba de concatenar amb l'operador de punt, que,
que permetin assolir el mateix resultat,
i tendeix a ser una mica més robusta perquè vostè pot aconseguir
en situacions amb relativa directoris estaven dient dot
o punt punt pot en realitat et introdueixi en el lloc equivocat,
pel que aquest tendeix a ser una mica més robust.
Molt bé, així que el que encara que les restes?
Què és el que segueix No agrada d'aquest?
Què podria millorar-se i comentaris al respecte abans crec
que encara hi ha alguns problemes?
[Comentari Off Mic]
Bé, segurament no tenim per començar a escriure com els llocs de
que s'assemblen a això, oi?
Això no se sent tot el que molt millor,
encara hi ha copy paste.
Encara tinc la requereix línia a la part superior.
Encara tinc render encapçalat fer peu de pàgina.
Hi ha una gran quantitat de duplicació.
Sí?
[Comentari Off Mic]
Sí, exactament, així que hem fet un pas cap a una mena de desdoblament
la "c" de la "v", de manera MVC és el Model Vista Controlador;
controlador és una espècie de cervells de l'aplicació.
Model tendeix a ser el de dades o alguna funcionalitat compartida,
i vista tendeix a ser la l'estètica, la plantilla,
pel que hem fet un pas cap separant la "c" de la "v"
perquè ara, almenys, tenim directori d'aquesta plantilla,
però fins i tot allà, en essència tenir un controlador per arxiu.
No sembla que hi hagi molta lògica passant aquí,
però php punt índex és efectivament un controlador.
Quan vostè visita un URL i que acaba en l'índex de punts php,
tota la lògica que implementa aquesta pàgina és correcta
en php punt índex, i igual per a conferències dot php.
El mateix per a la setmana zero punt php.
Així que hem tipus de Strone nostra lògica per tot el lloc,
i se sent com això no va
escalar molt bé un cop tenir no quatre, sinó quaranta pàgines
si cada pàgina comença amb em copiant una versió anterior
l'arxiu i només retocant alguns
del contingut en l'interior de la mateixa.
Només ens hem pres un pas cap a l'est,
i una de les eines anem a introduir
dimecres és un emmarcador anomenat "Laravel"
i això és molt marc php popular,
altres inclouen "Fuelphp."
Hi ha un més vell anomenat "CodeIgniter."
Hi ha un anomenat "Cake".
Hi ha un anomenat "Symphony".
Vull dir si Google marcs php,
hi ha una atroç nombre de frameworks com
que la gent que pràctica.
Laravel és un dels més amunt i nouvinguts;
que és un dels més net estimats, i trobarà
que en última instància ajuda vostè estalviar una mica
de temps tot i que no hi ha una mica d'una corba d'aprenentatge,
sinó que anem a guiar que durant el dimecres.
D'altra banda, anem a introduir el que s'anomena un "ORM."
En aquest cas, utilitzarem cosa que ve
amb aquest marc anomenat Laravel.
Es diu "eloqüent" i això és només una capa de codi
que li permet entre altres coses parlen a bases de dades.
I també en aquest cas, anem a robar una exemple que és ja sigui recent
o un retrocés per a la alguns de vostès de 50.
Si vas prendre 50, i que vas fer "CS50 Finances"
es pot recordar els arxius que escriviu o reescriure aquesta mirada
així, es tractava d'inici de sessió php de punts, i en el moment,
especialment des que No passem molt de temps
en els fonaments de PHP des del principi,
això pot tenir en si estat força difícil,
i així ho vam fer, de fet, tractar de simplificar el disseny.
Nosaltres realment no separem "M" de "V" de "C" tot el que molt
per als problemes que "Set CS50 Finances"
notar l'única cosa que ha de començar amb sort
que aviat es fregui el mal manera, és una cosa com això.
Vull dir, no només era login php dot un controlador.
També estava parlant directament
a una base de dades específicament utilitzant seqüela, que no va
escalar molt bé quan de començar a treballar amb una
o dos o tres socis.
Per exemple, si un dels els socis són responsables
per a la creació de la seva taules de bases de dades i ve
amb els índexs i esbrinar
que hauria de ser la clau, el les claus principals, les claus externes,
i tot això, decidir els noms de taula i tot això.
Ara l'altra persona en el grup necessita saber tot
de les decisions de disseny que ell o ella ha fet, i que ara necessiten
per codificar aquestes decisions en el seu arxiu, de manera que ara
o ella és bastant molt més restringida
no tornar a canviar els noms de les taules.
Mai més per canviar aquests noms presentats
sense informar-lo.
D'altra banda, no es pot realment treballar fàcilment en el mateix arxiu
sense xocar un amb l'altre si
o ella és constantment el canvi de noms,
i vostè té l'edat versions i altres,
així que això és només convida munts i munts de mals de cap.
D'altra banda, com veurem veure en poc temps,
tot i que no era necessari
fer tot consultes sofisticades aquí,
una vegada que vostè comença a tenir múltiples taules, dues taules, tres, cinc,
deu taules en una MySql o en general, una base de dades relacional,
vostè ha de unir-se a les taules sovint si és familiar, i vostè té
combinar les dades de un amb l'altre,
i francament les seves consultes seqüela començar a ser més llargues, i més llarg,
i més, i més complex, i tot just comença
a posar molt més fàcil cometre errors
i molt més difícil de fer les coses bé.
I pel que eines com Eloqüent i ORM va
per ajudar-nos a modelar les nostres dades i també va amb eficàcia
per generar el codi que ens de començar a consultar bases de dades
en formes més sofisticades.
Així que si vostè té una clau principal aquí i una clau externa
aquí, tot el que necessita de fer és ensenyar que ORM,
Object Mapper Relació, el que la relació és
i s'adonaran del que consultes per executar per a vostè.
I només en rares casos no es necessita
per escriure necessàriament Codi seqüela tu mateix.
Si realment voleu afinar alguna cosa,
però en la seva major part, es pot acaba de començar el tractament d'entitats
en les seves bases de dades com a veritable objectes i no a aquestes files planes
que d'alguna manera ha de reconstruir i de normalitzar.