>> [Seminar] [Kohana: En lett PHP Framework]
[Brandon Liu] [Harvard University]
[Dette er CS50.] [CS50.TV]
>> Hei alle sammen. Mitt navn er Brandon.
Jeg er en junior her på høgskolen gjør informatikk, og i dag skal vi snakke om
Kohana, som er en PHP web utviklingsmiljø.
I dag kommer til å bli en live koding seminar,
så jeg er i utgangspunktet tenkt å bruke 5-10 minutter på å forklare hva Kohana er,
og da er jeg bokstavelig talt kommer til å bygge en super enkel blogg
for deg akkurat her bokstavelig talt fra bunnen av.
Vi kommer til å laste ned koden fra Kohana nettside,
og vi kommer til å begynne å bygge en blogg, og forhåpentligvis vil det være veldig lærerikt,
fordi du vil se kanskje kanskje jeg skal gjøre noen feil,
og du vil se meg komme seg fra dem,
eller vil du se min tankeprosess som jeg bygger gjennom denne bloggen,
og i mellomtiden, vil du også bli kjent med de rammer seg selv.
Forhåpentligvis vil det være en svært lærerik øvelse.
>> Først, hva er egentlig et rammeverk?
Hvis du har tatt CS50 så langt, har du egentlig ikke jobbet med noen
rammeverk ennå, og ting er dette.
Du har sikkert gjort en webutvikling PSett allerede,
og la oss si at du fortsetter å bygge nettsteder og holde bygge nettsteder.
Du vil begynne å legge merke til et par ting.
Det første du vil legge merke til er at du sannsynligvis gjør de samme tingene
om og om igjen hele tiden,
ting som rengjøring brukerinngangsdata,
ting som å organisere filene dine på en bestemt måte.
Den andre tingen du vil også trolig legge merke til er at koden
kan begynne å bli veldig, veldig rotete,
og du kan la det være rotete og bare ha en svært vanskelig tid å opprettholde det,
eller du kan begynne å strukturere koden din og gjør den modulære
på bestemte måter for å gjøre det mer vedlikeholdsvennlig.
>> Det er der web rammeverk utgangspunktet kom i.
Disse menneskene som hadde bygget en rekke nettsteder, sa de,
"Vi trenger ikke å gjøre om dette hver eneste gang vi bygge et nettsted."
"Kan vi ikke bare lage en pakke som gjør alle disse tingene for deg
hver eneste gang du ønsker å bygge et nettsted? "
Og slik at når du gjør et nytt nettsted,
du bare fokusere på hva denne nettsiden er ca.
Du trenger ikke å gjenta alle de forskjellige konfigurasjon
og separering av koder og skrive kode
at du ofte må gjøre når du skal lage websider.
Tanken er at et rammeverk gjør at du kan skrive et høyere nivå kode
uten å måtte bekymre seg for lavere nivå detaljer.
En lavere nivå detalj kan være noe sånt
arbeider med renhold brukerinngangsdata.
Det er noe som du ikke bør virkelig trenger å bekymre seg for.
Du bør fokusere på hva ditt tildeling faktisk handler om.
Det eliminerer mye av standardkoden.
Det er en arkitektur for prosjektet.
>> Den mest kjente ville være Model-View-Controller,
som jeg kommer til å snakke om i et sekund.
Og mange ganger disse rammene legemliggjøre et sett med prosedyrer,
regler og beste praksis for deg å bruke
slik at når du adoptere web rammeverk
du må skrive koden din på en bestemt måte,
og det er generelt et avtalt sett av prinsipper
av samfunnet som er generelt akseptert å være
en god måte å skrive kode.
Det gjør koden mer vedlikeholdsvennlig, mer brukervennlig,
så videre og så videre.
Og til slutt, den tingen jeg ønsker å understreke om rammer
versus bibliotekene er denne ideen om inversjon av kontroll, og den tingen er dette.
Forskjellen mellom et bibliotek og et rammeverk er at med et bibliotek
du fremdeles skriver hovedprogrammet,
og du er liksom påkalle biblioteket
og ringer på biblioteket for å gjøre noe for deg.
Forskjellen mellom et bibliotek og et rammeverk
er at rammeverket starter med kontrollen
og det påkaller koden din,
slik at du kan tenke på det som - dette er grunnen til at det kalles et rammeverk -
rammen gir dette ramme og struktur for koden din,
og du fylle hullene,
, og dette vil bli mer tydelige i et sekund
når du ser meg begynne å skrive kode i konteksten av rammeverket.
Du vil se at jeg fyller ut hullene,
og rammen er slik å kontrollere alle de bevegelige deler,
og jeg må sette brikkene på de riktige stedene.
>> I dag skal vi snakke om Kohana,
som er en av mange PHP rammeverk.
Det er web rammeverk, og det er de i praktisk talt hver eneste språket,
og jeg plukker Kohana fordi Kohana er uten tvil
og generelt anerkjent som den enkleste PHP rammeverk for å plukke opp.
Det er den mest lett.
Det er andre der ute som kommer med mange, mange flere funksjoner,
men de har en tendens til å være mer vanskelig å plukke opp.
Og til slutt, bruker Kohana MVC-arkitektur.
Det er lett nok til at vi bokstavelig talt kan bygge et prosjekt
akkurat her rett foran øynene dine, og du kan ganske mye
følge med ganske lett.
>> Hva er MVC-arkitektur?
Det står for Model-View-Controller,
og kanskje hvis du tenker på koden du har skrevet så langt
for noen av dine webutvikling psets
du kan være i stand til å se noe av dette, men vanligvis når du begynner å skrive
en mer kompleks webapplikasjon,
skillet mellom disse tre segmentene blir mer og mer tydelig.
Jeg la ut MVC her liksom som en stabel,
og ofte vil du høre folk snakke om stabler i webutvikling,
og dette er for å illustrere ideen om at
hvert lag, hver komponent virkelig prøver å bare kommunisere
mellom to andre komponenter.
Noen åpner nettstedet ditt som en klient eller en nettleser.
De samhandler med programmet gjennom visningen koden.
Utsikten kode kommuniserer med kontrolleren.
Kontrolleren kommuniserer med modellen
og modellen samhandler med SQL database.
Og det er ingen hopping i mellom hvis du skriver koden din skikkelig.
>> Hva gjør disse tingene gjøre?
Modellen er i hovedsak de stykke kode som omhandler dine data.
Alt som omhandler databasen, med de objektene som du lagrer,
eller hente disse objektene i databasen,
det er alt håndteres av modellen.
Kanskje har du objekter i databasen.
Vi kommer til å lage en modell som har å gjøre med innlegg,
så et innlegg kan ha noen attributter til det.
Du kan ha funksjoner rundt lagring av disse innleggene eller hente innlegg
eller filtrere innlegg og så videre og så videre,
og det er all koden som er håndtert av modellen.
Kontrolleren er liksom av programmet logikken,
og en masse forskjellige ting kan gå i applikasjonslogikken.
Hvis du snakker med en annen API,
som kan være der du arbeider med programmet logikken.
Hvis du prøver å få til å hente inn data fra flere ulike modeller
og må kombinere dem på en eller annen måte, som ofte kan bli håndtert av kontrolleren.
For eksempel, på Facebook, hvis du venn noen,
så kanskje det handle om å etablere dette forholdet
kan utføres av kontrolleren.
>> Og til slutt, er utsikten koden som genererer hva du faktisk se.
Mange ganger tror jeg i CS50 psets
de egentlig ikke oppfordre dere til å skille disse tre tingene.
Du vil sannsynligvis ha denne store, lange fil der på toppen
du gjøre noen SQL-spørring og kanskje gjøre noen behandling
på dataene du hentet fra databasen,
og da har du all din HTML nederst.
Og du kan finne det som du lager flere og flere sider
at du kommer til å ha noen kode repetisjon, og også,
tingen er filen blir veldig stor og lang
og blir uhåndterlig å administrere.
Grunnen til at MVC er så vel ansett
er for en rekke årsaker.
Den første tingen er noe som heter separasjon av bekymringer
som er ideen om at når du har -
ideelt sett en del av koden bør gjøre en ting og gjør det veldig bra,
og du bør ikke kombinere deler av koden som gjør ulike ting.
For eksempel, vis-koden og modellkode,
de egentlig ikke trenger å være relatert.
De trenger ikke å være i de samme filene, så når du kan, skille dem ut
så det er lett å vedlikeholde.
>> Den andre tingen er gjenbruk av kode.
Du kan finne deg selv å skrive den samme SQL-spørringen eller gjør
lignende spørsmål som kunne bli abstrahert inn en funksjon,
og det er tanken bak modeller og kontrollere,
å ha den i en egen funksjon som du kan bruke om igjen på forskjellige steder i prosjektet.
Og til slutt, som er knyttet til tørking koden din,
eller ikke gjenta deg selv, ikke gjenta deg selv.
Dette er veldig forståelig i utvikling.
Når du kan, du ønsker ikke å gjenta deg selv, fordi hvis du gjentar deg selv,
det er mye mer kostbart å vedlikeholde.
Hvis du ønsker å endre en ting, må du endre det overalt,
og som fører til feil, og det er fryktelig.
>> Greit.
Eventuelle spørsmål så langt om Kohana i det hele tatt?
Flott.
Nå kommer vi til å dykke inn live koding sesjon,
og forhåpentligvis alt går bra.
Jeg skal i utgangspunktet bygge dette nettstedet
på en av mine eksterne servere, og på den måten dere kan også
se nettsiden og få tilgang til nettstedet,
og også miljøet er bedre konfigurert enn min ekstern maskin,
fordi den kjører Linux i stedet for OS X.
Vi er bokstavelig talt kommer til å starte.
KohanaFramework.org.
Jeg kommer til å laste ned koden fra nettsiden.
Jeg kommer til å kopiere linken adresse,
gå til min server, laste den ned,
og jeg kommer til å pakke den ut.
>> [Student] Hva er det største du kan gjøre teksten?
[Brandon Liu] Er det bedre?
[Student] Er det gjennomførbart? >> [Brandon Liu] Ja, det er greit.
Jeg lastet ned en ZIP-fil og pakket det inn i en katalog som heter Kohana,
og vi kommer til å endre navn som CS50-Kohana,
og la oss gå i.
Awesome.
Her ser du en haug med forskjellige filer.
De fleste av dere kan ignorere - Vi er ikke kommer til å gå gjennom hver enkelt fil som er her
på grunn av vår tidspress,
men vanligvis når du installerer Kohana, det første du gjør
er du gå til katalogen,
og du vil i utgangspunktet gjøre noen miljø tester og whatnot
å sørge for at miljøet er riktig satt til å kjøre Kohana
og sørge for at alt er i orden.
Du kan se de fleste ting gått, men generelt du alltid kjøre inn dette ett problem
hvor det klager på at noen mappe er skrivebeskyttet,
og det er på grunn av noen tillatelser.
Jeg vet ikke hvor mye dere har lært om filrettigheter i CS50,
men hvis du gjør webutvikling, du kommer til å kjøre inn i denne saken mye.
Jeg kommer til å gjøre det skrivbar
og jeg tror jeg må også - der vi går.
>> Ok, så nå kan du se alt passert,
og nå vil den fortelle deg å endre navn install.php filen.
Jeg kommer til å flytte install.php filen til installed.php,
og nå hvis jeg oppdaterer,
det gir meg litt feil, og det er her debugging kommer i.
Det er her du kan se hva som faktisk kommer til å skje.
Saken er, som standard, antar Kohana at
prosjektet er på rotkatalogen på ditt domene,
så det venter deg til å være på demo.brandonkliu.com.
Vi må fortelle det at det er faktisk i en undermappe.
Det er i en undermappe kalt CS50 Kohana.
Saken er, det er mistolking CS50-Kohana
som noe annet, som jeg vil forklare deg i et sekund.
Men jeg skal fortelle deg det er noe som er å være forventet.
Hva vi skal gjøre er at vi kommer til å gå inn i denne mappen som heter bootstrap.php,
som er konfigurasjonen mappen hvor mange forskjellige ting blir satt opp.
Jeg åpner det opp.
Så kanskje en av de første tingene jeg skal gjøre er å endre tidssone.
>> Og så la oss se.
Aha! Akkurat her.
Det finnes en haug med forskjellige konfigurasjons ordtak her inne,
men den jeg leter etter er dette som kalles grunnleggende URL,
og som standard får jeg det satt til Kohana,
men jeg kommer til å endre det til CS50-Kohana,
og jeg tror at skal fikse det.
Ja, bra.
Som standard, for å se at det fungerer, det sier: "Hello World".
Hvor kom det fra? Hvordan kom vi til Hello World?
Hvor nøyaktig er koden som faktisk skrev det?
For å forstå det, vil jeg presentere dette konseptet kalles ruting.
Ganske mye alle nett rammer har konseptet kalles ruting,
som er den del av programvaren som skal kartlegge en bestemt nettadresse
til en viss del av koden i din rammeverk.
For eksempel, hvis du har noen URL, og du går til noen URL som foo.com / blogg / alle
så hva rammen kommer til å gjøre - eller i det minste hva Kohana kommer til å gjøre -
er det kommer til å finne en klasse som heter kontrolleren blogg,
og det kommer til å kjøre funksjonen heter action hele.
Jeg vet jeg snakker om klasse og funksjoner,
og jeg vet at dere ikke har dekket klasser og funksjoner
i CS50 ennå, men for nå,
du kan tenke på klasser som bare en gruppe av funksjoner,
en måte å gruppere funksjoner sammen.
Det er egentlig alt du trenger å vite.
>> Nå hvis vi ser på vår mappestrukturen,
inne i programmappen er det en annen mappe kalt klasser,
og de andre mappene kalles Controller og modell.
Hvis du ser inne i Controller-mappen,
vi ser at det er en fil som heter Velkommen,
og du kan se her er en klasse som heter Controller Velkommen,
og det er en funksjon kalt Handling Index,
og hva den gjør er det setter kroppen din reaksjon på Hello World.
Det er der koden blir skrevet.
Det andre spørsmålet er, vel, jeg gikk ikke til
blah, blah, blah, / welcome / index.
Hvordan endte jeg opp her?
Vel, det er rett og slett fordi
her på bunnen av vår bootstrap fil
hvor vi setter våre ruter
du kan se at de satt noen standardverdier for deg.
Standard kontrolleren er Velkommen. Standardhandlingen er Index.
Derfor når vi legger ingenting der det automatisk gikk til Velkommen kontrolleren
og indeksen Handling.
>> Alt fornuftig så langt?
Nå kan du gjøre mer enn bare å gå til Controller
og en spesifikk handling.
Du kan også sende inn parametre til kontrolleren.
Bare som et eksempel,
Jeg kommer til å legge til en annen handling til denne kontrolleren til å vise deg.
La oss kalle denne handlingen Echo, fordi det kommer til å fortelle deg hva du gir den,
og så jeg er i utgangspunktet tenkt å ta tak
en parameter som kommer til å bli sendt gjennom meg til routing programmet,
og som du kan se her,
denne linjen her, kan du se at
Dette betyr i utgangspunktet at du har kontroller, og du har en /,
og du har handling, og du har en annen /,
og som kommer til å være parametere, og fordi vi har dette navnet ID
innenfor vinkelparenteser, som betyr at vi navngi denne parameteren ID.
Senere i min kontrolleren kode hvis jeg ønsker å ta tak i som parameter,
Jeg kan bruke koden jeg skrev, finne den parameteren som heter ID.
Det er hva jeg gjorde her, og jeg kommer til å gå tilbake og si,
"Du sa" det.
Og så nå hvis jeg går til vår hjemmeside,
Jeg går til cs50-kohana/welcome/echo/Helloooo--
oh, det stemmer.
Det er en skritt jeg utelatt.
Dette er en del av live koding idé.
>> Her er en ting. La oss se.
Så normalt som standard med en rekke av disse web-applikasjoner
du har til å inkludere denne index.php ting i din URL,
fordi ideen er index.php er liksom inngangspunkt
av søknaden din, men selvfølgelig,
det er liksom irriterende å ha.
Du ønsker ikke å ha index.php vises i nettadressen din,
og ganske mye hver web rammeverk ut av boksen
har denne index.php problem,
og så må du ta noen forholdsregler for å være i stand til å fjerne det.
Og så i dette tilfellet
hva vi skal gjøre er at vi kommer til å bruke en fil som heter. htaccess,
og dette er noe som er spesifikk for Apache web server,
og det kan gjøre ting som å omskrive nettadresser
og omdirigere nettadresser og så videre og så videre,
og Kohana er hyggelig nok til å gi en mal. htaccess-fil som vi kan bruke.
>> Som du kan se, er det en fil der som heter example.htaccess,
og vi kommer til å kopiere det til. htaccess.
Jeg kommer til å åpne denne og redigere den,
og i utgangspunktet den gjør en haug med forskjellige ting.
Nøkkelen linjen kan det være lurt å se på er rett her.
Tanken er at dette setter opp en regel som sier:
"Ok, det du skriver inn, foranstilte index.php til det."
Du kan se det.
Den. * Står for noe, matche noe,
og deretter den andre delen er index.php / $ 0,
og $ 0 refererer til det som ble matchet tidligere.
Betyr det fornuftig?
Men det virkelig viktig ting jeg vil endre, er å endre denne omskrive base,
som er den URL basen.
Det slags foruts hvor du jobber fra.
Jeg kommer til å legge CS50 Kohana til det,
og på den måten nå hvis jeg fjerner index.php,
det skal fungere, og jeg kommer til å legge noen tall
å vise deg at det faktisk fungerte.
Høres bra ut.
>> Eventuelle spørsmål så langt?
[Student] Hvordan gikk det vet å gjøre 123?
Er det et argument?
Nettopp. Du kan tenke på det akkurat som et argument.
Men det rare ting, skjønt, er at måten Kohana gjør det
er de ikke gjør det akkurat som et argument.
Du må ta tak i det som dette.
Du må ta tak i forespørselen objektet og be for den parameteren som er oppkalt ID,
og det navnet ID kommer fra at bootstrap fil
at jeg viste tidligere, og navnet ID var i disse vinkelparenteser,
og det er hvordan du hente disse parametrene.
Awesome.
Eventuelle andre spørsmål?
Som jeg sa, kontrollere, de håndterer applikasjonslogikk,
så det er en sak der du kan se that -
det er veldig grunnleggende, men det er fortsatt applikasjonslogikk,
ideen om å gripe tak i parameteren og skape en ny streng
som sier: "Du sa blah," og så spytte det tilbake til deg.
Og generelt hva du gjør er å skape forskjellige kontrollerne.
Du oppretter separate kontrollere for ulike deler av nettstedet ditt.
>> I dag skal vi lage en veldig enkel nettside,
og det kommer til å være en helt enkel blogg.
Vi kommer til å lage en ny kontroller bare for innlegg i en blogg.
Men så hvis jeg skulle også legge til kommentarer til blogginnlegget,
da ville jeg sannsynligvis vil gjøre en ny kontroller for disse kommentarene.
Hvis jeg ønsket å legge til brukere, ville jeg trolig legge en ny kontroller for disse brukerne,
og generelt, er ideen om at når du har en ny modell,
en ny dataobjekt som du arbeider med,
du har en enkelt kontroller for at dataobjekt.
I dag har vi bare kommer til å jobbe med en dataobjekt,
og som kommer til å være innlegg,
og også du kan tenke på dataobjekter som tilsvarer tabeller.
Vanligvis hvert bord tilsvarer en type dataobjekt,
så innlegget tabellen vil ha en post-modell,
Dette vil ha en etterkontroller som svarer til dette,
og det samme for kommentarer, den samme for-brukere, og så videre og så videre.
Og det er en generell tommelfingerregel.
Det kommer til å være spesielle tilfeller der du kan avvike fra det,
men 90% av tiden det er hva du skal gjøre,
og jeg skal vise deg det er det vi kommer til å gjøre i dag.
En mer konseptet før vi dykke tilbake inn i koden,
denne ideen om objekt relasjons-mapping.
>> Dere har allerede gjort en webutvikling PSett,
og du har sett at du gjør en SQL-spørring,
og hva går den tilbake til deg er rader.
Du får disse radene, og du indeksere dem av noen navn,
navnet på kolonnen og tabellen,
og det er hvordan du jobber med det,
og det kan være litt tungvint.
Men dessuten, hvis du har relasjoner innen databasen,
som for eksempel hvis jeg har kommentarer og innlegg,
så kanskje jeg ønsker å ta tak i overordnede stillingen som en kommentar.
Hvis jeg bruker bare rader i SQL, så alt jeg kan få er at ID
av den overordnede innlegget og ikke selve innlegget selv.
Men når vi er koding, hva vi egentlig ønsker er å faktisk ta tak
den overordnede legge seg noen ganger.
Hva objekt relasjons-mapping gjør er
det tar resultatene av databasesøket
og setter den inn i objekter for deg, som er mye hyggeligere å jobbe med
enn vanlig arrays og rader.
>> For eksempel, nå når jeg har en kommentar kanskje,
og jeg ønsker å ta tak i sitt forelder innlegg,
og jeg tror kanskje kommentere pil innlegg,
så vil det faktisk gi meg innlegget objekt
svarende til selve moder innlegget, ikke bare noen ID,
som jeg ellers ville ha til å bruke og foreta en ny SQL-spørring for å hente posten,
som er tungvint og unødvendig.
Og dessuten, ved å kartlegge alle disse datarader til objekter,
du kan også legge flere funksjoner til objekter,
så for eksempel, snakket jeg om hvordan klassene er i hovedsak grupperinger av funksjoner.
Du kan tenke på det sånn.
For eksempel, kanskje jeg har dette innlegget objekt,
og kanskje jeg har lyst til å ha noen form for funksjon knyttet til den
som i utgangspunktet forteller meg ble det nylig postet?
Ble det lagt ut i løpet av den siste uken, sant eller usant?
Og det er en funksjon jeg kan feste på som objekt,
og det er veldig praktisk å ha det på samme sted,
og det finnes en rekke ulike funksjoner du kan lage
for disse objektene, og det er veldig hyggelig å være i stand til å feste den til en klasse,
til et objekt, mens hvis du bare hadde rader fra databasen,
så du ikke kan virkelig feste noen funksjonalitet til det.
Det er bokstavelig talt bare data.
Eventuelle spørsmål om det i det hele tatt?
Orms er svært vanlig web utvikling,
og det er mange forskjellige typer Orms,
og Kohana har sin egen ORM.
Det er veldig grunnleggende, men du får en smak av hvordan det ser ut.
>> La oss lage en modell for våre blogginnlegg,
og det første vi åpenbart trenger å gjøre er å lage en faktisk tabellen
innenfor vår database for å faktisk lagre våre data for disse innleggene.
Det første jeg skal gjøre er å gå til phpMyAdmin.
Har dere brukt phpMyAdmin før?
Ok, awesome, så dere vet allerede hva det er,
og jeg kommer til å lage en ny tabell kalt Kohana innlegg,
og det kommer til å være veldig enkel.
Jeg må logge inn igjen
Alt vi skal gjøre i dag er å ha en forfatter og en kropp,
bare holde det enkelt.
Jeg kommer til å lage det bordet,
og nå er det bare en tabell som representerer våre innlegg
med to felt for vår forfatter og vår kropp.
Den andre tingen jeg kommer til å gjøre nå er
konfigurere min webapplikasjon slik at den vet hvordan du skal koble til databasen,
og dette, igjen, er noe som du må gjøre med alle web-applikasjoner.
Du må fortelle det brukernavnet og passordet
og navnet på databasen og så videre og så videre
å finne ut hvordan du faktisk koble til databasen.
>> I Kohana, har vi noe som kalles en databasemodul,
og i mappen konfigurasjon har vi denne mappen som heter Database,
og som du kan se, er det en haug med innstillinger du må sette her
å fortelle den hva er brukernavnet og passordet
for databasen slik at jeg faktisk kan koble til det.
Og siden jeg ikke ønsker dere å faktisk vite
brukernavnet og passordet til min database,
Jeg har en fil hvor jeg allerede satt det hele opp, og jeg kommer til å kopiere og lime det over.
Awesome.
Ok. Jeg tror det er alt konfigurasjonen jeg trenger å gjøre,
men la oss se.
Vi vil fortsette å jobbe i det, og hvis noe krasjer,
så får vi fikse det.
Nå hva jeg skal gjøre er jeg kommer til å opprette en ny kontroller.
Eller faktisk, beklager.
Først må jeg lage en ny modell.
Jeg skal lage en ny modell kalt Post.php,
og hva vi skal gjøre er at vi kommer til å kalle det klasse Model_Post.
Få noen syntax highlighting på,
og så når jeg sier, "strekker ORM," det er i utgangspunktet
litt mer objektorientert programmering,
som dessverre dere har ikke lært i CS50 ennå,
men det er ganske lett å plukke opp.
Det gir meg all denne ekstra funksjonalitet som kommer i denne ORM pakken,
og så får jeg en haug med ekstra funksjoner og whatnot gratis,
som du vil se litt av i et sekund.
>> Akkurat nå faktisk alt jeg trenger å gjøre er å lage denne klassen.
Jeg trenger ikke engang å gjøre en hvilken som helst funksjon eller noe,
men jeg har opprettet en klasse som representerer tabellen,
og fordi jeg har utvidet denne ORM klassen,
Jeg får en haug med ting gratis, så for nå trenger du ikke å stille inn noe mer opp.
Og hva jeg skal gjøre nå er jeg kommer til å opprette en ny kontroller,
som jeg kommer til å nevne blog.php,
og jeg kommer til å kopiere over den Velkommen kontrolleren
så jeg ikke trenger å skrive noen ting,
og nå har jeg å endre navn på dette.
Nå hva jeg skal gjøre for å teste at alt fungerer ut,
Jeg kommer til å ta det første innlegget fra min database
og skrive ut hoveddelen av stolpen på skjermen.
For å gjøre det hva jeg skal gjøre først er jeg kommer til å lagre innlegg
til en variabel så hva vi skal gjøre er -
i Kohana hva du gjør er å ta tak i innlegget objekt
det er litt tungvint, men du trenger å gjøre denne tingen kalt ORM :: fabrikken,
og deretter passerer du inn navnet på den modellen du ønsker,
og den returnerer ORM objekt som representerer denne modellen.
Og så, som jeg sa, når vi forlenge ORM objekt,
Vi får alle disse metoder for fri, slik at f.eks
vi får denne nye funksjonen heter "finne alt"
som returnerer hvert enkelt innlegg i databasen automatisk,
noe som er ganske praktisk.
>> Og nå i kroppen jeg kommer til å returnere
det første innlegget og tilbake kroppen sin.
Og selvfølgelig, jeg trenger å lage et innlegg,
så la oss sette inn et nytt innlegg.
Jeg vil si: "Brandon, min aller første innlegg."
Awesome.
Og nå skal vi gå til blogger
og hvis alt fungerer bra - oh, er dette en annen dum fil tillatelse ting igjen.
Hold på ett sekund. Det er litt absurd.
Det vi går. Ok.
Jeg fikset dette tillatelse problem.
Den prøvde å lage noen filer og noen logg,
og tillatelsene, igjen, ikke var riktig innstilt, så jeg gjorde det
så disse filene var skrivbar og kjørbar
så det kan faktisk logge til ting.
Nå er det gir meg et annet unntak ordtak, "class ORM ikke funnet,"
og det er fordi jeg har glemt et annet trinn.
Det er for ille.
I bootstrap mappen filen, det er disse modulene her,
som du kan velge å aktivere eller deaktivere.
Dette er en haug med forskjellige funksjoner som du kan velge å bruke
innenfor Kohana, som er liksom fint.
>> For eksempel, de har en autentiseringsmodul
som du kan bruke for å autentisere brukere.
De har en caching modul hvis du ønsker å implementere
noen form for caching bakenden å gjøre programmet arbeide raskere og whatnot.
Vi må aktivere databasen og ORM-modulen,
fordi som jeg sa, vi bruker databasen, selvsagt,
og vi trenger også å aktivere ORM-modulen,
fordi vi ønsker å ha ekstra funksjonalitet, som er fint å ha.
Alt jeg trenger å gjøre er uncomment disse to linjene,
og nå hvis jeg oppdaterer, det ga meg en annen feil.
Den sier, "Klasse Model_Post ikke funnet."
Nå er dette en god problem å ha.
La oss se.
Gjøre det offentlig.
No Hold on.
Åh, kjære.
Jeg vet ikke hvorfor det ikke er i stand til å finne det.
Det er virkelig merkelig.
Jeg har denne klassen her.
Jeg antar jeg må kanskje - oh.
Jeg er så dum. Jeg glemte å legge til en PHP-kode.
Det er derfor.
Nå har jeg å angre på at en endring jeg nettopp gjorde.
>> Ok. Det vi går.
Det var virkelig dumt. Jeg hadde ikke en åpning PHP-koden.
Men som du kan se, nå er det virker som den skal, ikke sant?
Vi har 1 innlegg.
Vi tok det første innlegget, og nå trykket vi ut kroppen sin.
Flott. Fantastisk.
Eventuelle spørsmål så langt?
Nope? Eventuelle spørsmål?
Ok, så vi nettopp opprettet innlegget modell, veldig grunnleggende,
og vi kommer til å legge noen funksjoner senere.
Vi kan legge valideringer og filtrering.
Valideringer er en av de tingene
som rammer løse for deg virkelig, virkelig godt,
og jeg tror ikke dere måtte gjøre dette for din CS50 PSett,
men hvis du gjør webutvikling for det endelige prosjektet,
du sannsynligvis kommer til å ønske å gjøre noen form for validering,
liker ikke å ha tomme brukernavn,
kanskje å ha et passord med minst noen lengde, sånne ting.
Og det er virkelig tungvint å implementere disse tingene av oss selv,
og ganske mye hver enkelt web rammeverk gjør det for deg
og lar deg gjøre det på en veldig ren måte.
Og modellen er der du vanligvis uttrykk for disse valideringsregler,
fordi det er å validere om en modell er gyldig eller ikke.
>> Men for nå, kommer vi til å sette det til senere,
og for nå kommer vi til å jobbe på en annen del,
og vi kommer til å prøve og lage en ny visning
som viser alle innleggene.
Trinnene er involvert i å lage en ny handlingsplan for notering alle innlegg
er å hente en liste over alle innleggene
og deretter gjengi listen over alle innleggene gjennom en visning.
Akkurat her, heldigvis nok, vi allerede tatt alle innlegg
ved hjelp av denne første linje, finner all funksjon
og hva vi skal gjøre nå er så langt
Jeg har blitt direkte innstilling kroppen av responsen
ved å føre streng, men nå ønsker jeg å bruke en visning,
og forskjellen mellom en visning og bare gjør dette
er med en visning kan jeg ha en fin, stor HTML mal,
og hva jeg kan gjøre er å gi det enkelte variabler
og da har visningen automatisk fylle sin mal
ved hjelp av disse variablene.
Hva jeg skal gjøre er jeg skal lage en ny visning,
og jeg skal nevne utsikten noe sånt som "blog / index,"
og jeg kommer til utgangspunktet binde dette - oh, hva jeg skriver?
Hjernen min er et annet sted.
Jeg kommer til å binde innleggene variable til visningen,
slik at måten visningen har tilgang til dette innlegget variabel.
>> Og så nå trenger jeg å lage dette synet,
så her har vi denne mappen som heter "Utsikt,"
og første, jeg kommer til å opprette en ny mappe under som heter "Blog."
Dette er fint. På den måten kan vi ha en fin hierarki for våre synspunkter.
Og så kommer jeg til å opprette en ny fil i det som kalles "index.php".
Awesome.
Egentlig, la oss ha dem begge her.
Å gjøre en visning filen er trolig den enkleste delen av alt dette,
og disse er trolig ting du allerede er kjent med.
Vi kommer til å gjøre noe veldig enkelt,
begynne å si: "Min liste over blogginnlegg."
Da kan vi gå gjennom,
og vi kan iterere gjennom innleggene array,
grip hver enkelt innlegg og si noe sånt som -
kanskje legge til en linje
og deretter skrive ut forfatteren og kroppen.
Det gir mening så langt?
Og la oss se om det fungerer.
Ingenting skjedde.
Jeg lurer på hvorfor.
Jeg har savnet en trinn. Veldig dumt av meg.
Jeg opprettet en visning, men jeg har ikke satt visningen som respons,
så du må gjøre en ting til.
Du må gjøre "dette svaret kropp" og sette den til å være utsikten.
Det vi går.
Vi har vår posisjon, og da har vi et innlegg,
og bare for moro skyld, la oss sette inn et annet innlegg
slik at vi kan se en liste.
Og sette inn disse to innleggene,
og nå hvis jeg oppdaterer siden,
vi se alle disse innleggene her.
>> Betyr det fornuftig så langt?
Ja, et spørsmål? Oh, okay.
Som du kan se, har vi vært i stand til å skille alle disse kodene ut
inn i ulike seksjoner, og så kan du se det er mest tydelig med utsikt koden.
Denne filen her som representerer utsikten,
det bare bryr seg om å representere data, visning av data.
Det blir gått noen form for data, og alt den gjør er bare å vise det til deg.
I alle andre deler av koden din, vil du ikke å bekymre deg for noe av det,
og lignende, gjør ditt syn koden har ikke å bekymre deg noe om
hvordan du får tilgang til databasen og så videre og så videre,
noe som er veldig bra og gjør koden mye mer vedlikeholdsvennlig.
Som jeg sa, utsikt, de er dynamikk i at
det er en fil, men det ville generere ulike visninger
basert på de variablene du faktisk passerer i,
og dessuten er det en rekke forskjellige hjelpefunksjoner
som du kan bruke til å hjelpe deg med å skrive koden din raskere,
som jeg skal vise deg i løpet av et sekund.
Yeah.
>> [Student] Så $ 0 er en kontroller, ikke sant?
At andre ting.
Spørsmålet er er $ 0 en kontroller?
$ 0 er en variabel jeg laget akkurat her.
Jeg opprettet en visning først. Jeg tildelt det til noen variable.
Da jeg passerte det inn i denne funksjonen, sett den som kroppen av responsen.
Betyr det fornuftig?
[Student] Så er utsikten :: fabrikken, er utsikten som en klasse
eller et bibliotek [uhørbart] fabrikken funksjon?
Spørsmålet er om utsikten :: fabrikken funksjon,
og i utgangspunktet dette er litt mer objektorientert programmering i hovedsak.
View er utsikten klassen, og den har en metode som kalles "Factory"
og det er en måte å ta tak i objektet som er kåret til "blog / indeks."
Og det er litt mer objektorientert programmering stuff
at jeg ikke kommer til å gå inn her for mye.
Nå åpenbart, ønsker vi å skape nye innlegg,
men vi ønsker ikke å ha for å gjøre det gjennom en database,
så vi kommer til å skape en ny aksjon for å lage et nytt innlegg,
og det er en masse ting vi må gjøre.
>> Det første vi kommer til å gjøre - la oss håndtere disse tingene en etter en.
Det første vi skal gjøre er at vi har fått til å lage et skjema
for å sette inn et nytt innlegg,
men jeg er også tenkt å legge til en ny handling først,
så legger en ny handling er like enkelt som
legge til en ny funksjon med kontrolleren,
og for nå kommer jeg til å gjøre noe helt grunnleggende,
bare ta denne visningen og legge det ut, bare vise det for deg.
Og så nå kommer jeg til å opprette en ny visning fil,
og jeg kommer til å begynne å skrive noen ting.
Hva er fint om Kohana er at de gir en rekke forskjellige hjelpefunksjoner
for deg å skrive visning kode lettere,
og en av disse hjelpefunksjoner eller hjelpemoduler
er rundt skriving former.
For å skrive skjemaer, kan jeg egentlig ikke trenger å direkte skrive noen HTML selv.
Dere har skrevet HTML-skjemaer.
Du vet hvordan det kan være veldig, veldig smertefullt og tungvint å skrive skjemaer.
Det er ikke gøy, så heldigvis,
kan vi i utgangspunktet skrive et skjema ved hjelp Kohana sin
danne hjelpefunksjoner for å gjøre det for oss.
Vi skal i utgangspunktet ha felt for hver eneste ting vi har,
så en for forfattere og ett for de organer.
Vi kommer til å ha en etikett, og vi kommer til å ha en inngang.
>> Og så til slutt, vi kommer til å ha en underkastelse.
Og som du kan se, er dette mye renere å skrive
enn alt det rotete HTML, noe som er litt fint.
Riktignok er det andre web rammeverk som har det enda renere enn det,
men minst dette er bedre enn å skrive HTML selv.
Awesome, så dette er hva du ser.
Det er litt rotete,
så jeg kommer til å legge inn et linjeskift der
for å gjøre det ser litt hyggeligere.
Vel, selvfølgelig, fortsatt ser det virkelig, virkelig ille, men vi er bare fokusert
på funksjonaliteten til nå, og ikke på det estetiske.
Ingen tid til å gjøre alt.
Og som du kan se, nå har vi en super grunnleggende form,
som er litt fint.
Denne koden vil jeg si er renere enn å prøve å skrive en HTML danne selv,
så det er fint.
Hva blir det neste?
Nå trenger vi å gjøre ting med handlingen.
Normalt når du skriver HTML-skjemaer,
du må fortelle den hvor det kommer til å sende skjemaet til.
Som standard i de fleste web-rammeverk,
det sender til nøyaktig samme URL, slik at ting er,
Hvis du sender en GET-forespørsel til / blogg / nye,
det skal vise deg skjemaet,
men hvis du sender et innlegg forespørsel til / blogg / nye med data,
det burde faktisk prøve å redde det innlegget
og gjøre noe med det.
>> Det vi skal gjøre er å
utgangspunktet alt vi trenger å gjøre for å sjekke om det er en post forespørsel eller en GET-forespørsel
er å sjekke hva som er innlegget variablene du kan stille inn.
Og hvis innlegget variabelen er satt, så vi kommer til å prøve og opprette et nytt innlegg.
Igjen, vi bare gjør dette,
og som skaper et nytt innlegg, og vi bokstavelig talt kommer til å
satt sine felt som dette,
og deretter skal vi lagre det.
Og så kommer jeg til å omdirigere
til oversiktssiden, slik at de kan se vår liste over innlegg igjen.
La oss prøve det.
Jeg vil si: "Brandon"
og deretter sende innlegget, og hvis alt går bra,
som du kan se, det omdirigert meg til indekssiden,
og hvis jeg blar til bunnen, har vi en nylig satt inn innlegget.
Yay!
Ja, spørsmålet.
>> [Student] Hva om du hadde skrevet akkurat det samme
du skrev før?
Betyr det må du kontrollere at du ikke har duplisert
samme innlevering?
Være standard, nei, fordi som standard -
beklager, er spørsmålet om du går inn i nøyaktig samme data i form
og sende det, vil det tillate deg å sette inn et duplikat objekt,
En kopi av oppføringen, egentlig?
Akkurat nå, ja, det vil tillate deg å gjøre det,
fordi i databaser er det helt gyldig å ha helt like rader,
men hvis det er en bekymring, så kan du legge valideringer, for eksempel,
å sørge for at hvis dette er akkurat det samme som noe som allerede eksisterer,
så si at det er et ugyldig objekt,
og så kan du selv spesifisere ditt feilmelding
og si, "Ugyldig fordi dette allerede eksisterer" eller noe sånt.
Men i dette tilfellet, kan jeg bare lage noe duplikat.
Nå la oss prøve og legge til noen valideringer.
Problemet med dette er akkurat nå at
Jeg kunne bokstavelig talt sende en helt blank innlegg.
Jeg kan klikke på denne knappen akkurat nå, og det vi går.
Du kan virkelig ikke se det, men denne ekstra linje her
indikerer at jeg bokstavelig talt har et nytt innlegg.
Den har bare en blank forfatter og en tom kropp,
og vi ønsker ikke å tillate folk å gjøre det.
Dette er hvor valideringen kommer i.
>> Jeg kan gå til min modell objekt,
og nå kan jeg legge til en ny funksjon som angir
hva validering regler jeg bør legge til denne modellen
å sørge for at det er gyldig eller å spesifisere hva betyr det å være en gyldig innlegget?
Og jeg vil si at det er bare en gyldig innlegg om både forfatteren og kropp
er ikke tom, og dette er hvordan du gjør det i Kohana.
Du oppretter en ny funksjon kalt "Rules",
og så er du i utgangspunktet returnere en assosiativ array
som definerer valideringsregler for dette objektet.
Vi kommer til å returnere array, og deretter hva vi skal gjøre er
sier "forfatter", det går til en matrise,
som går til en annen matrise som kalles "ikke er tom."
Og så kommer jeg til å si "kropp."
Ok, og syntaksen for dette og struktur for dette
kan se litt klumpete og litt komplisert.
Hvis du leser dokumentasjonen, er det ganske enkelt å finne ut,
Men egentlig er dette hva du må gjøre for å spesifisere
noen valideringsregler, og det er mange forskjellige regler
at Kohana vil gi deg gratis, som du kan legge til regler for å si
den må være i det minste denne lengden.
Kanskje det må være numerisk. Kanskje det må være alfanumerisk.
Kanskje har det å være på det meste denne lengden, så videre og så videre.
Det finnes mange forskjellige regler som Kohana gir for deg,
og du kan gå på deres hjemmeside, se på dokumentasjon,
og du kan se alle de forskjellige tingene du kan gjøre.
>> Men dette er alt jeg har å gjøre,
og nå la oss se hva som skjer
hvis jeg sender inn en blank innlegg.
Hva kommer til å skje? Åh, nei, jeg får en feilmelding.
Jeg får en validerings unntak.
Vel, det er bra.
Det fortalte meg at min modell er ugyldig,
men jeg ønsker ikke å vise et unntak
til brukerne mine når de prøver å sende inn noe ugyldig, ikke sant?
Jeg ønsker å gi dem noen form for vennligere feilmelding
når noe går galt.
Hva vi skal gjøre er at vi kommer til å
pakk alt i et forsøk fangst loop.
Egentlig tror jeg dette er også noe du ikke har lært ennå
i CS50, fordi C, programmeringsspråket C,
ikke har unntak, men nesten hver eneste andre språk
har unntak, så veldig, veldig kort øyeblikk,
et unntak er noe som en del av koden kan
kaste et unntak når noe går galt,
men da kanskje noen annen del av koden høyere opp
kan fange det unntak, og gjøre noe med det.
>> For eksempel, i dette tilfellet
stykke kode som prøver å redde en modell,
det bekrefter modellen, og hvis det står: "Ok, er denne modellen ugyldig,"
det kommer til å kaste et unntak, og dette er slags tilsvarer
i C du kan returnere en -1 eller noe sånt.
Og så for meg, denne funksjonen, min kode
på et høyere nivå, kan jeg prøve og fange dette unntaket
og i utgangspunktet sier: "Ok, hvis jeg fange unntak, hva skal jeg gjøre?"
Eller jeg kunne velge ikke å fange det unntak og la noen høyere opp
fange unntak, eller hvis ingen fanger den,
da er hele programmet krasjer og sier,
"Noe gikk galt, og jeg kunne ikke håndtere det."
>> Men det vi gjør er du vikle et stykke kode i en try-blokk,
og deretter du også legge til noe som kalles en catch-blokken,
som er den slags kode som vil prøve og fange unntak som kan oppstå.
Og så hvis jeg tar denne spesielle unntaket
eller ugyldig unntak, så hva jeg skal gjøre er
Jeg kommer til å sette de feil - jeg tror det er hvordan jeg gjør det -
og jeg kommer til å sette opp feilene til et objekt.
Og hva jeg skal gjøre da er hvis den treffer dette unntaket,
det er ikke til å omdirigere, og hvis den ikke omdirigere,
det kommer til å komme ut av den hvis bloggen
og traff denne bloggen / nytt, som er ønsker jeg ønsker å gjøre.
Hvis det er en feil, så jeg ønsker å gå tilbake til skjemaet
og vise disse feilene.
Nå hva jeg ønsker å gjøre er jeg ønsker å passere i disse feilene
til visningen.
Ok, jeg tror jeg har utsikt rett her,
og i utgangspunktet ønsker jeg å vise disse feilene hvis de eksisterer.
Før jeg skrive HTML for det, kommer jeg til å virkelig raskt
vise deg hva strukturen i denne feil variable ser ut,
og dette er en god praksis generelt.
Mange ganger får du noe tilbake fra noen metode,
noen funksjon i web rammeverk,
og du ikke vet hva den variable ser ut,
slik at du ikke vet hvordan du arbeider med det.
Jeg kommer til å bruke en utskrifts r metode for å i utgangspunktet skrive den ut.
>> Og som du kan se, forteller det meg at det er en førsteamanuensis array,
og du har en nøkkel, forfatter, poeng til denne strengen,
Forfatteren må ikke være tomt, og en annen tast, kropp,
peker på en annen streng, kroppen må ikke være tom.
Jeg er liksom greit, kult.
Så jeg kan reagere gjennom matrisen og skrive ut hver enkelt melding.
Det er i utgangspunktet som en assosiativ array med en haug med meldinger.
Det jeg skal gjøre er å "Dersom feil,"
og jeg kommer til å lage en ikke-sorterte liste,
og jeg kommer til å reagere gjennom alle feilene.
Og dette, og nå skal jeg prøve å sende dette igjen,
og la oss se hva vi får.
Nå får vi denne fin liste over feil,
og dette er fortsatt ganske stygg, men dette kan selvsagt være formatert til å se fint ut,
men den grunnleggende ideen er bare i noen få linjer med kode,
vi var i stand til å validere vår modell,
sørge for at visse felt var ikke tom,
og hvis noe gikk galt, og deretter returnere en slags feilmelding
Jeg kunne deretter presentere tilbake til brukeren.
Du kan også tilpasse validering din
slik at du faktisk kan ha en feilmelding
som er mer spesifikke for programmet eller noe sånt.
Alt som er generelt tilpasses.
>> Dessverre, vi kjører ut av tid,
så jeg er nødt til å kutte av live koding økten her.
Det finnes en haug med andre funksjoner som jeg ønsker å demonstrere for deg
i dette eksemplet.
For eksempel kan du legge til maler til nettstedet ditt,
så kanskje det er en slags HTML-kode som du ønsker å søke
til hver enkelt side på nettstedet ditt, og i stedet for å lime det
i hver enkelt visning fil du har, som åpenbart ville være en dårlig praksis,
kan du i utgangspunktet definere disse malene,
og deretter i kontrolleren si: "OK, jeg bruker denne malen."
"Har alle mine synspunkter bruke denne malen."
Og en siste ting jeg ønsker å vise dere så vel
at vi ikke har tid til er cross-site scripting,
og i utgangspunktet tror jeg dere har sikkert sett i CS50 -
Jeg tror David Malan trolig snakket om hvordan du kan vanligvis injiserer
Javascript-kode inn - har du snakket om dette?
Kanskje? Kanskje ikke?
>> Men mange ganger kan du injisere ondsinnet Javascript-kode
inn i noens database, og hvis de ikke unnslippe det skikkelig,
så når de presenterer at data tilbake til brukeren,
så kan det kjøre en slags tilfeldig Javascript-kode du ikke vil skal skje,
og jeg hadde tenkt å demonstrere hvordan du vil gjøre det innen Kohana.
Det er faktisk veldig, veldig enkelt.
Jeg kunne gjøre det akkurat nå i to sekunder bokstavelig.
Alt du trenger å gjøre er i utgangspunktet vikle disse tingene
i dette som kalles HTML enheter.
Og det vil automatisk unnslippe alle tegnene riktig
og pass på at du ikke får dette problemet.
[Student] Du spelt den første testen feil.
[Brandon Liu] Oh, oops.
>> Ok, det er alt jeg hadde å dele med dere for i dag.
Disse lysbildene kommer til å bli lagt inn, men disse er som regel
de eneste ressursene du bør virkelig trenger å komme i gang med Kohana.
Du kan gå til nettstedet. De har en bruksanvisning, og de har også en API explorer.
Vi kan utforske alle de forskjellige funksjonene og hjelpefunksjoner de har for deg.
De har generelt nok informasjon på nettsiden
som du kan bruke til å komme i gang og komme i gang med Kohana.
Det er ikke så mange tutorials, tror jeg, for Kohana, utenfor
hva de har på nettsiden her, så dette er trolig det beste alternativet.
Men hvis du ønsker å gå med web rammeverk
og du ikke ønsker å ha til å plukke opp et nytt språk,
og du vil ha noe som er forholdsvis lett og har en enkel læringskurve,
Jeg vil definitivt foreslår Kohana.
Det er sannsynligvis det beste tilbudet for det.
Det morsomme, skjønt, er hvis vi bruker Ruby on Rails,
vi kunne ha kopiert det vi nettopp gjorde
og sannsynligvis mer på under tre minutter.
Ingen spøk, men å lære Ruby on Rails tar mye lenger
enn det ville ta å lære Kohana.
Det er i utgangspunktet ditt valg om hva du ønsker å velge å lære,
men hvis du ønsker å komme i gang raskt,
Kohana er definitivt et svært godt valg.
>> Noen siste spørsmål før vi avslutter? Ja.
[Student] Hvordan ville vi integrere at
i en CSS rammeverk som du brukte da du ble instruere?
Spørsmålet er hvordan vi vil integrere det med en CSS rammeverk?
Hva vi ville sannsynligvis gjøre er vi ville trolig omfatte
en ny mappe hvor vi ville dumpe alle våre CSS-filer,
og da ville vi også legge til en ny mal.
I malen vil vi inkludere disse CSS-filer
å sørge for at de er referert på hver enkelt side,
og så når du faktisk skriver HTML,
du bare legge til passende klasser og whatnot,
og for eksempel når du bruker noe sånt skjema
helper funksjon, kan du legge til flere parametre etterpå
å angi hvilke klasser du ønsker å være knyttet til ulike ting
slik at de kan style det ordentlig, og det er i utgangspunktet hvordan du vil gå.
>> Andre spørsmål?
Awesome.
Takk for din tid, og takk for at du kom.
Jeg hadde ikke tenkt å legge veldig mye annet,
men en virkelig rask ting er at vi ikke har en link
til formen.
Veldig dumt.
La oss legge til en - faktisk i visningen, blogg, indeks,
la oss virkelig raskt legge en lenke som går til en ny side,
siden der vi kan sette inn et nytt innlegg.
Vi kommer til å gjøre dette.
Hva er fint er det er hele denne gruppen av HTML-hjelpefunksjoner
som gjør forskjellige ting for deg, slik at du allerede så enhetene
fungere her, men de har også en funksjon som heter "anker",
som du kan skrive i bloggen / ny
og si, "Legg inn en ny blogg."
Og det ville skape den koblingen for deg,
og dette virker veldig trivielt å gjøre, men dette er fint,
fordi anta at du skal flytte nettstedet ditt fra en domene til et annet.
Og hvis du bare skrev ut nettadressene selv,
så du ville ha til å endre alle nettadressene.
Eller kanskje du flyttet den fra en undermappe til en annen undermappe.
Du ville ha til å endre alle disse webadressene selv,
og det er ikke noe gøy.
Du kan bruke denne anker rett her,
og du kan endre domenet eller undermappen prefiks
i konfigurasjonsfilen én gang,
og da vil det gjelde som overalt, og dette er, igjen,
et flott eksempel på ikke gjenta deg selv, tørke koden din ut.
Uansett hvor du gjentar deg selv, prøve og trekke i noen slags konfigurasjonsfilen
eller til en annen funksjon og har den håndtere det for deg.
>> Og den aller siste ting som jeg ønsket å vise deg var
Anta at vi er tilbake på dette innlegget, og jeg hadde komponert noen virkelig lange essay,
men jeg glemte å ta min forfatter.
Nå når jeg klikker på "Send Post,"
Jeg mistet alt.
Nei! Virkelig trist.
Så hvordan kan du takle det?
Dette er hva vi gjør.
Hva vi gjør er her for disse innsats og tekst områdefunksjoner,
hvis vi inkluderer andre parameter, så verdien av at andre parameter
kommer til å være det feltet kommer til å være utgangspunktet befolket med.
Det vi kan gjøre er i bloggen vår controller,
vi kunne binde en annen variabel.
Kall det "verdier" kanskje.
Og pass i posten array, bokstavelig talt.
Det betyr at hvis valideringen mislyktes,
pass til meg innlegget array som jeg sendte fra den siste forespørselen,
og på den måten jeg kan bruke verdiene fra min siste innlevering
å befolke feltene.
Nå kan jeg gjøre noe sånt verdier forfatter
og verdier kroppen, og på den måten nå hvis jeg gjør noen tilfeldige ting
og klikk på "Send innlegg", så den forblir der.
Men vi kommer til å kjøre inn i et annet problem.
Det fungerer, men hvis jeg går til siden den aller første gangen,
det kommer til å krasje, og det er fordi de aller første gang
vi går til siden, har dette innlegget variabelen ikke er definert ennå.
Det er null. Det eksisterer ikke.
>> Og hva vi ønsker å si er hvis denne nøkkelen finnes,
deretter returnere verdien av denne tabellen,
men hvis nøkkelen ikke eksisterer, deretter returnere en tom streng.
Det er den funksjonaliteten vi ønsker her.
Vi ønsker å sjekke om nøkkelen finnes før du prøver å få tilgang til array,
og heldigvis nok,
Kohana gir oss også et hjelpefunksjon for det.
De har hele denne pakke med funksjoner
under navnet ARR, en forkortelse for array,
og de har en funksjon som heter "få"
og du kan passere i matrisen,
og du kan passere i navnet på nøkkelen.
Så hva det vil gjøre i utgangspunktet er det vil forsøke å få den nøkkelen,
men hvis den tasten ikke finnes i matrisen,
så vil det returnere tom, eller vi kan også spesifisere en standard, tror jeg,
som er fint.
Nå hvis vi gjør det samme igjen,
så ser du nå det fungerer i første omgang,
og igjen, når vi taster inn noen tilfeldige ting
og prøve og sende inn, så den forblir der.
>> Og jeg tror jeg kan også vise deg hvordan du legger til en mal veldig raskt.
Hva vi kan gjøre først er kan vi legge en ny visning som heter "template.php"
innenfor mappevisninger,
og hva jeg skal gjøre er jeg kommer til å skrive ut noe som kalles "innhold",
som kommer til å være min hovedinnhold.
Og kanskje helt nederst jeg kommer til å legge til, si,
copyright.
[Uhørbart student spørsmål]
[Brandon Liu] Kanskje dette er en super enkel mal jeg ønsker å bruke.
Jeg ønsker å ha en mappe med min opphavsrett på hver enkelt side,
og nå hva jeg skal gjøre i løpet av min controller
er nå i stedet for å si: "strekker Controller"
Jeg kommer til å si, "strekker Controller_Template,"
og nå i stedet for å si: "svar kropp er lik dette synet,"
Jeg kommer til å si: "denne malen innholdet er -"
og jeg tror - setter jeg et likhetstegn?
Jeg glemmer. Ja, jeg tenkte meg det.
Og nå satt jeg at innholdet variabel til lik visningen.
Jeg kan gjøre det samme her.
Og nå hvis jeg oppdaterer, kan du se nå dette opphavsrett er lagt der,
og bare gjøre noen tilfeldige innlegg,
og da, igjen, skal du se at opphavsretten er helt nederst på siden.
>> Flott. Det er alt jeg ville vise dere.
[Applaus]
Eventuelle spørsmål?
[CS50.TV]