[Seminario] [Kohana: malpeza PHP Kadra] [Brandon Liu] [Universitato Harvard] [Ĉi tiu estas CS50.] [CS50.TV] Saluton al ĉiuj. Mia nomo estas Brandon. Mi estas juna ĉi tie ĉe la kolegio faranta komputiko, kaj hodiaŭ ni iras por paroli pri Kohana, kiu estas PHP-retejo evoluo kadro. Hodiaŭ tuj estos rekta kodigo seminarion, do mi baze pasigos 5-10 minutoj eksplikante kio Kohana estas, kaj tiam Mi laŭvorte tuj konstrui super simpla blogo cxar vi rajtas tie laŭvorte de nulo. Ni tuj elŝuti la kodon de la Kohana retpaĝaro, kaj ni tuj komencu konstrui blogo, kaj espereble ĝi estos tre instrua, ĉar vi vidos eble eble mi faros kelkajn erarojn, kaj vi vidos min resanigxos de ili, aŭ vi vidos mian penson procezon kiel mi konstruu tra tiu ĉi blogo, kaj dume, vi ankaŭ ricevas familiara kun la kadro mem. Espereble ĝi estos tre instrua ekzercado. Unue, kio precize estas kadro? Se vi estis prenante CS50 tiom malproksime, vi ne vere laboris kun ajna kadroj tamen, kaj la afero estas jena. Vi probable farita 1 retejo evoluo pset jam, kaj diru al vi daŭre konstruas retejojn kaj subteni konstruaĵo retpaĝaroj. Vi devos komenci rimarki kelkajn aferojn. La unua afero, vi rimarkos, ke vi verŝajne faras la samajn aferojn foje kaj refoje dum la tuta tempo, aĵoj kiel purigado uzanto enigaĵo, aĵoj kiel organizi viajn dosierojn en certa maniero. La alia afero vi ankaŭ probable rimarkos estas ke via kodo eble komencos fariĝi tre, tre senorda, kaj vi povas lasi ĝin senorda kaj nur havas tre malfacile subteni ŝin, aux vi povas starti strukturi via kodo kaj farante gxin modula en certaj manieroj fari ĝin pli mantenible. Tiu estas kie ttt kadroj esence envenis Tiuj homoj, kiuj estis konstruitaj multe da retejoj, oni diris, "Ni ne bezonas refari ĉi ĉiun solan fojon ni konstruas retejon." "Kial ni ne simple fari pakon kiu faras cxion cxi tion por vi ĉiun solan fojon vi volas konstrui retejon? " Kaj por ke kiam vi faru novan retejon, vi simple enfokusigi kio precize tiu aparta paĝaro estas proksimume. Vi ne bezonas ripeti ĉiuj diversaj agordo kaj disiĝo de kodoj kaj reverkada kodo ke vi ofte devas fari kiam vi faras retpaĝaroj. La ideo estas ke ablono ebligas al vi skribi pli altnivelaj kodo sen devi zorgi pri malsupra nivelo detaloj. Suba-nivelo detalo povus esti io kiel kontraktanta kun pureco de uzanto enigaĵo. Tio estas io kion vi devus ne vere bezonas zorgi pri. Vi koncentriĝu sur kio via retejo atribuo estas vere pri. Ĝi forigas multajn boilerplate kodo. Ĝi estas arkitekturo por via projekto. La plej populara estus Modelo-View-Kontrolisto, kiun mi tuj raporti en sekundo. Kaj multajn fojojn tiujn kadrojn personigi aro de proceduroj, reguloj, kaj bonaj praktikoj por vi uzi por ke kiam vi adopti la ttt kadro vi devas skribi vian kodon en certa maniero, kaj ĝi estas ĝenerale interkonsentita sur aro de principoj de la komunumo kiu estas ĝenerale akceptita kiel bona maniero de skribado kodo. Ĝi faras vian kodon pli mantenible, pli uzeblaj, tiel plu kaj tiel plu. Kaj fine, la afero mi volas substreki pri kadrojn kontre bibliotekoj estas ĉi ideo pri inverto de kontrolo, kaj la afero estas jena. La diferenco inter biblioteko kaj ablono estas ke kun biblioteko vi ankoraux skribas la ĉefa programo, kaj vi estas speco de alvokante la biblioteko kaj alvokis la biblioteko fari ion por vi. La diferenco inter biblioteko kaj ablono estas, ke la kadro komenciĝas per la kontrolon, kaj alpreĝas via kodo: tial vi povas pensi pri tio kiel - tio estas kial ĝi nomiĝas ablono - la kadro provizas ĉi kadron kaj strukturon por via kodo, kaj vi plenigi la truojn, kaj tio fariĝos pli evidentaj en dua kiam vi vidas min komenci skribi kodon ene de la kunteksto de la kadro. Vi vidos, ke Mi estas la plenigi la truojn, kaj la kadro estas speco de kontroli ĉiujn movi pecojn, kaj mi devas meti la pecojn gxustaloke. Hodiaŭ ni babilos pri Kohana, kio estas unu el multaj PHP kadrojn. Ekzistas ttt kadrojn, kaj ekzistas en preskaŭ ĉiu sola lingvo, kaj mi pluki Kohana ĉar Kohana estas disputeble kaj ĝenerale rekonita kiel la plej facila PHP kadro repreni. Ĝi estas la plej malpeza. Estas aliaj aĵoj el tie, kiu venas kun multege pli da funkcioj, sed ili inklinas esti pli malfacila por repreni. Kaj fine, Kohana uzas la MVC arkitekturo. Ĝi estas malpeza sufiĉas ke ni povas laŭvorte konstrui projekton ĝuste ĉi tie ĝuste fronte de viaj okuloj, kaj vi povas pretty much sekvi kune belajn facile. Kio estas la MVC arkitekturo? Ĝi staras por Modelo-View-Kontrolisto, kaj eble, se vi pensas pri la kodo kiun vi verkis tiom multe por iu de via TTT evoluo psets vi eble povos vidi iom de tiu, sed kutime kiam oni komencas skribi pli kompleksa retejo apliko, la divido inter tiuj 3 segmentoj iĝas pli kaj pli evidenta. Mi elspezata la MVC tie ia kiel stako, kaj ofte vi aŭdas homojn paroli pri stakoj en retejo disvolviĝo, kaj tio estas por ilustri la ideon, ke ĉiu tavolo, ĉiu komponanto vere provas nur komunikas inter 2 aliaj komponantoj. Iu aliroj via retejo kiel kliento aŭ retumilo. Ili interagas kun via programo per la vido kodo. La vido kodo interagas kun la regilo. La regilo interagas kun la modelo, kaj la modelo interagas kun la SQL datumbazo. Kaj ne ekzistas saltetante inter se vi skribas vian kodo konvene. Kion tion fari? La modelo esence estas la koderon kiu traktas viajn datumojn. Io ajn kiu traktas via datumbazo, kun la celoj kiujn vi stoki, aŭ traserĉas tiuj objektoj en la datenbazo, Jen ĉio manipulitaj de la modelo. Eble vi havas celojn en via datumbazo. Ni tuj krei modelon devi fari kun fostoj, tial post eble havas iujn atributojn al ĝi. Vi eble havas funkciojn ĉirkaŭ stokante tiujn afiŝojn aŭ traserĉas afiŝojn aŭ filtri la fostoj kaj tiel plu kaj tiel plu, kaj tio estas la tuta kodo, kiu estas manipulita per la modelo. La regilo estas speco de la apliko logiko, kaj multe da malsamaj aferoj povas iri en la apliko logiko. Se vi parolas al malsama API, kiu povas esti kie vi estas kontraktanta kun la apliko logiko. Se vi provas devas alporti en la datumojn de multnombraj diversaj modeloj kaj devas kombini ilin iel, ke ofte povas esti manipulita per la regilo. Ekzemple, en Facebook, se vi amiko al iu, do eble tiu akto de establante ke interrilato povas esti farita per la regilo. Kaj finfine, la vido estas la kodo kiu estas generante kion vi reale vidi. Multaj fojoj mi kredas en la CS50 psets Ili ne vere kuraĝigas vin knaboj disigi tiuj 3 aferoj. Vi verŝajne havas tiun grandan, longan dosieron kie al la supro vi faru iuj SQL query kaj eble faros kelkajn prilaborado sur la datumoj vi ekstraktita el la datumbazo, kaj tiam vi havos vian tutan HTML ĉe la malsupro. Kaj vi povas trovi ke kiel oni kreas pli kaj pli da paĝoj ke vi tuj havos iom da kodo ripeto, kaj ankaŭ, la afero estas via dosiero gets vere granda kaj longa kaj iĝas _unwieldy_ mastrumi. La kialo kial MVC estas tiel bone rigardis estas pro kelkaj kialoj. La unua afero estas io nomata disiĝo de zorgojn tio estas la ideo ke, kiam vi havas - ideale 1 koderon faru 1 aferon kaj faru ĝin vere bone, kaj vi ne devus kombini pecoj de kodo ke fari pafas aferojn. Por ekzemplo, vidi kodo kaj modelo kodo, ili ne vere devas esti rilatigitaj. Ili ne devas esti en la sama dosierojn, do kiam vi povas, apartigi ilin el do ĝi estas facile subteni. La alia afero estas kodo reuzado. Vi povas trovi mem skribi la saman SQL query aŭ faranta simila sercxoj per kiuj eblis abstraída en 1 funkcion, kaj tio estas la ideo malantaŭ modeloj kaj regiloj, havi ĝin en apartan funkcion, kiun vi povas reuzi en malsamaj lokoj en via projekto. Kaj fine, tio ligitan al sekigita via kodo: aŭ ne ripetante mem, ne ripetu mem. Tio estas tre komprenebla en evoluo. Kiam ajn vi povas, vi ne volas ripeti mem, ĉar se vi ripetu mem,  ĝi estas multe pli kosta por subteni. Se vi volas ŝanĝi la 1 afero, vi devos ŝanĝi ĝin ĉie, kaj tio kondukas al cimojn, kaj ĝi estas horora. Bone. Demandojn tiom multe pri Kohana je ĉiuj? Granda. Nun ni iras al plonĝi en la viva kodigo kunsido, kaj espereble ĉio iras bone. Mi estas iranta al esence konstruu tiun retejon sur unu el miaj foraj serviloj, kaj aliflanken vi uloj povas ankaŭ vidu la paĝaron kaj aliri la retejon, kaj ankaŭ la medio estas pli bone agordita ol mia fora maŝino, ĉar ĝi estas kurante Linukso anstataux OS X. Ni laŭvorte tuj komenci. KohanaFramework.org. Mi iras por elŝuti la kodo de la retejo. Mi tuj kopii la ligilon adreson, iri al mia servilo, elŝuti ĝin, kaj mi iros por ĉerpi ĝin. [Studenta] Kio estas la plej granda vi povas fari la tekston? [Brandon Liu] Ĉu pli bone? [Studenta] Is that doable? [Brandon Liu] Jes, tio estas bone. Mi elŝutis ZIP-dosiero kaj Unzipped ke en dosierujo nomita Kohana, kaj ni iras al renomi ke CS50-Kohana, kaj ni volis eniri; Awesome. Ĉi tie vi vidas multajn malsamajn dosierojn. La plejparto de vi povas ignori - we're ne tuj iros tra ĉiu sola dosiero kiu estas en ĉi tien pro nia tempo devigoj, sed ĝenerale, kiam vi instalas Kohana, la unua afero kiun vi faros Estas vi iru al la dosierujo, kaj vi esence faru iun medion testoj kaj whatnot certigi vian medio adekvate starigis kuri Kohana kaj certigi, ke ĉio estas en ordo. Vi povas vidi pli aferoj pasintaj, sed ĝenerale vi ĉiam kuri en tiun 1 problemo kie plendas, ke kelkaj dosierujo estas neskribebla, kaj tio estas pro iu permesojn. Mi ne scias, kiom multe vi infanoj lernis pri dosier-permesojn en CS50, sed se vi faros ttt evoluo, vi tuj kuri en tiun temon multe. Mi tuj faros la skribebla kaj mi kredas ke mi ankaŭ devas - tie ni iru. Bone, do nun povas vidi ĉiu pasis, kaj nun diros al vi, por renomi la dosieron. Mi iras al kopii la dosieron al installed.php, kaj nun, se mi refreŝigi, tio donas al mi iun eraron, kaj tiu estas kie la sencimigo eniros Ĉi tie vi povas vidi kio reale okazos. La afero estas, implicite, Kohana supozas ke via projekto estas je la radika dosierujo de via havaĵo, Do estas atendante vin esti ĉe demo.brandonkliu.com. Ni devas diri al ŝi, ke estas reale en subdosierujon. Ĝi estas en subdosierujon nomata CS50 Kohana. La afero estas, ĝi estas malinterpretando CS50-Kohana kiel io alia, kion mi klarigos al vi en sekundo. Sed mi devas diri al vi ke estas io kion estas atendi. Kion ni faros estas ni tuj iros al tiu dosierujo nomita bootstrap.php, kiu estas la agordo dosierujo kie multaj malsamaj aferoj starigis. Mi malfermu ke ĝis. Tiam eble unu el la unuaj aferoj mi tion faros estas ŝanĝi la horzono. Kaj tiam ni vidos. Aha! Ĝuste ĉi tie. Ekzistas aro da malsamaj agordo dirojn en ĉi tie, sed la unu mi serĉas estas tiu afero nomata bazon URL: kaj defaŭlte mi enretigos ĝin starigis al Kohana, sed mi tuj ŝanĝu tion al CS50-Kohana, kaj mi kredas ke devus ripari ĝin. Jes, granda. Defaŭlte, por vidi, ke ĝi funkcias, ĝi diras, "Saluton Mondo." Kien kiuj venas de? Kiel ni atingos Saluton Mondo? Kien precize estas la kodo kiu fakte skribis tion? Por kompreni tion, mi devos enkonduki tiun koncepton nomata routing. Pli malpli ĉiuj TTT kadroj havas la koncepto nomata routing, kiu estas la peco de la softvaro kiu mapas certaj URL- al certa koderon ene viajn kadro. Ekzemple, se vi havas iujn URL kaj vi iros al iu retadreso kiel foo.com / blog / ĉiuj tiam kion la kadro tuj fari - aŭ almenaŭ kion Kohana tuj fari - Estas ĝi tuj trovos klason nomita regilo blogo, kaj gxi tuj kuri al la funkcio nomata agado cxiuj. Mi scias, mi parolas pri klaso kaj funkcioj, kaj mi scias, vi uloj ne kovris klasoj kaj funkcioj en CS50 ankoraŭ, sed por nun, vi povas pensi pri klasoj kiel simplan grupon de funkcioj, manieron de kolektante funkcioj kune. Tio estas vere ĉiuj vi devas scii. Nu, se ni rigardas nian dosierujon strukturo, interne de la apliko dosierujo estas alia dosierujo nomita klasoj, kaj la aliaj dosierujoj nomataj Controller kaj modelo. Se vi rigardi en la Controller dosierujo, Ni vidas, ke ekzistas dosiero nomata Welcome, kaj vi povas vidi ĉi tie estas klaso nomata Controller Bonvenon, kaj tie estas funkcio nomata Ago Index, kaj kion ŝi faras estas ĝi elmontras la korpo de via respondo al Saluton Mondo. Tie estas kie la kodo estas skribita. La alia demando estas, nu, mi ne iris al bla, bla, bla, / bonvenon / index. Kiel mi finas ĉi tie? Nu, tio estas simple pro tie ĉe la fundo de nia bootstrap dosieron kie ni metis niajn vojojn vi povas vidi, ke ili metis iujn defaŭltaĵoj por vi. La defaŭlta regilo estas bonvena. La defaŭlta ago estas Indekso. Tial kiam ni neniel tie aŭtomate iris al la Bonvenon adaptilo kaj la indico Agado. Ĉio sencon ĝis nun? Nun, vi povas fari pli ol nur iri al Controller kaj specifan agon. Vi ankaux povas pasi en parametroj por la regilo. Nur kiel ekzemplo, Mi tuj aldonos alian agon al ĉi adaptilo por montri al vi. Ni nomas tiun agon Eĥon, ĉar ĝi tuj rakontos al vi, kion vi donas al ŝi, kaj tial mi esence tuj ekpreni parametro kiu tuj estos senditaj pere de mi al la routing programo, kaj kiel vi povas vidi ĉi tie, tiun linion ĝuste ĉi tie, vi povas vidi, ke tio esence signifas ke vi havas komandon, kaj vi havas /, kaj vi havas agadon, kaj vi havas alian /, kaj tiu tuj estos parametroj, kaj ĉar ni havas ĉi nomo ID ene angulajn krampojn, tio signifas ke ni enoficigante ĉi parametro ID. Poste en mia regilo kodo, se mi volas ekpreni malliberejo de tiu parametro, Mi povas uzi la kodon mi skribis, trovu la parametro nomata ID. Tio estas kion mi faris ĉi tie, kaj mi tuj revenos kaj diros: "Vi diris" kiu. Kaj tial nun, se mi iras al nia retejo, Mi iras al cs50-kohana/welcome/echo/Helloooo-- oh, tio estas vera. Tie estas 1 paŝo mi preterlasis. Ĉi tiu estas parto de la viva kodigo ideo. Jen 1 afero. Ni vidu. Do normale defaŭlte kun amaso de tiuj ttt aplikoj Vi devas inkluzivi ĉi index.php afero en via URL ĉar la ideo estas index.php estas speco de la enirpunkto de via kandidatiĝo, sed kompreneble, tio estas ia ĝena havi. Vi ne volas havi index.php aperi en via URL kaj preskaux cxiun ttt kadro el la skatolo havas ĉi index.php problemo, kaj tial oni devas preni kelkajn mezurojn por povi forigi tion. Kaj tiel en tiu kazo, kion ni faros estas ni tuj uzi dosieron nomata. htaccess, kaj ĉi tiu estas iu kiu estas specifa al la Apache ttt-servilo, kaj ĝi povas fari tion kiel reverki URLoj kaj redirekti URLs kaj tiel plu kaj tiel plu, kaj Kohana estas bela sufiĉas por havigi ŝablono. htaccess dosieron kiun ni povas uzi. Kiel vi povas vidi, ekzistas dosiero tie nomata example.htaccess, kaj ni tuj kopii ke. htaccess. Mi tuj malfermu ĉi kaj redakti gxin, kaj esence ĝi faras multajn malsamajn aferojn. La ŝlosilo linio vi eble volas rigardi pravas tie. La ideo estas, ke tio starigas regulon kiu diras, "Konsentite, kion ajn vi tajpas en, prepend index.php al tio." Vi povas vidi tion. La. * Signifas ion ajn, kongruas ion, kaj tiam la dua parto estas index.php / $ 0, kaj $ 0 referencas al kiom estis parigitaj antaŭe. Ĉu tio havas sencon? Sed la vere klavo aferon mi volas ŝanĝi estas ŝanĝi ĉi reverki bazo, kiu estas la URL-bazo. Ĝi ia supozas kie vi laboras el. Mi tuj aldonos CS50 Kohana al tiu, kaj tiu vojo nun se mi forigu la index.php, gxi devus funkcii, kaj mi tuj aldonu iuj nombroj montri al vi ke ĝi ja faris laboron. Sonas bone. Iu demandoj ĝis nun? [Studenta] Kiel ĝi scias fari la 123? Ĉu tio estas argumento? Ekzakte. Vi povas pensi pri ĝi nur kiel argumenton. Sed la stranga afero, tamen, estas ke la vojo Kohana faras estas ke ili ne faru precize kiel argumenton. Vi devos ekpreni ĝin kiel ĉi tio. Vi devos ekpreni la peto objekto kaj demandu pri la parametro kiu estas nomata ID, kaj tiu nomo ID devenas ke bootstrap dosieron kiun mi montris pli frue, kaj la nomo ID estis en tiuj angulajn krampojn, kaj tiel estas kiel vi grab tiuj parametroj. Awesome. Ajna alia demandojn? Kiel mi diris, regiloj, ili manipulas apliko logiko, do tio estas 1 petskribon, kie vi povas vidi that's - ĝi estas tre baza, sed estas ankoraŭ apliko logiko, la ideo de kaptante la parametron kaj kreante novan ĉenon kiu diras, "Vi diris, bla," kaj tiam kracxi kiuj revenas al vi. Kaj ĝenerale, kion vi faras al vi krei malsamaj regiloj. Vi kreas apartan regiloj por malsamaj partoj de via retejo. Hodiaŭ ni tuj faros tre simpla retejo, kaj gxi tuj estos tre baza blogo. Ni tuj fari novan regilo nur por la postenoj en blogo. Sed tiam, se mi estus same aldoni komentojn al la blogo de post, tiam mi versxajne volas fari novan adaptilo por tiuj komentoj. Se mi volis aldoni uzantojn, mi probable aldonu novan adaptilo por tiuj uzantoj, kaj ĝenerale, la ideo estas ke ĉiam vi havas novan modelon, nova datumo celo kiun vi pritraktas, vi havas libera unulitan adaptilo por tiu datumo objekto. Hodiaŭ ni nur irante labori kun 1 datumoj celon, kaj tiu tuj estos afiŝojn, kaj ankaŭ vi povas pensi pri datumoj celoj kiel la respondaj al tabloj. Ĝenerale ĉiu tablo respondas al 1 tipo de datumoj celon, tial la fosto tablo havos 1 diskuto modelo, kiu havos 1 diskuto regilo responda al tiu, kaj la saman por komentoj, la sama por uzantoj, kaj tiel plu kaj tiel plu. Kaj tio estas ĝenerala regulo de thumb. Tie tuj estos specialaj kazoj, kie vi povas malsami de tio, sed 90% de la tempo, kiam estas kion vi tuj estos faranta, kaj mi montros al vi, tio estas kion ni tuj faros hodiaŭ. 1 pli koncepton antaux ni plonĝi reen en la kodo, tiun ideon de objekto rilata surĵeto. You guys jam faris ttt evoluo pset, kaj vi vidis, ke vi faru SQL query: kaj kion ajn li revenas al vi, estas vicoj. Vi ricevas tiujn vicojn, kaj vi indekso ilin per iu nomo, la nomo de la kolumno kaj la tablo kaj tiel estas kiel vi laboras kun ĝi, kaj tio povas esti iom ĝena. Sed krome, se vi havas rilatojn ene de via datenbazo, kiel ekzemple se mi havas komentojn kaj afiŝojn, tiam eble mi volas ekpreni la patro post de komenton. Se mi uzas nur vicoj en SQL, tiam ĉio mi povas akiri estas la ID de la patro fosto kaj ne la realan post si. Sed kiam ni estas kodigo, kion ni vere volas estas reale ekpreni  la patro sendi mem kelkfoje. Kio objekto rilata surĵeto faras estas Ĝi prenas la rezultoj de la datumbazo informpeto kaj metas ĝin en celoj por vi, kiuj estas multe pli agrabla por labori kun ol ebenaĵo arrays kaj vicoj. Ekzemple, nun kiam mi havas komenton eble, kaj mi volas ekpreni lia patro post, kaj mi eble komenti sago post, tiam gxi efektive donu al mi la fosto objekto responda al la reala patro post, ne nur kelkaj ID, kiun mi devus alie devas uzi kaj fari alian SQL query ekpreni la fosto, kio estas maloportuna kaj nenecesa. Kaj krome, per surĵeto ĉiuj tiuj datumoj vicoj en celoj, vi povas ankaŭ alfiksi pli funkcioj al celoj, tiel ekzemple, mi parolis pri kiel klasoj estas esence grupoj de funkcioj. Vi povas pensi pri tio kiel tio. Ekzemple, eble mi havos afiŝo celon, kaj eble mi ŝatus havi ian funkcion alfiksis al ĝi kiu esence diras al mi gxi estis lastatempe eldonita? Gxi estis eldonita en la lasta semajno, vera aŭ falsa? Kaj tio estas funkcio mi povas alfiksi sur tiu celo, kaj ĝi estas vere oportune havi ĝin en la sama loko, kaj tie estas gastiganto de malsamaj funkcioj povas krei por ĉi tiuj celoj, kaj ĝi estas vere bela povi aligu ĝin al klaso, al objekto, dum, se vi nur devis vicoj venas el via datumbazo, tiam vi ne povas vere ligi ajnan funcionalidad al tio. Ĝi estas laŭvorte nur datumojn. Demandojn pri kiuj ĉe ĉiu? ORMs estas tre komuna retejo disvolviĝo, kaj estas multaj diversaj tipoj de ORMs, kaj Kohana havas sian propran ORM. Ĝi estas tre baza, sed vi ricevos guston de tio, kion ĝi aspektas. Ni krei modelon por nia blogo afiŝojn, kaj la unua afero, kiun ni evidente bezonas fari estas krei veran tablo ene nia datumbazo por fakte stoki niaj datumoj por tiuj postenoj. La unua afero Mi iras fari estas iri al phpMyAdmin. Ĉu vi uloj uzis phpMyAdmin antaŭe? Konsentite, awesome, do you guys jam scias kio tio estas, kaj mi tuj krei novajn tablo nomata Kohana Afiŝoj, kaj gxi tuj estos vere simpla. Mi devos ensaluti re-ensalutu Ĉiuj ni tuj faros hodiaŭ estas havi aŭtoro kaj korpo, nur teni ĝin simpla. Mi iras al krei tiun tablon, kaj nun ni nur devas tablo reprezentis nian afiŝojn kun 2 kampoj por nia aŭtoro kaj nia korpo. La alia afero mi faros nun estas konfiguri mian ttt apliko do ĝi scipovas konekti al la datumbazo, kaj ĉi, denove, estas io kion vi devos fari kun ĉiuj aplikoj retejo. Vi devas diri al ĝi la nomon de uzanto kaj pasvorto kaj la nomo de la datumbazo kaj tiel plu kaj tiel plu elkompreni kiel reale konekti al via datumbazo. En Kohana, ni havas ion nomita datumbazo modulon, kaj en la agordo dosierujo ni havas ĉi dosierujo nomita Datumbazo, kaj kiel vi povas vidi, estas aro da agordojn vi devas agordi tien sciigi kio estas la nomo de uzanto kaj pasvorto cxar la datumbaza do mi efektive povas konekti al ĝi. Kaj ĉar mi ne volas ke vi infanoj por fakte scias la nomo de uzanto kaj pasvorto de mia datenbazo, Mi havas dosieron, kie mi jam starigis la tuton, kaj mi tuj kopiu kaj algluu ĝin super. Awesome. Okay. Mi kredas ke tio estas ĉiuj la agordon mi bezonas fari, sed ni vidos. Ni daŭre laboras en ĝin, kaj se io kraŝas, tiam ni devos ripari ĝin. Nun kio mi tuj faros estas mi iros por krei novan regilo. Aŭ fakte, pardonon. Unue mi devas krei novan modelon. Mi kreos novan modelon nomata Post.php, kaj tio, kion ni faros estas ni iras, por voki lin klaso Model_Post. Get iuj sintakso reliefigante plu, kaj tiel, kiam mi diras, "etendas ORM," tio estas esence iuj pli objekteman programadon, kiu bedaŭrinde vi uloj ne lernis en CS50 tamen, sed ĝi estas sufiĉe facila por repreni. Ĝi donas al mi la tutan ĉi ekstra funcionalidad kiuj venas en ĉi ORM pako, kaj do mi ricevos multajn ekstrajn funkciojn kaj whatnot senpage, kion vi vidos iom da en sekundo. Ĝuste nun fakte ĉio mi devas fari estas krei ĉi klaso. Mi eĉ ne bezonas fari iu ajn funkcio aŭ ion ajn, sed mi kreis klaso kiu reprezentas la tablo, kaj cxar Mi etendis ĉi ORM klaso, Mi ricevos multajn aferojn por liberaj, tiel cxar nun vi ne devas agordi ion pli supren. Kaj nun kion mi tuj faros estas Mi tuj krei novajn adaptilo, kiun mi tuj nomumi blog.php, kaj mi tuj kopii super la Bonvenon adaptilo tial mi ne devas Retajpu kelkaj havajxoj, kaj nun mi devas renomi ĉi. Nu, kion mi faros por testi certigi ĉio laboras ekstere, Mi tuj havigu la unua post de mia datumbazo kaj presi la korpon de la afiŝo en la ekrano. Por fari tion, kion mi faros unue mi iros por savi la afiŝojn al variablo tia, kion ni faros estas - en Kohana kion vi faras por ekpreni la fosto objekto ĝi estas speco de peza, sed vi devos fari tion nomis ORM :: fabriko, kaj tiam vi pasos en la nomo de la modelo vi volas, kaj gxi redonas la ORM objekton kiu reprezentas tiun modelon. Kaj tiam, kiel mi diris, kiam ni etendas la ORM celon, ni preni cxiujn tiujn metodojn por liberaj, tiel ekzemple, ni atingos ĉi nova funkcio nomita "trovi ĉiujn," kiu aŭtomate revenas ĉiu sola fosto en la datenbazo, kio estas sufiĉe oportuna. Kaj nun en la korpo, mi tuj revenos la unuan postenon kaj reveni lian korpon. Kaj kompreneble, mi devas krei fosto, do ni enmetu novan postenon. Mi diros, "Brandon, mia unua afiŝo." Awesome. Kaj nun ni tuj iru al blogoj kaj se ĉiuj bone funkcias - oh, tio estas iu alia mutaj dosieron permeson afero denove. Tenu la 1 sekundo. Ĝi estas speco de absurda. Tie ni iru. Okay. Mi fiksis ke permeso problemon. Ĝi provis krei iujn dosierojn kaj iuj log, kaj la permesoj, denove, ne estis ĝuste agordita, do mi faris ĝin tial tiujn dosierojn estis skribebla kaj plenumebla do ĝi povus reale ensaluti por aĵoj. Nun ĝi estas doni al mi alian escepto diro, "klaso ORM ne trovita", kaj tio estas ĉar mi forgesis alian paŝon. Domaĝe. En la bootstrap dosierujon dosieron esas tiuj moduloj ĉi tie, kion vi povas elekti por aktivigi aŭ malaktivigi. Tio estas aro da malsamaj karakterizaĵoj kiuj vi povas elekti uzi ene Kohana, kiu estas speco de agrabla. Ekzemple, oni havas aŭtentigan modulon kion vi povas uzi por legalizante uzantoj. Ili havas caching modulon se vi volas apliki ia Caching reen fino fari la apliko laboro pli rapide kaj whatnot. Ni devas ebligi al la datumbazo kaj la ORM modulon, ĉar kiel mi diris, ni uzas la datumbazo, evidente, kaj ni ankaŭ devas aktivigi la ORM modulon, ĉar ni ŝatus havi la ekstran funkcioj, kiu estas agrable havi. Ĉiuj mi devas fari estas uncomment tiuj 2 linioj, kaj nun, se mi refreŝigi, li donacis al mi alian eraron. Ĝi diras, "Klaso Model_Post ne trovita." Nun jen estas bona problemo havi. Ni vidu. Faru ĝin publika. No Atendu. Ho, kara. Mi ne scias kial tio ne povis trovi tiun. Tio estas vere stranga. Mi havas ĉi klaso ĝuste ĉi tie. Mi supozas ke mi povus havi al - oh. Mi tiom silentis. Mi forgesis aldoni PHP etikedo. Tio estas kial. Nun mi devas malfari ke 1 ŝanĝo mi ĵus faris. Bone. Tie ni iru. Tio estis vere stulta. Mi ne havis premieron PHP etikedo. Sed kiel vi povas vidi, nun ĝi taŭge funkcias, ĉu ne? Ni havas 1 post. Ni kaptis la unuan postenon, kaj nun ni presitaj el lia korpo. Granda. Fantastic. Demandojn ĝis nun? Nope? Demandojn? Konsentite, do ni ĵus kreis la fosto modelo, tre baza, kaj ni tuj aldonu iuj funkcioj poste. Ni povas aldoni validations kaj filtrado. Validations estas unu el la aferoj ke kadrojn solvi por vi vere, vere bone, kaj mi ne kredas vin knaboj devis fari ĉi tiun por via CS50 pset, sed se vi faros ttt evoluo por via fina projekto, vi probable tuj volas fari ian validigon, kiel ne havi malplenan uzulnomoj, eble havante pasvorto kun almenaŭ iom longe, aĵoj kiel tio. Kaj estas vere maloportuna por apliki ĉi tiujn aĵojn por ni mem, kaj preskaux cxiun solan ttt kadro faras ĝin por vi kaj permesas vin fari gxin en tre pura formo. Kaj la modelo estas kie vi ĝenerale esprimi tiujn validigo reguloj, ĉar ĝi estas validigi ĉu modelo validas aŭ ne. Sed por nun, ni tuj metis tiun ĝis poste, kaj cxar nun ni iras por labori sur la alia parto, kaj ni tuj provi kaj fari novajn vido kiuj listigas ĉiujn afiŝojn. La paŝoj implikita en fari novan agon por listing ĉiujn afiŝojn Estas ekpreni listo de ĉiuj afiŝoj kaj tiam redonu la listo de ĉiuj afiŝoj tra cele. Ĝuste tie, feliĉe sufiĉe, ni jam kaptis la tutan afiŝojn uzante tiun unuan linion, la trovos ĉiujn funkcion, kaj nun kion ni faros estas tiel malproksima Mi estis rekte opcio la korpon de la respondo aprobante la kordo, sed nun mi volas uzi vido, kaj la diferenco inter vido kaj nur faras ĉi estas cele mi povas havi belan, grandan HTML ŝablono, kaj kion mi povas fari estas fordoni certaj variabloj kaj tiam esti la vido aŭtomate popoli lia ŝablono uzante tiujn variablojn. Kion mi faros, estas mi krei novan vidon, kaj mi enoficigi la vido ion kiel "blogo / index" kaj mi tuj esence ligi tio - oh, kion mi skribas? Mia cerbo estas aliloke. Mi tuj kateni la afiŝojn variablon al la vido, tial tiu maniero la vidpunkto havas aliron al afiŝo variablo. Do nun mi bezonas por krei tiun vidpunkton, tial jen ni havas ĉi dosierujo nomita "Vidoj" kaj unue, mi provus krei novan dosierujon sub tiu nomita "Blogo". Tiu estas bela. Tiel ni povas havi belan hierarkio por niaj opinioj. Kaj poste mi iros kaj krei alian dosieron en tie nomata "index.php". Awesome. Fakte, ni havas ilin ambaŭ tie. Farante view dosiero estas probable la plej simpla parto de ĉio ĉi, kaj jen estas probable tion vi jam familiara kun. Ni intencas fari ion vere simpla, komenci diri: "Mia listo de blogo afiŝojn." Poste ni povas iri tra, kaj ni povas persisti tra la afiŝojn tabelo, grab ĉiu sola fosto kaj diras ion kiel - eble aldoni linion kaj poste printi la aŭtoro kaj la korpo. Tio havas sencon ĝis nun? Kaj ni vidu, se tio funkcias. Nenio okazis. Mi scivolas kial. Ho, mi maltrafis 1 paŝo. Tre stulte de mi. Mi kreis vidpunkto, sed mi ne agordis la vido kiel la respondon, tiel vi devas fari ankoraŭ 1 afero. Vi devos fari "ĉi respondo korpo" kaj metis gxin al esti la vido. Tie ni iru. Ni havas nian rubrikon, kaj tiam ni havas post, kaj ĝuste pro piedbatoj, ni enmetas alian postenon tiel ni povas vidi liston. Kaj enmeti tiujn 2 afiŝojn, kaj nun, se mi refreŝigi la paĝon, ni vidas ĉiujn tiujn afiŝojn ĉi tie. Ĉu tio havas sencon ĝis nun? Yeah, demando? Ho, bone. Kiel vi povas vidi, ni povis disigi cxiujn tiujn kodojn ekstere en malsamaj sekcioj, kaj tiam vi povas vidi gxin estas pli klara kun la vido kodo. Tiu dosiero tie kiu reprezentas la vidpunkton, nur zorgas pri reprezenti datumojn, montri datumojn. Ĝi gets pasis ian datumojn, kaj ĉiuj faras estas ĝuste montri ĝin al vi. En ĉiuj aliaj partoj de via kodo, vi ne devos zorgi pri iu ajn el tiu, kaj simile, via vidpunkto kodo ne devas maltrankviligi ion pri kiel aliri la datenbazon kaj tiel plu kaj tiel plu, kiu estas vere bona kaj faras via kodo multe pli mantenible. Kiel mi diris, opinioj, ili estas dinamika en tiu ĝi estas la 1-dosiero, sed ĝi generus malsamaj vidpunktoj bazita sur la variablojn vi fakte pasas en, kaj krome, estas amaso de malsamaj helpanton funkcioj ke vi povas uzi por helpi vin verki via kodo rapida, kion mi montros al vi en nur duan. Jes. [Studenta] Do $ 0 estas adaptilo, right? Tiu dua afero. La demando estas estas $ 0 controlador? $ 0 estas variablo Mi kreis ĝuste ĉi tie. Mi kreis view unue. Mi atribuas gxin al iu variablo. Do mi pasigis ĝin en ĉi tiun funkcion, starigis ĝin kiel la korpo de la respondo. Ĉu tio havas sencon? [Studenta] Tia estas view :: fabriko, estas vidita kiel kategorio aŭ biblioteko [inaudibles] fabriko funkcio? La demando estas pri la vido :: fabriko funkcion, kaj esence tio estas iom pli objekteman programadon esence. View estas la vidpunkto de klaso, kaj ĝi havas metodo nomata "Fabriko," kaj tio estas maniero por ekpreni la celo kiu estas nomata "blogo / indekso." Kaj tio estas iom pli objekteman programadon stuff ke mi ne tuj iru al tie tro multe. Nun evidente, ni volas krei novajn afiŝojn, sed ni ne volas devi fari tion tra datumbazo, tial ni tuj krei novajn agado por kreado de nova posteno, kaj tie estas multe da taskoj oni devas fari. La unua afero, kiun ni iras fari - ni pritrakti tion unu post unu. La unua afero, kiun ni devos fari estas ni devas krei formo por enmeto de nova posteno, sed mi ankaŭ tuj aldoni novajn agojn unua, tial aldoni novan agado estas same facila kiel aldoni novan funkcion kun via adaptilo, kaj cxar nun Mi faros ion tre baza, nur grab tiu vido kaj poŝti ĝin, simple vidigi ĝin por vi. Kaj poste mi nun tuj krei novajn view dosiero, kaj mi tuj komenci skribi iujn vazojn. Kio estas agrable pri Kohana estas ke ili ofertas multajn malsamajn helpanton funkcioj por vi skribi vido kodon pli facile, kaj 1 el tiuj helpanton funkciojn aŭ helpanto moduloj Estas ĉirkaŭ skribi formojn. Por skribi formojn, mi ne vere devos rekte skribi ajnan HTML mem. You guys skribis HTML. Vi scias, kiel tio povas esti vere, vere doloraj kaj malkomfortaj verki formojn. Ĝi ne estas amuza, do feliĉe, ni povas baze skribi formo uzanta Kohana la formi helpanton funkcioj por fari ĝin por ni. Ni iras al esence havi kampoj por ĉiu sola afero, kiun ni havas, tial unu por aŭtoroj kaj unu por la korpoj. Ni tuj havas etiketon, kaj ni tuj havos enigo. Kaj poste fine, ni tuj havos submetiĝo. Kaj kiel vi povas vidi, tio estas multe pli pura skribi ol cxiuj, kiuj senorda HTML, kiu estas speco de agrabla. Koncedas, ke estas aliaj ttt kadroj kiuj havas ĝin eĉ pli puran ol tiu, sed almenaŭ tio estas pli bone ol skribi la HTML mem. Awesome, do tio estas, kion vi vidos. Tio estas speco de senordaj, do mi tuj aldonu linerompo tie fari, ke aspektas iom pli afabla. Nu, kompreneble, ĝi ankoraŭ aspektas vere, vere malbona, sed ni nur centrita sur la funcionalidad por nun kaj ne sur la estetiko. Ne estas tempo por fari ĉion. Kaj kiel vi povas vidi, ni nun havas super baza formo, kio estas speco de agrabla. Ĉi tiu kodo mi devus diri estas puraj ol provas skribi HTML formi mem, tiel, ke estas agrable. Kio estas sekvanta? Nun ni devas fari tion kun la ago. Kutime, kiam vi skribas HTML, vi devas diri al ŝi, kie ĝi okazos al la formularon por. Implicite en plej ttt kadrojn, ĝi submetas al la ĝusta sama URL, do la afero estas, se vi sendos get peto / blog / nova, ĝi devus montri al vi la formon, sed se vi sendas post peto al / blog / nova kun la datumoj, ĝi devus efektive provas savi tion, post kaj faru ion kun tio. Kion ni faros estas esence ĉiuj ni devas fari por kontroli, ĉu ĝi estas post peto aux get peto Estas por kontroli kio estas la fosto variablojn vi povas agordi. Kaj se la fosto variablo estas fiksita, do ni tuj provi krei novan postenon. Denove, ni nur faru tion, kaj tio kreas novan postenon, kaj oni laŭvorte tuj starigis lian kampoj kiel ĉi, kaj tiam ni tuj por savi ŝin. Kaj poste mi iros ridirektanta al la indekso pagxo do ili povas vidi nian liston de afiŝojn denove. Ni provu tion. Mi diros, "Brandon," kaj tiam submit la fosto, kaj se ĉiu iras bone, kiel vi povas vidi, ĝi alidirektita min al la indekso paĝo kaj se mi rulumas la fundon, ni havas nove enmetita post. Yay! Yeah, demando. [Studenta] Kio, se vi eniris la ĝusta sama aĵo vi tajpis antaŭe? Ĉu ĝi kontroli por certiĝi ke vi ne duobligi la sama submetiĝo? Estu defaŭlte, ne, ĉar defaŭlte - bedaŭras, la demando estas, se vi eniros en la ĝusta sama datumojn en la formo kaj submeti ke, ĉu ĝi permesas enmeti duplikaton celon, duplikaton enirejo, esence? Ĝuste nun, jes, ĝi ebligos vin fari tion, ĉar en la datumbazoj estas perfekte valida havi tute duplikatajn vicoj, sed se tiu estas maltrankvilo, tiam vi povas aldoni validations, ekzemple, por certiĝi, ke se tio estas ĝuste la sama kiel iu kiu jam ekzistas, tiam diru, ke ĝi estas nevalida celon, kaj tiam vi povas eĉ specifi vian erarmesaĝon kaj diri, "Nevalida ĉar tio jam ekzistas" aŭ io simila. Sed en tiu kazo, mi povus simple krei iun duplikaton. Nun ni provu kaj aldoni kelkajn validations. La problemo kun ĉi tiu nun estas ke Mi povus laŭvorte submit tute malplenan postenon. Mi povas alklaki tiun butonon ĝuste nun, kaj tie ni iru. Vi ne povas vere vidi ĝin, sed ĉi tiu superflua linio tien indikas ke mi laŭvorte havas novan postenon. Ĝi nur havas malplenan aŭtoro kaj malplenan korpon, kaj ni ne volas permesi al homoj por fari tion. Tie estas kie validigo eniros Mi povas iri al mia modelo celon, kaj nun mi povas aldoni novan funkcion kiu specifas kio validigo reguloj mi devus aldoni al tiu modelo por certiĝi, ke ĝi estas valida aŭ specifi kion signifas esti valida post? Kaj mi volas diri ke estas nur valida post se ambaŭ la aŭtoro kaj korpo ne estas malplena, kaj tiu estas kiel vi faras ĝin en Kohana. Vi kreas novan funkcio nomita "Reguloj" kaj tiam vi esence reveni asocieca tabelo kiu difinas la validigo reguloj por tiu celo. Ni tuj revenos la tabelo, kaj poste, kion ni faros estas diri "aŭtoro", ĝi iras al tabelo, kiu iras al alia tabelo nomas "ne estas malplena." Kaj poste mi iros diri "la korpo". Okay, kaj la sintakson por tio kaj strukturon por tiu eble aspektas iom ĝene kaj iom komplika. Se vi legis la dokumentaron, ĝi estas bela simpla elkompreni, Sed esence tio estas kion vi bezonas fari specifi iuj validigo reguloj, kaj ekzistas multaj malsamaj reguloj ke Kohana donos al vi senpage, kiel vi povas aldoni regulojn por diri ĝi devas esti almenaŭ ĉi longa. Eble ĝi devas esti nombra. Eble ĝi devas esti alfa nombraj. Eble ĝi devas esti maksimume ĉi longo, tiel plu kaj tiel plu. Ekzistas multaj diversaj reguloj kiuj Kohana havigas al vi, kaj vi povas iri sur ilia retpaĝaro, rigardi la dokumentaron, kaj vi povas vidi ĉiujn malsamajn aferojn, kiujn vi povas fari. Sed tio estas ĉio, kion mi devas fari, kaj nun ni vidu kio okazas se mi submit vakan postenon. Kio okazos? Ho, ne, mi ricevas eraron. Mi ricevas validigo escepto. Nu, estas bona. Ĝi diris al mi, ke mia modelo estas nevalida, sed mi ne volas vidigi escepton al mia uzantoj kiam ili provas submeti ion nevalida, right? Mi volas doni al ili ian amikan erarmesaĝon kiam io iras malbone. Kion ni faros estas ni tuj enpaki ĉion en try catch buklo. Efektive, mi pensas, ke estas ankaŭ iu vi ne lernis ankoraŭ en CS50, ĉar C, la programlingvo C, ne havas esceptojn, sed preskaŭ ĉiu sola alia lingvo havas esceptojn, tio vere, vere mallonge, escepto estas iu kiun koderon povas ĵeti escepton kiam io fuŝas, sed tiam eble iuj aliaj koderon pli supren povas kapti tiu escepto kaj faru ion kun tio. Ekzemple, en tiu kazo, la koderon kiuj provas savi modelon, ĝi validigas la modelo, kaj se ĝi diras, "Bone, tiu modelo estas nevalida" ĝi tuj ĵetu escepton, kaj ĉi tiu estas speco de ekvivalento al en C vi povus redoni a -1 aŭ io kiel tio. Kaj tiam mi, ĉi tiu funkcio, mia kodo je pli alta nivelo, mi povas provi kapti tiu escepto kaj esence diras, "Bone, se mi kaptos la escepto, kion mi povos fari?" Aux mi povus elekti ne kaptas kiuj escepto kaj lasu iun pli alte kapti la escepton, aŭ se neniu lin kaptas, tiam la tuta programo kraŝas kaj diras: "Io misokazis, kaj mi ne povis manipuli ĝin." Sed kion ni faras estas vi wrap koderon en try bloko, kaj tiam vi ankaŭ aldonu iun nomita akirado bloko, kiu estas la speco de kodo ke provos kaj kapti esceptoj kiuj povas okazi. Kaj tial, se mi kaptos tiun apartan escepton aŭ invalidation escepton, tiam kion mi tuj faros estas Mi tuj metis la eraroj - mi pensas ke estas kiel mi faru ĝin - kaj mi tuj metis la erarojn al iu celo. Kaj tiam kion mi faros se lin batas tiu escepto, ĝi ne estas tuj ridirektanta, kaj se ĝi ne ridirektanta, ĝi tuj venas el la se blogo kaj batis ĉi blogo / nova, kiun oni volas mi volas fari. Se estas eraro, ĉar mi volas reiri al la formo kaj montri tiuj eraroj. Nu, kion mi volas fari estas mi volas en tiuj eraroj al la vido. Konsentite, mi kredas ke mi havas la opinion ĉi tie, kaj esence Mi deziras montri tiuj eraroj, se ili ekzistas. Antaŭ mi skribos la HTML por ke, mi iros al vere rapide montras al vi, kion la strukturo de ĉi eraroj variablo similas, kaj ĉi tiu estas bona praktiko ĝenerale. Multaj fojoj vi ricevas ion de iu metodo, iu funkcio en la TTT-kadro, kaj vi ne scias kio estas la variablo aspektas kiel, tial vi ne scias kiel labori kun ŝi. Mi tuj uzi print r metodo por esence presi ĝin. Kaj kiel vi povas vidi, ĝi diras al mi ke estas asociita tabelo, kaj vi havas klavon, aŭtoro, poentojn al tiu ĉeno, aŭtoro devas ne esti malplena, kaj alia klavo, korpo, punktojn al alia kordo, korpo ne povas esti malplena. Mi ŝatas, ĝi valoras, cool. Tiam mi povos persisti tra la tabelo kaj presi ĉiu sola mesaĝo. Ĝi estas esence same kiel asocieca tabelo kun fasko da mesaĝoj. Kion mi faros estas "se eraroj," kaj mi iros por krei neordigitan liston, kaj mi tuj persisti tra ĉiuj eraroj. Kaj ĉi tiu, kaj nun mi iras provi submitting ĉi denove, kaj ni vidos kion ni ricevas. Nun ni havas tian belan liston de eraroj, kaj ĉi tiu estas ankoraŭ sufiĉe malbela, sed tiu evidente povas formatita rigardi bela, sed la baza ideo estas nur en malmultaj linioj de kodo, ni povis validigi nia modelo, certigi, ke certaj kampoj ne estis malplena, kaj se io estis malbone, tiam revenu ia eraro mesaĝon Mi povis tiam starigu reen al la uzanto. Vi povas ankaŭ agordi vian validigo por ke vi povas reale havas erarmesagxon ke estas pli specifa por via kandidatiĝo aŭ io kiel tio. Ĉio ĉi tio estas ĝenerale agordebla. Bedaŭrinde, ni elĉerpiĝas de tempo, do mi tuj devas ekstermi la vivan kodigo kunsido tie. Ekzistas aro da aliaj trajtoj kiuj mi volas pruvi por vi en ĉi tiu ekzemplo. Ekzemple, vi povas aldoni ŝablonojn al via retejo, do eble ekzistas iu speco de HTML kodo kiun vi volas apliki al ĉiu unuopa paĝo en via retejo, kaj anstataŭ ol interglui ke en ĉiu sola vido dosieron vi havas, kiuj evidente devus esti malbona praktiko, vi povas esence difinas tiujn ŝablonojn, kaj tiam en via regilo diras, "Bone, mi uzas ĉi tiun ŝablonon." "Ĉu ĉiuj miaj opinioj uzi ĉi tiun ŝablonon." Kaj la lasta afero mi volas pruvi al vi tiel ke ni ne havas tempon por estas kruco-ejo skripta, kaj esence mi pensas vi infanoj verŝajne vidis en CS50 - Mi kredas David Malan probable parolis pri kiel vi povas kutime injekti Javascript kodon en - Vi parolis pri tio? Eble? Eble ne? Sed multe da fojoj vi povas injekti malican JavaScript kodo en ies datumaron, kaj se ili ne povas savigxi tiu, konvene, tiam, kiam ili prezenti ke datumoj reen al la uzanto, do eble kuri ia hazarda kodo JavaScript vi ne volas okazi, kaj mi tuj pruvi kiom vi deziras fari tion ene Kohana. Ĝi estas efektive vere, vere facila. Mi povus fari tion nun en 2 sekundoj laŭvorte. Ĉio kion vi devas fari estas esence wrap tion en ĉi tiu afero nomata HTML entoj. Kaj tio estos aŭtomate eskapi ĉiujn karakterojn adekvate kaj certigi vin ne komprenas ĉi tiun problemon. [Studenta] Vi literumis la unuan provon malĝuste. [Brandon Liu] Ho, oops. Bone, jen ĉio mi devis dividi kun vi hodiaŭ. Ĉi tiuj diapozitivoj tuj estos eldonitaj, sed tiuj estas ĝenerale nur rimedojn vi devus vere bezonas por starti kun Kohana. Vi povas iri al la retejo. Ili havas uzanto gvidas, kaj ili ankaux havas API esploristo. Ni povas esplori ĉiujn malsamajn funkciojn kaj helpantojn funkcioj ili havas por vi. Ili ĝenerale havas sufiĉe informo pri la retejo ke vi povas uzi por starti kaj get going with Kohana. Tie ne estas ke multaj lernilojn, mi pensas, por Kohana, ekstere de kion ili havas en la paĝo ĉi tie, do tio estas probable vian plej bona veto. Sed se vi volas iri kun la ttt kadro kaj vi ne volas havi repreni novan lingvon, kaj vi volas ion ke estas relative malpeza kaj havas facilan lernadon kurbo, Mi certe sugestus Kohana. Tio estas verŝajne la plej bona donaco por tio. La amuza afero, tamen, estas, se ni uzas Ruby on Rails, Ni povis esti multoblighas kion ni ĵus faris kaj verŝajne pli en malpli ol 3 minutoj. Neniu ŝerco, sed lernante Ruby on Rails prenas multan plu ol necesus por lerni Kohana. Ĝi estas esence via elekto pri kion vi volas elekti por lerni, sed se vi volas ellitiĝi kaj kurante rapide, Kohana estas definitive tre bona elekto. Ajna lasta demandojn antaŭ ol ni finos? Jes. [Studenta] Kiel ni integri ke en CSS kadro kiel vi uzis kiam vi estis instrui? La demando estas kiel estus ni integri ke kun CSS kadro? Kio ni estus probable fari estas ni estus probable inkluzivas nova dosierujo, kie ni devus renversi ĉiujn niajn CSS dosieroj, kaj tiam ni ankaŭ aldoni novan ŝablonon. En la ŝablono ni deziras inkludi tiujn CSS dosierojn por certiĝi ili estas referencita en ĉiu unuopa paĝo kaj tiam kiam vi vere estas skribo de HTML, vi simple aldonu taŭga klasoj kaj whatnot, kaj ekzemple, kiam vi uzas iun kiel la formo helpanto funkcio, vi povas aldoni pli da parametroj poste specifi kion klasoj vi volas esti konektita al diversaj aferoj tial ili povus stiligi konvene, kaj tio estas esence kiel vi devus iri. Iu ajn aliajn demandojn? Awesome. Dankon pro via tempo, kaj dankon pro veni. Mi ne tuj aldonas tre multe alie, sed 1 vere rapida afero estas ke ni ne havas ligon al la formo. Vere muta. Ni aldonu - fakte en la vido, blogo, indekso, ni vere rapide aldoni ligilon kiu iras al la nova paĝo, La paĝo kie ni povas enigi novan postenon. Ni tuj faros. Kio estas agrable estas tie estas tiu tuta grupo de HTML helpanton funkcioj kion fari malsamajn aferojn por vi, do vi jam vidis la estaĵoj funkcii ĉi tie, sed ili ankaŭ havas funkcion nomas "ankro" kion vi povas tajpi la blogo / nova kaj diru: "Afiŝu novan blogon." Kaj tio estus krei tiun ligon por vi, kaj tio ŝajnas vere bagatela por fari, sed tio estas bela, ĉar supozas ke vi estas movanta retpagxon de 1 havaĵo al alia. Kaj se vi simple skribis el la URL mem, tiam vi devus ŝanĝi ĉiujn URLoj. Aŭ eble vi kopiis ĝin el 1 subdosierujon al alia subdosierujon. Vi devus ŝanĝi ĉiujn tiujn URL-oj mem, kaj tio ne estas amuza. Vi povas uzi ĉi ankron ĝuste ĉi tie, kaj vi povos ŝanĝi la domajno aŭ la subdosierujon prefikso en la agordo-dosiero samtempe, kaj tiam sekvindaj ke ĉie, kaj ĉi tio estas, denove, granda ekzemplo de ne ripetu mem, sekigante via kodo eksteren. Kie ajn vi ripetante mem, provi kaj ĉerpi en ia agordo-dosiero aŭ al malsama funkcio kaj ĝi manipulas ke por vi. Kaj la lasta afero, kiun mi volis montri al vi estis supozu ke ni estas ree en tiu posteno, kaj mi verkis kelkajn vere longa eseo, sed mi forgesis inkluzivi mian aŭtoro. Nun kiam mi premas "Afiŝu Post," Mi nur perdis ĉion. Neniu! Vere malgaja. Do kiel vi agas kun tiu? Jen kion ni faros. Kion ni faras estas tie por tiuj enigo kaj tekstujo funkciojn, se ni inkluzivas duan parametron, tiam la valoro de tiu dua parametro tuj estos kion la kampo tuj estos komence popolita. Kion ni povus fari estas en nia blogo adaptilo, ni povus ligi al alia variablo. Nomu ĝin "valoroj" eble. Migru en la post tabelo, laŭvorte. Tio signifas ke se la validigo maltrafis, pasi al mi la fosto tabelo, ke Mi sendis de la lasta peto, kaj tiu vojo mi povas uzi la valorojn de mia lasta submetiĝo repoblarse la kampoj. Nun mi povas fari ion kiel valoroj aŭtoro kaj valoras korpon, kaj tiu vojo nun se mi faras iu hazarda stuff kaj alklaku "Submit Post," tiam ĝi restas tie. Sed ni tuj kuras en alian problemon. Tio funkcias, sed se mi veturas al la paĝo la unua fojo, ĝi estas tuj frakasos, kaj tio estas pro la tre unua fojo ni iru al la paĝo, afiŝo variablo ne estis difinita ankoraŭ. Ĝi estas nula. Ĝi ne ekzistas. Kaj kion ni volas diri estas, se ĉi tiu ŝlosilo ekzistas, tiam redonas la valoron de ĉi tiu tabelo, sed se la ŝlosilo ne ekzistas, do resendas malplenan ĉenon. Tio estas la funcionalidad ni volas cxi tie. Ni volas kontroli, ĉu la klavo ekzistas antaŭ provi aliri la tabelo, kaj feliĉe sufiĉe, Kohana ankaŭ donas al ni helpantino funkcio por tio. Ili havas cxi tiun tutan suite de funkcioj sub la nomo ARR, mallongigo de tabelo, kaj ili havos 1 funkcio nomita "get", kaj vi povas pasi en la tabelo, kaj vi povas pasi en la nomo de la klavo. Tiam esence kion faros estas provos akiri tiun klavon, sed se tiu ŝlosilo ne ekzistas en la tabelo, tiam revenos malplenan, aŭ ni povas ankaŭ specifi defaŭlte, mi kredas, kio estas agrabla. Nun se ni faros la samon denove, tiam vi vidas nun funkcias la unua fojo ĉirkaŭe, kaj denove, se oni tajpas en iu hazarda stuff kaj provi kaj submetigxu, tiam ĝi restas tie. Mi supozas ke mi povas ankaŭ montri al vi kiel aldoni ŝablonon vere rapide. Kion ni povas fari unua estas ke ni povas aldoni novajn view nomata "template.php" ene de la Vidoj dosierujo, kaj kion mi faros Estas Mi tuj presi iun nomita "enhavo", kiu iras al Mi kiel ĉefan enhavon. Kaj eble je la tre malsupro Mi tuj aldonas, diru, kopirajto. [Inaudibles studento demando] [Brandon Liu] Eble ĉi tiu estas super bazan ŝablonon mi volas uzi. Mi volas havi dosierujon kun mia kopirajto pri ĉiu unuopa paĝo kaj nun kion mi faros ene mia adaptilo Estas nun anstataŭ diri, "etendas Controller ' Mi intencis diri, "etendas Controller_Template" kaj nun, anstataŭ diri: "respondo korpo estas egala al tiu vidpunkto", Mi intencis diri, "ĉi tiu ŝablono enhavo estas -" kaj mi opinias, - cxu mi enmetu egalsigno? Mi forgesas. Jes, mi pensis tion. Kaj nun mi starigis tiun enhavon variablo por egali la vidon. Mi povas fari la saman ĉi tie. Kaj nun se mi refreŝigi, vi povas vidi nun ĉi kopirajto aldonas tie, kaj ĝuste fari iu hazarda post, kaj tiam, denove, vi devus vidi, ke la kopirajto estas je la tre malsupre de la paĝo. Granda. Jen ĉio mi volis montri al vi knaboj. [Aplaŭdo] Demandojn? [CS50.TV]