>> Chcete-li začít překlenout, co může být vaše jediná zkušenost
s programování pro web, to, co jsem Myslel jsem, že bych udělat, je ukrást pár
příkladů, které Možná jste viděli v 50.
pokud si to vzal na minulost rok nebo dva, nebo nemusí mít
pokud jste si ji vzal před několika lety
které jsou dětské kroky ke pyridinu vědět jako MBC,
Model View Controller, a co to znamená?
Jedná se uvidíme zase možná je jen způsob, jak výchozí
vyčistit design některých web-based kus softwaru,
nebo by to mohlo být na straně klienta vychází stejně, ale budeme ho používat
v souvislosti s PHP, takže můžeme začít
aby se více komplexní projekty a třídění
oddělených různých typů Kód v žádosti;
zejména tak, že když se mít více lidí, kteří pracují
na projektu, je to hodně snadněji kreslit čáry.
Takže nejprve pojďme podívejte se na neoptimálně
prováděcích něco.
Předpokládám, že jsem chtěl udělat super Webové stránky jednoduché kurz pro 50
nebo jakékoliv jiné třídy, a že třída má věci
jako přednášek a učebních osnov.
Nemohl jsem udělat něco jako h1 tag v horní části mé stránky
a neuspořádaný seznam s Seznam li položky v pořadí
jen mít s odrážkami seznam Možnosti nabídky, tak velmi jednoduché.
Takže, jak můžeme udělat?
No, nech mě jít do mého okno terminálu zde,
a všimněte si, že mám číst me a budeme odkaz na tuto kódu
na internetových stránkách kursu je ve chvíli,
a všimněte si, že mám index tečka htm - index tečka php.
Tak mě nech jít dopředu a otevřete že, a opravdu je to druh
hloupé, že tento i tzv. php
protože všechno, co mám je PHP komentář
a pak všechno ostatní je prostě surový html kód.
Ale opět je to verze nula,
takže krok směrem k něco zajímavější,
ale všimněte jsem tvrdě kódované CS50 jako název, CS50 v h1,
a teď mám přednášky propojení,
teď mám odkaz osnovou.
Dobře, takže není Zdá se, že všechno nesmyslné
dokud budete držet tlačítko, jako přednášky, a uvědomíte si,
že v pořádku je to jinak obsah, ale je to trochu
v téže věci; Je to titul stránky a neuspořádané seznamu.
I klepněte na týden od nuly v loňském roce, a to je druh
stejné věci, h1 tag a neuspořádaný seznam
a nakonec jsem na tlačítko to, a já jsem si do jisté listu,
který je klouže od že zejména přednáška.
Takže něco mi říká, Chystám se krčit.
Pokud otevřu přednášky dot oznámení php
že je to do značné míry kopírovat a vložit z předchozí soubor;
Jen jsem změnil název na h1, a co tyto odkazy jsou.
Ještě horší je, když jdu do týdne nula tečka php,
je to stejné kopie pasta práce
s trochou Obsah vylepšil.
Takže určitě je tu možnost zde na zlepšení,
a určitě to by být dobrým pravidlem;
kdykoli máte pocit, sami kopírování
a vložit něco více než možná jednou,
červené vlajky by doufejme, že začne jít pryč.
Ale jak jsme se jít o zlepšení této?
No, tam je několik způsobů, a techniky, které můžete použít
v PHP se vyvinuly v průběhu čas, ale zkusme to jedno.
Nech mě jít do verze jednoho, takže další iteraci to,
a dovolte mi pokusit se vyčistit trochu.
Jasně, jedna z PHP Nejjednodušší mechanismy
Pro řešení tohoto problému je old school vyžadují funkce,
které do značné míry dělá kopii a vkládání obsahu
některých souborů přímo zde, jako c je ostrý patří,
a jiné jazyky mají velmi podobné konstrukce.
Takže to vypadá trochu divně,
to rozhodně není dokončit hledá webové stránky,
ale pravděpodobně to, co je uvnitř záhlaví dot php.
Všechny ostatní věci, že jo, html tag, tag hlava,
Název značky, všechny ty věci, , která byla nad hlavní podstatou
stránky, což je pravděpodobně jen neuspořádaný seznam,
a zápatí je pravděpodobně jako tělo značky uzavřeného
Uzavřený HTML v tagu; docela nezajímavé
ale duplicitní věci.
Dobře, a ujistěte stačí, když jdu
do hlavičky tečka php je to jen druh sirotčí fragmentu
z vrcholu, a když jsem jít do zápatí dot php,
je to osiřelé fragment ze dna,
a já jsem s použitím týchž fragmenty v mých dalších souborů,
jako přednášky dot php.
Dobře, tak co je lepší o tom byste řekl?
Jo?
>> Jednoduchost.
>> Jednoduchost?
Nevím, tento druh vzhledu mnohem děsivější pro mě teď, že jo?
>> Kdybych chtěl změnit svůj záhlaví, měli byste se mít
ji měnit ve všech předchozí jako soubory.
Právě jste ji změnit v záhlaví.
>> Přesně tak, možná v že pocit, že je to jednodušší,
Možná bych zarámovat, jak je to jen je to jednodušší aktualizovat.
Je to možná trochu čistší
protože jsi aktualizovat je jen v jednom místě.
Tak to je docela přesvědčivé; co je nevýhoda
tohoto přístupu nebo to, co zůstává problém
že jsme opravdu vyřešit?
Jo?
[Off Mic komentář]
Jo, přesně tak, myslím, že jsem Stále kopírování a vkládání;
je to o něco méně, ale jen já vytáhl dvě z těchto souborů,
a do značné míry stále vypadal totožný.
Tam byl třeba na top, třeba v dolní části,
a neuspořádané Seznam uprostřed
který sám byl ještě Konstrukčně stejná.
Navíc, všimněte si to, když jsem skutečně zobrazit tento příklad,
nech mě jít do verze One nyní,
a všimněte si, mám CS50 Přednáška Osnova.
Uh oh, CS50 týden Zero týden Jeden a CS50 Středa Pátek,
Já jsem trochu snížit roh.
Co bylo - to, co bylo tyto tituly dříve?
[Off Mic komentář]
Byli jako přednášky ve Týden Zero, jako by to byl druh
of sexy, a to ve skutečnosti měl nějakou dynamiku k ní,
a to je druh - Jsem jen tak plavit se podnikem
a jen za předpokladu, že Celý web je CS50
a dobře to funguje, ale je to rozhodně ne tak elegantní
nebo jako druh rovný předal, jak to kdysi bylo,
ale to dává smysl, protože když se podíváte na index dot php
a přednášky dot php a týden nula tečka php,
jsou všichni, včetně stejný soubor,
tak, jak můžeme zlepšit to?
Jaký je další iterace Tento kód pravděpodobně bude dělat?
[Off Mic komentář]
Jo, přesně tak, pokud - a dovolte mi shrnout
s jsme v podstatě chceme parametrizovat, že záhlaví
takže ano, je tu stále pevný kódované h1 tag, ale věci
mezi tím, otevřené a zavřít tag,
je pravděpodobně dynamický, a pocházející z něčeho jiného.
Možná, že "se řetězec" nebo věc po otazník
v URL někde jiného, ​​takže se pojďme podívat.
Takže když jsem se jít do verze druhé,
Nyní si všimnout, že jsem dostal další soubor,
to vypadá jako pomocníci dot php.
Já opravdu nevím, kde začínají tak jdu začít právě
na indexu, jako jako vždy, a teď Všimněte si, že je to trochu jinak,
takže mám požadovat linku
v horní části vyžadující pomocníci dot php,
ale mohu nazvat co chci,
ale teď všimnete linku tři tam je volání funkce
k tomu, aby záhlaví, které je zajímavé pouze tehdy, pokud
jako to, co je schválen v zdá se, že vlastní název
pro tuto konkrétní stránku.
Zatím tam je činí zápatí v dolní části,
a já nepotřebuješ parametrizace, že je to jen
zápatí, ale nyní se zdá, že
být krokem k lepší řešení, činí záhlaví trvá,
a co dělat na náměstí závorky označují za ty,
kteří neviděli php vůbec, nebo za chvíli?
[Off Mic komentář]
Jo, je to pole.
Je to asociativní pole nebo hash, který sdružuje klíče
s hodnotami; je to jako Java Skripty, námitka notace,
nebo jiných jazyků, podobné syntaxs.
Dobře, takže to, co je v pomáhajících dot php?
V pomocníci dot php je to jen pár funkcí,
vykreslení záhlaví a zápatí činí.
Takže pár detailů v případě méně známé,
tak v první řadě skutečnost,
které činí záhlaví se Údaje o argument, že je to zřejmě
přiřazen prázdný Pole tam znamená co?
Co to znamená dělat rovná otevřený držák uzavřený držák
jako parametr v php?
To je výchozí hodnota.
Takže pokud nemám projít v poli nebo jakýkoli argument, vůbec
k vykreslení záhlaví nebo vykreslení funkce zápatí,
Mohu alespoň důvěry Autorem těchto funkcí
že údaje budou minimálně být prázdné pole;
nebude definována, nebo nepravdivé, nebo něco takového,
to bude přesně to, co Dal jsem ji jako výchozí.
Teď je to trochu druhu hackish způsob nakládání symbolů
do jmenného prostoru abych tak řekl,
ale funguje to docela i k tomuto účelu
prováděcích vlastní druh šablon motoru chudáka.
Tak jo, je tu spousta nástroje tam pro Python Ruby
a php, který vám poskytne schopnosti šablonovací
a to je přesně to, co chceme.
Chceme šablonu, která má h1 open tag, h1 uzavřený tag,
a jakési místo držák ve středu,
a chceme naplnit ty místo držáky prostřednictvím této funkce,
takže tato funkce extrahovat jen tak se stane,
aby vám následující schopnosti.
Pokud jste se dostali asociativní z pole s klíče a hodnoty,
jako foo rovná bar, extrakt vytvoří lokální proměnnou
tzv. účinně znak dolaru foo a dát mu hodnotu baru
tak to exploduje svou asociativní pole z klíče a hodnoty,
do nových proměnných s odpovídající hodnoty.
A pak vyžadují dot záhlaví tečka php je stejný jako předtím,
takže to, co se nám pravděpodobně bude vidět uvnitř záhlaví dot php?
Je to nejspíš ten h1 tag a zavřít tag; co se děje
se do ní pravděpodobně mezi ní?
[Off Mic komentář]
Přesně tak, je to asi nějaký zmínka o znak dolaru titulu
a dost jistá, jestli bych přiblížit Na toto tam je můj název značky,
tady je moje h1 tag, a uvnitř z toho je dynamický vložení
z dolaru titulu, ale jen na správnou míru,
Dělám tento html speciál účtovat ukrutně jmenoval
funkce, ale je to užitečné; co to dělá
nebo co to chrání?
Jedná se vlastně o řešení k ohrožení, které naznačuje,
byste nás vedly k.
[Off Mic komentář]
Přesně tak, takže pokud škodlivý uživatel nebo nic netušící oběť
o phishing útoku kliknul na odkaz
že v sobě měla otazník a něco jako foo rovná,
a pak se hodnota z foo byl vlastně
jako otevřené konzole skript, uzavřená závorka,
a pak nějaký kód JavaScript;
pokud jste nevolal to dlouhá hlavní funkce,
byste být skutečně infikovat surový html do své webové stránky,
jehož výsledkem je že byste mohli být podvedeni.
Ty by mohly být podvádět uživatele do spuštění kódu JavaScript
že on nebo ona není ve skutečnosti v úmyslu.
A i když obvykle jste jen škodili sami sobě,
jako jediný víte, idiot se bude psát
v otevřeném držáku skriptu, uzavřený držák, a říkají upozornění
nebo něco takového a dělat jej nebo sebe
se s nějakým podivným výsledkem, pokud nechcete dostat napálil
do kliknutím na odkaz, který má syrové JavaScript vložené v něm
jako hodnotu tohoto atributu,
můžete mimo jiné ukrást něčí cookie
protože tam je nemovitost tzv. dokument tečka cookie
v JavaScriptu, které vám umožní chytit cookie relace uživatele,
a pokud si vzpomínáte, co Zasedání únos útok,
dlouhý příběh krátký, to je jedno způsob, jak skutečně podvádět někoho
na která vám, že virtuální ruční razítko a pak brát
na svém účtu na Facebooku nebo nějaký jiný typ účtu.
Dobře, tak to je poněkud delší,
ale je to jen pomocí surový html kód.
To je ekvivalentní volání echo
nebo efektivně tisknout, a jsme v podstatě vkládání
že dynamicky.
Tak tady to ještě zůstane?
No, nech mě jít do Verze Tři tady,
a uvidíme, poněkud různé -
Stejný přesné uspořádání souborů ale Oznámení
že tentokrát budeme zobecnit záhlaví a zápatí
jako šablony, takže to, co tím chci říct, že?
Co je jedna věc, že je zde jiný?
Co se změnilo od poslední verze?
Subtilní, ale to je pravděpodobně jen lepší čistší designu.
Jo?
[Off Mic komentář]
Jo, tam je jen jeden standardní vykreslení funkce;
Nechtěl jsem zvláštní případ činí záhlaví nebo zápatí činí,
z nichž oba, pokud vám odvolání z pomocníků dot php,
jsme skoro identické s výjimkou jejich jména
a šablony, které v ceně.
Proč ne jen parametrizaci vykreslení funkce
a brát jeden argument, který je název šablony,
a druhý nepovinný argument, že jsou dvojice klíč hodnota
které chcete připojit palců
Takže když jsem se teď podívat na pomocníci dot oznámení php
že jsem byl Nyní trochu obsáhlejší.
Já jsem vlastně kontrola dělá soubor existuje a pokud ano, jděte do toho
a vyžadují; jen v případě, uživatel náhodně typy
v nějakém jménu falešné šablonu Nechci házet chybu
v programu, takže můžeme minimálně to jim to
upřednostňují zde.
Dobře, ale můžeme vzít to další krok?
V této verzi zde Všimněte si následující.
Právě jsem napsal ls, a co okamžitě skočí
out je poněkud odlišná.
Takže tam dva adresáře, právo,
a tak je nyní krokem k to, co bude nakonec více
správný rámec.
To je tak trochu nedbalý mě třeba házet všechny
mé obsah uvnitř veřejně přístupné adresáře
že doslova se nazývá veřejnost.
A i když bohužel, Mnoho rámců,
Ti starší, zejména, a dokonce i některé webové příspěvků,
Dream hostitele mezi nimi, síly můžete dát všechny soubory
v ekvivalentu veřejné adresáře ani
pokud vaše soubory by mohly zahrnují databáze hesel
a uživatelská jména, nebo další takové pověření,
to není vůbec dobrý design.
Mnohem lepší je dát pouze
ve veřejném seznamu co absolutně nemá
aby byl uživatelsky přístupná, a všechno ostatní
že jste včetně jako pomocníci dot php,
neexistuje žádný důvod, že by měly být přístupné přes web
prohlížeče s URL.
Mohlo by to být zcela neškodné v případě, že uživatel chce vidět snad
kdo páry, ale je to jen princip toho,
a nedej bože, že vlastně dělá mít uživatelské jméno a heslo;
Nechcete- uživatel omylem
nebo záměrně, že k němu mít přístup.
Takže nejsme úplně na perfektní přístup zde
ale všimněte si následující podnikem.
V index tečka php, všimněte si, že Jsem stále vyžadují pomocníky,
ale dělám to takovým způsobem, že jsem nějak organizovat všechny
soubory, které budou zahrnuty
do podadresáře s názvem obvykle zahrnuje,
a pak jsem volat činí pro Záhlaví a zápatí jako předtím.
Takže jediná věc, Udělal jsem je trochu
o reorganizaci své adresáře být trochu víc anál
o struktuře souborů.
Ale když jsme se jít do Tento pátý příklad,
Všimněte si, že nyní mít trojici složek,
a to je trochu zavádějící v okamžiku, kdy
proto, že pro jednoduchost kvůli třídy,
Právě jsem hodil všechno
do John Harvard je Veřejné Rejstřík jen
takže zvládnou ji přes prohlížeč, ale Oznámení -
ignorovat tuto část jen na chvíli,
Skutečnost, že jsem tam.
Všimněte si, že mám tři podadresáře: veřejné,
šablony, a obsahuje.
Myšlenka nyní je, že v správně nakonfigurován webový server I
by se říct, Apache, aby tento webová stránka má veřejně přístupné
soubory zde a nikde jinde.
Takže to, co soubor si myslíte Jdu vidět dovnitř
veřejné když jsem typ ls?
Co je to alespoň jeden soubor to je asi tam?
[Off Mic komentář]
Dobře index tečka php, a co soubor je zřejmě není
tam mezi ostatními?
Stejně jako pomocníci dot php, záhlaví tečka php, zápatí tečka php;
všechny fragmenty, všechny funkce
to není opravdu potřeba být veřejně přístupné,
je třeba, aby byl použitelný by soubory
které jsou veřejně přístupné, ale oni sami,
žádný uživatel potřebuje vidět nebo kniha URL pro pomocníky dot php.
Všimněte si, že místo toho, když jdu
na zahrnuje tu pomocníci dot php,
a když jdu do šablon,
tam je zápatí a header dot php.
Upřímně řečeno, jsem mohl dát je ve stejném adresáři,
ale snažím se být ještě více anal o zachování souborů
které jsou jen trochu statické šablony jiný
z funkčních souborů jako pomocníci dot php,
a já jsem jen dodržování některých poměrně běžné konvence
volání adresáře obsahuje i šablony.
Takže jediná věc, která změnil poté je opět cesta.
Pokud půjdeme sem všimnete že jsem teď jen
zahrnout relativní adresář,
dot dot slash zahrnuje pomocníci dot php,
nebo můžu být trochu více správné a skutečně něco udělat
takhle, php a hodně
jazyků má Tyto speciální znaky
které představují adresář Aktuální soubor je,
tak podtrhnout podtržítko dir podtržítko podtržítko představuje
bez ohledu na adresáře je tohoto souboru,
a tak pokud jste právě zřetězit s operátorem tečka, která,
, které by bylo dosaženo stejný výsledek,
a má tendenci být trochu víc robustní, protože se můžete dostat
do situací, s relativní adresáře byly jen říkám tečku
nebo dot dot může skutečně dostanete na špatném místě,
tak to bývá trochu robustnější.
Dobře, tak co ačkoli pozůstatky?
Co jste ještě nerad o tom?
Co by mohlo být lepší a komentoval to dříve, myslím, že
že tam je ještě nějaké otázky?
[Off Mic komentář]
Jasně, určitě nemáme začít psát jako místa
které vypadají jako to, že jo?
To není pocit, vše mnohem lépe,
je tu stále kopírovat pasty.
Stále mám vyžadují řádek v horní části.
Stále mám činí záhlaví činí zápatí.
Je tu spousta duplicity.
Jo?
[Off Mic komentář]
Jo, přesně tak, takže jsme se vzít krok směrem k jakési rozdělení
up "C" z "v", takže MVC je Model View Controller;
Regulátor je druh mozky aplikace.
Model má tendenci být údaje nebo některé sdílené funkce,
a pohled má tendenci být estetika, šablona,
tak jsme učinili krok směrem k oddělení "c" z "v"
proto, že jsme teď mít alespoň adresář této šablony je,
ale i tam jsme v podstatě jeden ovladač na soubor.
To nevypadá, jako by to moc logiku děje,
ale index tečka php je účinně regulátor.
Když navštívíte adresu URL a končí v indexu dot php,
všechny logiky, která implementuje, že strana má pravdu
na index tečka php, a stejné pro přednášky dot php.
To samé platí pro týden nulové dot php.
Takže jsme trochu Strone našich logika všude,
a cítí se jako to nebude
velmi dobře škálovat až budeme mít ne čtyři, ale čtyřicet stran
pokud každá strana začíná me kopírování starší verze
souboru a jen ladění některé
obsahu uvnitř ní.
Takže jsme jen vzít krok k tomu
a jeden z nástrojů budeme zavádět
ve středu je framer tzv. "Laravel"
a to je velmi populární php rámec,
ty ostatní jsou "Fuelphp."
Je tu starší tzv. "CodeIgniter."
Je tu ještě jedna s názvem "dort".
Je tu ještě jedna s názvem "Symphony".
Mám na mysli, pokud si Google php rámce,
tam je brutální počet rámců, jako je
že lidé, kteří implementována.
Laravel je jeden z více nahoru a příchozí;
je to jedna z vysavače ty, a zjistíte,
že v konečném důsledku pomáhá ušetří docela dost
času, i když je trochu učení,
ale že se budeme řídit jste na středu.
Kromě toho, budeme zavádět co se nazývá "ORM."
V tomto případě budeme používat něco, co přichází
S tímto rámcem volal Laravel.
Říká se tomu "Eloquent" a to je jen vrstva kódu
, který umožňuje mimo jiné co mluvit do databází.
A tady taky, dovolte mi, abych ukrást příkladem, který je buď poslední
nebo návrat na někteří z vás od 50 let.
Pokud jste si vzít 50, a jste "CS50 Finance,"
můžete připomenout soubory píšete nebo předělal, které vypadají
takhle to bylo přihlášení tečka php, a v té době,
zejména proto, že netrávil mnoho času
na php základy brzy,
to může mít sám o sobě bylo docela náročné,
a tak jsme to udělali ve skutečnosti, se snaží zjednodušit konstrukci.
My se opravdu oddělit "M" od "V" z "C" tak moc
na problémy, které "Sedm CS50 Finance,"
ale všimněte si jednu věc , které by snad začít
brzy třít vám špatně způsob, jak je něco takového.
Myslím, že nejen to bylo přihlásit dot php řadič.
To bylo také mluví přímo
do databáze specificky pomocí pokračování, které se nebude
škálovat velmi dobře, když začnete pracovat s jedním
nebo dvě nebo tři partneři.
Například, je-li jeden z partnerů je zodpovědný
pro vytváření databázové tabulky a přichází
se svými indexy a zjišťuje,
na to, co by mělo být klíčové, primární klíče, cizí klíče,
a to vše, rozhodování o názvy tabulek a všechno.
Nyní jste jiná osoba v skupina potřebuje vědět vše
z rozhodnutí o návrhu se nebo ona učinila, a nyní je třeba
na pevný kód těchto rozhodnutí do souboru, takže teď
nebo ona je dost velmi omezené
nikdy znovu změnit tyto názvy tabulek.
Už nikdy změnit tyto podané jména
bez informování vás.
Kromě toho můžete opravdu snadno pracovat na stejném souboru
bez kolize s sebou v případě, že
nebo ona je stále změny jména,
a máte starý verze a tak dále,
tak to je jen pozvat spousta a spousta bolesti hlavy.
Navíc, jak jsme si viz zanedlouho,
i když jste nepotřebovali
k tomu zejména sofistikované dotazy zde,
jakmile začnete mít násobek stoly, dva stoly, tři, pět,
deset tabulek v MySQL nebo obvykle relační databáze,
musíte připojit ty tabulky Často-li známé, a máte
kombinovat data z jedna s druhou,
a upřímně řečeno, vaše Pokračování dotazy začnou se delší a delší,
a delší, a další složité, a to jen začíná
dostat mnohem jednodušší dělat chyby
a mnohem těžší dostat věci do pořádku.
A tak nástroje jako Výmluvný a ORM se děje
, což nám pomáhá modelovat naše data a je to také účinně děje
generovat kód, který jsme je třeba začít dotazování databází
v sofistikovanější způsoby.
Takže pokud máte primární klíč sem a cizí klíč
sem, vše, co potřebujete udělat, je naučit, že ORM,
Relace objektu Mapper, co tento vztah je
a to se přijít na to, co dotazy vykonat pro vás.
A jen na vzácný případů budete potřebovat
nutně napsat Pokračování kód sami.
Pokud opravdu chcete doladit něco,
ale pro nejvíce se rozdělit, můžete jen začít léčbu subjekty
v databázích jako pravdivé objekty a ne tyto ploché řádky
že budete nějak potřebovat rekonstruovat a de normalizovat.