[Seminar] [Kohana: Një Korniza Lightweight PHP] [Brandon Liu] [Harvard University] [Kjo është CS50.] [CS50.TV] Hi everyone. Emri im është Brandon. Unë jam një i ri këtu në duke bërë kolegj kompjuter shkencës, dhe sot ne do të flasim për Kohana, e cila është një kornizë web zhvillim PHP. Sot do të jetë një seminar jetojnë kodim, kështu që unë jam në thelb do të kalojnë 5-10 minuta duke shpjeguar se çfarë Kohana është, dhe atëherë unë jam fjalë për fjalë do të ndërtojë një blog super të thjeshtë për ju të drejtë këtu fjalë për fjalë nga e para. Ne jemi duke shkuar për të shkarkuar kodin nga faqja e internetit Kohana, dhe ne jemi duke shkuar për të filluar ndërtimin e një blog, dhe shpresojmë se ajo do të jetë shumë e dobishme, sepse ju do të shihni ndoshta ndoshta unë do të bëj disa gabime, dhe ju do të shihni mua shërohen prej tyre, ose ju do të shihni procesin e mendimit tim si unë të ndërtuar nëpër këtë blog, dhe ndërkohë, ju do të merrni të njohur me kuadrin vetë. Shpresojmë se kjo do të jetë një ushtrim shumë udhëzuese. Së pari, çfarë është saktësisht një kornizë? Nëse ju keni qenë duke marrë CS50 deri më tani, ju nuk keni punuar me të vërtetë me ndonjë kornizat ende, dhe kjo gjë është. Ju keni bërë ndoshta 1 zhvillimit web pset tashmë, dhe le të thonë se ju vazhdoni për të ndërtuar faqet e internetit dhe për të mbajtur faqet e internetit të ndërtimit. Ju do të filloni të vini re disa gjëra. Gjëja e parë që ju do të njoftim është se ju jeni me siguri duke bërë të njëjtat gjëra pa pushim gjatë gjithë kohës, gjëra të tilla si pastrimi dhënave të dhëna të përdoruesit, gjëra të tilla si organizimin fotografi tuaj në një mënyrë të caktuar. Gjë tjetër që ju do të ndoshta të njoftim është se kodi juaj mund të fillojë të bëhet shumë, shumë i çrregullt, dhe ju mund të lënë atë çrregullt dhe vetëm kanë një kohë shumë të vështirë ruajtjen atë, ose ju mund të filloni të strukturës kodin tuaj dhe duke e bërë atë modulare në mënyra të caktuara për ta bërë atë më të maintainable. Kjo është ajo ku kornizat web thelb erdhi in Këta njerëz të cilët kishin ndërtuar një shumë faqet e internetit, ata thanë, "Ne nuk kemi nevojë të bëj sërish këtë çdo herë të vetme që ne të ndërtuar një website." "Pse nuk kemi vetëm të bëjë një paketë që e bën të gjitha këto gjëra për ju çdo herë të vetme që ju doni të ndërtuar një website? " Dhe kështu që kur ju bëni një website të ri, ju vetëm të përqëndrohet në atë që pikërisht ky website veçantë është rreth. Ju nuk keni nevojë për të përsëritur të gjitha konfigurimet e ndryshme dhe ndarja e kodeve dhe kodi rishkrimin se ju shpesh duhet të bëni kur ju jeni duke e bërë faqet e internetit. Ideja është që një kuadër ju lejon të shkruar një kod të nivelit më të lartë pa pasur nevojë të shqetësohen për detaje të nivelit më të ulët. Një detaj i nivelit më të ulët mund të jetë diçka si që kanë të bëjnë me pastrimin e të dhënave të dhëna të përdoruesit. Kjo është diçka që ju nuk duhet të duhet të vërtetë për t'u shqetësuar rreth. Ju duhet të përqëndrohet në atë që alokimi tuaj web është në të vërtetë në lidhje. Ajo eliminon një shumë të kodit Boilerplate. Kjo është një arkitekturë për projektin tuaj. E më popullore do të jetë Model-View-Controller, që unë jam do të flasim për në një të dytë. Dhe shumë herë këto regjime mishërojnë një grup procedurash, rregullat dhe praktikat më të mira për ju për të përdorur kështu që kur ju të miratojë kornizën web ju duhet të shkruani kodin tuaj në një mënyrë të caktuar, dhe kjo është në përgjithësi një të rënë dakord grup parimesh nga komuniteti që është pranuar në përgjithësi të jetë një mënyrë e mirë e kodit shkrim. Kjo e bën Kodi tuaj më maintainable, më të përdorshme, kështu me radhë e kështu me radhë. Dhe së fundi, gjë që unë dua të theksoj në lidhje me kuadrin kundrejt biblioteka është kjo ide rreth përmbysja e kontrollit, dhe kjo gjë është. Dallimi në mes të një biblioteke dhe një kornizë është se me një bibliotekë ju jeni ende të shkruar programin kryesor, dhe ju jeni lloj i thirrur bibliotekën dhe duke e quajtur me bibliotekë për të bërë diçka për ju. Dallimi në mes të një biblioteke dhe një kornizë është që korniza fillon me kontrollin, dhe ajo thirret kodin tuaj, kështu që ju mund të mendoni për atë si - kjo është arsyeja pse ajo që quhet një kuadër - kuadri ofron këtë kornizë dhe strukturë për kodin tuaj, dhe të keni plotësuar në gropat, dhe kjo do të bëhet më e dukshme në një të dytë kur të më shihni të filloni të shkruani kodin në kontekstin e kuadrit. Ju do të shihni se unë jam në mbushjen e zbrazëtirave, dhe kuadri është lloj i kontrolluar të gjitha pjesët e lëvizshme, dhe unë duhet të vënë pjesë në vendet e drejtë. Sot ne do të flasim për Kohana, e cila është një nga shumë kornizat PHP. Ka kornizat web, dhe nuk janë ato pothuajse në çdo gjuhë të vetme, dhe unë jam picking Kohana sepse Kohana është ndoshta dhe e njohur përgjithësisht si kornizë PHP më e lehtë për të marr. Kjo është më e lehtë. Nuk janë ato të tjera atje që vijnë me shumë, shumë karakteristika të më shumë, por ata kanë tendencë të jetë më e vështirë për të marr. Dhe së fundi, Kohana përdor arkitekturën MVC. Është e lehtë të mjaftueshme që ne mund të vërtetë të ndërtuar një projekt këtu e drejtë para syve tuaj, dhe ju mund të shumë e shumë të ndjekin së bashku mjaft lehtë. Çfarë është arkitektura MVC? Ajo qëndron për Model-View-Controller, dhe ndoshta në qoftë se ju mendoni për kodin ju keni qenë i shkruar deri më tani për disa nga psets tuaja të zhvillimit web ju mund të jeni në gjendje për të parë disa nga kjo, por zakonisht kur ju filloni të shkruani një aplikim më komplekse web, ndarja në mes të këtyre 3 segmente bëhet gjithnjë e më e dukshme. I hedhur nga MVC këtu lloj si një pirg, dhe shpesh ju do të dëgjoni njerëzit flasin për oxhaqet në zhvillimin e web, dhe kjo është për të ilustruar idenë se çdo shtresë, çdo komponent të vërtetë të përpiqet për të komunikuar vetëm midis 2 komponentët e tjerë. Dikush accesses faqen tuaj te internetit si një klient ose një shfletues. Ata bashkëveprojnë me programin tuaj nëpërmjet kodit pamje. Kodi Pamje ndërvepron me kontrollues. Kontrollues ndërvepron me modelin, dhe modeli ndërvepron me bazën e të dhënave SQL. Dhe nuk ka asnjë hopping në mes në qoftë se ju shkruani kodin tuaj siç duhet. Çfarë bëjnë këto gjëra? Modeli në thelb është pjesë e kodit që merret me të dhënat tuaja. Çdo gjë që ka të bëjë me bazën e të dhënave tuaja, me objektet që ju dyqan, ose retrieving ato objekte në bazën e të dhënave, që është trajtuar të gjitha nga modeli. Ndoshta ju keni objekteve në bazën e të dhënave tuaja. Ne jemi duke shkuar për të krijuar një model që ka të bëjë me postime, kështu një post mund të ketë disa atribute në të. Ju mund të kenë funksione rreth ruajtjen ato postimet ose retrieving postimet ose filtrim postimet e kështu me radhë e kështu me radhë, dhe kjo është e gjitha kodin që është trajtuar nga modeli. Kontrollues është lloj i logjikës aplikimit, dhe shumë gjëra të ndryshme mund të shkojnë në logjikën e aplikimit. Nëse ju jeni duke folur me një API të ndryshme, që mund të jetë kur ju jeni që kanë të bëjnë me logjikën e aplikimit. Nëse jeni duke u përpjekur që të ketë për të sjellë në të dhënat nga modelet e shumta të ndryshme dhe keni për të kombinuar ato në një farë mënyre, që shpesh mund të trajtohen nga kontrollues. Për shembull, në Facebook, në qoftë se ju shoku dikush, atëherë ndoshta se akti i themelimit të këtë marrëdhënie mund të bëhet nga kontrolluesi. Dhe së fundi, pikëpamje është kodi që është gjeneruar atë që ju në të vërtetë të shihni. Shumë herë unë mendoj se në psets CS50 ata nuk të vërtetë të ju djema të inkurajuar për të ndarë këto 3 gjëra. Ju ndoshta do të keni këtë fotografi të madhe, të gjatë, ku në krye ju të bëni disa SQL query dhe ndoshta të bëjë disa të përpunimit në të dhënat që ju marrë nga baza e të dhënave, dhe atëherë ju keni të gjithë HTML tuaj në fund. Dhe ju mund të gjeni se si keni krijuar gjithnjë e më shumë faqe se ju jeni do të ketë disa përsëritje të kodit, dhe gjithashtu, gjë është dosja juaj merr me të vërtetë e madhe dhe e gjatë dhe bëhet i ngathët për të menaxhuar. Arsyeja pse MVC është aq konsiderohet edhe është një numër i arsyeve. Gjëja e parë është diçka që quhet ndarja e shqetësimeve e cila është ideja se kur ju keni - ideale 1 pjesë të kodit duhet të bëjë 1 gjë dhe të bëjë atë me të vërtetë mirë, dhe ju nuk duhet të kombinojnë pjesë të kodit që bëjnë gjëra të ndryshëm. Për shembull, shikoni kodin dhe kodin e modelit, ata nuk të vërtetë duhet të jenë të lidhura. Ata nuk duhet të jetë në të njëjtën fotografi, kështu që kur ju mund të, të ndarë ato kështu që është e lehtë për të ruajtur. Gjëja tjetër është kodi ripërdorimin. Ju mund të gjeni veten duke shkruar të njëjtin SQL query ose duke bërë pyetje të ngjashme që mund të nxjerra në 1 funksion, dhe kjo është ideja prapa modeleve dhe kontrollorëve, duke pasur atë në një funksion të veçantë që ju mund të ripërdorimin në vende të ndryshme në projektin tuaj. Dhe së fundi, që është i lidhur me tharje kodin tuaj, apo jo përsëritur veten, nuk e përsëris veten. Kjo është shumë e kuptueshme në zhvillim. Sa herë që ju mund të, ju nuk duan të përsërisin veten, sepse në qoftë se ju përsëris veten,  është shumë më e shtrenjtë për të ruajtur. Nëse ju doni të ndryshoni 1 gjë, ju duhet të ndryshojë atë kudo, dhe që të çon për të mete, dhe kjo është e tmerrshme. Rregull. Çdo pyetje deri më tani rreth Kohana në të gjitha? Great. Tani ne jemi duke shkuar për të zhyten në seance të kodim, dhe shpresojmë se çdo gjë shkon mirë. Unë jam duke shkuar për në thelb të ndërtuar këtë faqe interneti në një nga serverat e mi të largët, dhe në këtë mënyrë ju djema mund të shihni faqen e internetit dhe të hyni në faqen e internetit, dhe gjithashtu mjedisi është më i mirë se i konfiguruar kompjuterin tim të largët, sepse është e running Linux në vend të OS X. Ne jemi fjalë për fjalë do të fillojë. KohanaFramework.org. Unë jam duke shkuar për të shkarkuar kodin nga faqja e internetit. Unë jam duke shkuar për të kopjuar adresa Lidhje, shkoni në serverin tim, ta shkarkuar atë, dhe unë jam duke shkuar për të nxjerrë atë. [Student] Çfarë është më e madhe që ju mund të bëni tekstin? [Brandon Liu] A është kjo më mirë? [Student] A është kjo që mund të bëhet? [Brandon Liu] Po, kjo është në rregull. I shkarkuar një skedar ZIP dhe Unzipped që në një direktori të quajtur Kohana, dhe ne jemi duke shkuar për të riemërtoni atë CS50-Kohana, dhe le të hyjë, Awesome. Këtu ju shihni një bandë e fotografi të ndryshme. Shumica prej jush mund të injorojë - we're nuk do të kalojnë nëpër çdo skedar të vetëm që është në këtu për shkak të kufizimeve tona kohore, por në përgjithësi, kur ju instaloni Kohana, gjëja e parë që ju bëni po ju shkoni në directory, dhe ju do të në thelb të bëjë disa analiza mjedisore dhe gjësend për t'u siguruar që mjedisi juaj është vendosur si duhet për të kandiduar Kohana dhe të sigurohemi që çdo gjë është në rregull. Ju mund të shihni gjërat më të kaluar, por në përgjithësi ju gjithmonë ndesh me një problem 1 ku ankohet se disa directory nuk është e shkruajtshme, dhe kjo është për shkak të disa lejeve. Unë nuk e di se sa ju djema kanë mësuar për lejet e file në CS50, por në qoftë se ju bëni web zhvillim, ju jeni do të kandidojë në këtë çështje shumë. Unë jam duke shkuar për ta bërë të shkruajtshme dhe mendoj se edhe unë duhet të - aty ku jemi. Mirë, kështu që tani ju mund të shihni çdo gjë kaloi, dhe tani ajo do të ju tregojnë për të ndërrojë emrin e file install.php. Unë jam duke shkuar për të lëvizur skedarin install.php të installed.php, dhe tani, nëse unë refresh, kjo më jep një gabim, dhe kjo është ku debugging vjen in Kjo është ajo ku ju mund të shihni se çfarë është në të vërtetë do të ndodhë. Gjë është, by default, Kohana supozon se projekti juaj është në directory rrënjë e domenin tuaj, kështu që është pritur që të jetë në demo.brandonkliu.com. Ne kemi për të të treguar atë që është e vërtetë në një subfolder. Është në një subfolder quajtur CS50 Kohana. Gjë është, ajo e keqinterpretimit të CS50-Kohana si diçka tjetër, të cilën unë do të shpjegojë për ju në një të dytë. Por unë duhet të them se është diçka që është për të pritur. Ajo që ne jemi duke shkuar për të bërë është që ne jemi duke shkuar për të shkuar në këtë dosje të quajtur bootstrap.php, e cila është dosje konfigurimit ku shumë gjëra të ndryshme janë ngritur. I hapur që deri. Atëherë ndoshta një nga gjërat e para unë do të bëni është të ndryshojë zonën kohore. Dhe pastaj le të shohim. Aha! Të drejtë këtu. Ka një bandë e thënieve të ndryshme të konfigurimit në këtu, por një unë jam duke kërkuar për të është kjo gjë quhet bazë URL, dhe nga default unë të marrë atë të vendosur për të Kohana, por unë jam duke shkuar për të ndryshuar që të CS50-Kohana, dhe unë mendoj se duhet të rregullohet. Po, e madhe. By default, për të parë se ajo është duke punuar, ai thotë se, "Hello World". Ku ka që vijnë nga? Si mbërritëm tek Hello World? Ku pikërisht është kodi që në fakt ka shkruar këtë? Për të kuptuar këtë, unë do të prezantoj këtë koncept të quajtur kurs. Pretty shumë të gjitha kornizat web kanë koncept të quajtur kurs, e cila është pjesë e programeve që do të hartë një URL të caktuar në një pjesë të caktuar të kodit brenda kornizës tuaj. Për shembull, në qoftë se ju keni disa URL dhe ju të shkoni në një URL si foo.com / blog / të gjithë atëherë çfarë kuadri do të bëjë - ose të paktën atë që Kohana do të bëjë - po ajo do të gjeni një klasë të quajtur kontrollues blog, dhe ajo do të të drejtuar funksion të quajtur veprim të gjithë. Unë e di unë jam duke folur për klasë dhe funksioneve, dhe unë e di se ju djema nuk e kanë mbuluar klasa dhe funksionet në ende CS50, por tani për tani, ju mund të mendoni për klasat e si vetëm një grup të funksioneve, një mënyrë për grupimin e funksioneve të së bashku. Kjo është me të vërtetë të gjithë ju duhet të dini. Tani në qoftë se ne e shikojmë në strukturën tonë dosje, brenda dosje aplikimit ka një tjetër dosje të quajtur klasa, dhe dosjet e tjera janë quajtur Controller dhe Model. Nëse ju shikoni brenda dosje Controller, ne shohim se ka një file i quajtur Mirësevini, dhe ju mund të shihni këtu është një klasë të quajtur Controller Mirësevini, dhe ka një funksion të quajtur Indeksi i Veprimit, dhe atë që nuk është ajo vendos trupin e përgjigjen tuaj për Hello World. Kjo është ku kodi është duke u shkruar. Pyetja tjetër është, mirë, unë nuk shkoj në blah, blah, blah, / i mirëpritur / index. Si e kam të përfundojë këtu? E pra, kjo është thjesht për shkak se këtu në fund të dosjes tonë bootstrap ku ne kemi vendosur rrugët tona ju mund të shihni se ata të vendosur disa standarte për ju. Kontrollues default është se vini. Veprimi i prezgjedhur është Index. Kjo është arsyeja pse kur ne kemi vënë asgjë në atje ajo automatikisht shkoi në kontrollues Welcome dhe indeksi i Veprimit. Çdo gjë kuptim deri më tani? Tani, ju mund të bëni më shumë se thjesht shkoni te Controller dhe një veprim specifik. Ju gjithashtu mund të kalojë në parametrat në kontrollues. Ashtu si një shembull, Unë jam duke shkuar për të shtuar një tjetër veprim të këtij kontrollues për të treguar ju. Le të quajmë këtë veprim Echo, sepse ajo do të ju tregojnë çdo gjë që ju jap, dhe kështu që unë jam në thelb duke shkuar për të rrëmbyer një parametër që do të të dërgohet nëpërmjet meje me programin kurs, dhe si ju mund të shihni këtu, kjo linjë të drejtë këtu, ju mund të shihni se kjo në thelb do të thotë që ju keni kontrollues, dhe ju keni një /, dhe ju kanë veprim, dhe ju keni një tjetër /, dhe që do të jenë të parametrave, dhe sepse ne kemi këtë ID Emri brenda kllapa kënd, kjo do të thotë se ne jemi emërtimin këtë ID parametër. Më vonë në kodin tim kontrollues në qoftë se unë dua për të rrëmbyer një të mbajë këtë parametër, Unë mund të përdorni kodin kam shkruar, gjeni parametër të quajtur ID. Kjo është ajo që kam bërë këtu, dhe unë jam duke shkuar për të kthyer dhe të thonë, "Ju, tha" se. Dhe kështu që tani në qoftë se unë të shkoni në faqen tonë të internetit, Unë shkoj në cs50-kohana/welcome/echo/Helloooo-- oh, kjo është e drejtë. Ka 1 hap I lënë jashtë. Kjo është pjesë e idesë jetojnë coding. Ja 1 gjë. Le të shohim. Pra, zakonisht nga default me ​​një shumë prej këtyre aplikacioneve web ju duhet të përfshijë këtë gjë index.php në URL-në tuaj, sepse ideja është index.php është lloj pika e hyrjes e aplikimit tuaj, por natyrisht, kjo është lloj i bezdisshëm që të ketë. Ju nuk dëshironi të keni index.php shfaqen në URL-në tuaj, dhe shumë e shumë çdo kuadri web nga kutia e ka këtë problem index.php, dhe kështu që ju duhet të marrë disa masa për të të jetë në gjendje për të hequr atë. Dhe kështu në këtë rast, ajo që ne jemi duke shkuar për të bërë është që ne jemi duke shkuar për të përdorur një file të quajtur. htaccess, dhe kjo është diçka që është specifike për web server Apache, dhe kjo mund të bëjë gjëra të tilla si rishkruaj URLs dhe përcjellëse URLs dhe kështu me radhë e kështu me radhë, dhe Kohana është e mirë e mjaftueshme për të siguruar një template file. htaccess që ne mund të përdorni. Siç mund ta shikoni, nuk është një file i ka quajtur example.htaccess, dhe ne do të kopje që për të. htaccess. Unë jam duke shkuar për të hapur këtë dhe redaktoj atë, dhe në thelb ajo ka një bandë e gjëra të ndryshme. Linja kryesore që ju mund të dëshironi të shikoni në është e drejtë këtu. Ideja është që kjo krijon një rregull që thotë, "Në rregull, çdo gjë që ju shkruani, prepend index.php për këtë." Ju mund të shihni se. . * Qëndron për asgjë, ndeshje asgjë, dhe pastaj pjesa e dytë është index.php / $ 0, dhe $ 0 bëjë me çdo gjë që u shoqërua më parë. A ka kjo kuptim? Por gjëja kryesore që unë dua me të vërtetë për të ndryshuar është ndryshuar këtë bazë rishkruaj, cila është baza URL. Ai lloj i merr ku ju jeni duke punuar nga. Unë jam duke shkuar për të shtuar CS50 Kohana me atë, dhe në këtë mënyrë tani në qoftë se unë heq index.php, ajo duhet të punojë, dhe unë jam duke shkuar për të shtuar disa numra për të treguar se ai me të vërtetë e bëri punën. Tingëllon mirë. Çdo pyetje deri tani? [Student] Si e bëri ai e di për të bërë 123? A është ky një argument? Pikërisht. Ju mund të mendoni për atë vetëm si një argument. Por gjëja e pazakontë, megjithatë, është se mënyra Kohana e bën këtë po ata nuk e bëjmë atë tamam si një argument. Ju duhet të rrëmbej atë si kjo. Ju keni për të rrëmbyer kërkesën objekt dhe të kërkojë parametër që është quajtur ID, dhe se ID Emri vjen nga këtë dosje bootstrap se kam treguar më parë, dhe emri ID ishte në ato kllapa kënd, dhe kjo është se si ju kap këto parametra. Awesome. Çdo pyetje të tjera? Ashtu si thashë, kontrolluesit, ata merren me logjikën e aplikimit, kështu që kjo është 1 rast ku ju mund të shihni that's - kjo është shumë themelore, por është ende logjika e aplikimit, ideja e grabbing parametrin dhe krijimin e një varg të ri që thotë: "Ju tha blah," dhe pastaj pështypje që përsëri tek ju. Dhe në përgjithësi ajo që ju bëni është që të krijojë kontrolluesit të ndryshme. Ju krijoni kontrollorëve të veçanta për pjesë të ndryshme të faqen tuaj te internetit. Sot ne jemi duke shkuar për të bërë një faqe interneti shumë të thjeshtë, dhe ajo do të jetë një blog shumë bazë. Ne jemi duke shkuar për të bërë një kontrollues të ri vetëm për postet në një blog. Por atëherë nëse unë do të gjithashtu të shtoni komentet në blog post, atëherë unë ndoshta do të dëshironi të bëni një kontrollues të ri për këto komente. Në qoftë se unë të kërkuar për të shtuar përdoruesit, unë ndoshta do të shtoni një kontrollues të ri për ata përdorues, dhe në përgjithësi, ideja është se sa herë që ju keni një model të ri, një objekt të ri të dhënave që ju jeni që kanë të bëjnë me të, ju keni një kontrollues të vetëm për atë dhënave objekt. Sot ne jemi vetëm do të punojnë me 1 të dhënave objekt, dhe që do të jetë postime, dhe gjithashtu ju mund të mendoni objekteve të të dhënave si korrespondon me tavolina. Në përgjithësi çdo tryezë i korrespondon 1 lloj të të dhënave objekt, kështu tryezë pas do 1 model të postimi, cila do të kenë 1 kontrollues pas korrespondon që, dhe të njëjtën gjë për komente, të njëjtën gjë për përdoruesit, dhe kështu me radhë e kështu me radhë. Dhe kjo është një rregull i përgjithshëm i gishtit. Nuk do të ketë raste të veçanta ku ju mund të ndryshojnë nga ajo, por 90% të kohës që është ajo që ju jeni do të jetë bërë, dhe unë do të ju tregojnë se është ajo që ne jemi duke shkuar për të bërë sot. 1 më shumë Koncepti para se të zhyten përsëri në kodin, kjo ideja e objektit hartës relacionale. Ju djema e kanë bërë tashmë një të zhvillimit web pset, dhe ju kam parë që ju të bëni një query SQL, dhe çdo gjë të kthehet tek ju janë të rreshtave. Ju merrni këto rreshta, dhe ju indeksi i tyre me ndonjë emër, emri i kolonës dhe tabela, dhe kjo është se si ju punoni me të, dhe kjo mund të jetë pak i rëndë. Por për më tepër, në qoftë se ju keni marrëdhënie brenda bazën e të dhënave tuaja, si për shembull në qoftë se unë kam komentet dhe postimet e bëra, atëherë ndoshta unë dua të kap postin prind të një komenti. Nëse unë përdorin vetëm rreshtave në SQL, atëherë të gjitha unë mund të merrni është ID i postit prind dhe jo pas aktuale vetë. Por kur ne jemi kodim, ajo që ne duam në të vërtetë është që në fakt të rrëmbyer  prindi postoni veten ndonjëherë. Çfarë objekt hartës relacionale nuk është ajo merr rezultatet e query bazës së të dhënave dhe e vë atë në objekte për ju, të cilat janë shumë nicer për të punuar me se vargjeve të thjeshtë dhe rreshtave. Për shembull, tani kur unë kam një koment ndoshta, dhe unë dua të të rrëmbyer postin e tij mëmë, dhe unë ndoshta komentoj shigjetë postim, atëherë ai në fakt do të më jepni postimi objekt korrespondon me postin aktual mëmë, jo vetëm disa ID, të cilat unë ndryshe do të duhet të përdorin dhe të bëjë një tjetër query SQL për të rrëmbyer këtë post, e cila është e rëndë dhe e panevojshme. Dhe për më tepër, me hartë të gjitha këto rreshta të dhënave në objekte, ju gjithashtu mund të bashkëngjitni më shumë funksione të objekteve, kështu për shembull, kam folur se si klasa janë në thelb grupimet e funksioneve. Ju mund të mendojnë për atë si kjo. Për shembull, ndoshta unë kam këtë post objekt, dhe ndoshta unë do të doja që të ketë një lloj të funksionit bashkangjitur me të që në thelb tregon mua ishte ajo kohët e fundit postuar? A ishte e postuar në kuadër të javës së fundit, e vërtetë apo e rreme? Dhe kjo është një funksion që unë mund të bashkëngjitni mbi atë objekt, dhe kjo është me të vërtetë i përshtatshëm që të ketë atë në të njëjtin vend, dhe ka një mori të funksioneve të ndryshme që ju mund të krijojë për këto objekte, dhe është e vërtetë e mirë që të jetë në gjendje të bashkëngjitni atë në një klasë, në një objekt, ndërsa në qoftë se ju vetëm e kishte rreshtave që vijnë nga baza e të dhënave tuaja, atëherë ju nuk mund të vërtetë të bashkëngjitni çdo funksionalitet për këtë. Kjo është fjalë për fjalë vetëm të dhëna. Ndonjë pyetje në lidhje me atë në të gjitha? ORMS janë shumë të zakonshme zhvillimi web, dhe ka shumë lloje të ndryshme të ORMS, dhe Kohana ka ORM e vet. Kjo është shumë themelore, por ju do të merrni një shije të asaj që duket si. Le të krijojnë një model për postet tona blog, dhe gjëja e parë që ne padyshim duhet të bëni është që të krijojë një tryezë aktuale në bazën e të dhënave që në fakt të ruajtur të dhënat tona për këto poste. Gjëja e parë që unë jam duke shkuar për të bëni është të shkoni në phpMyAdmin. A ju djema e përdorur phpMyAdmin para? Mirë, awesome, kështu që ju djema tashmë e dini se çka është, dhe unë jam duke shkuar për të krijuar një tabelë të re të quajtur Kohana Postime, dhe ajo do të jetë me të vërtetë të thjeshtë. Unë do të duhet të hyni përsëri in Të gjithë ne do të bëjmë sot është të ketë një autor dhe një trup, vetëm ta mbani atë të thjeshtë. Unë jam duke shkuar për të krijuar atë tryezë, dhe tani ne vetëm duhet një tabelë përfaqëson postimet tona me 2 fusha për autorin tonë dhe trupit tonë. Gjë tjetër që unë jam duke shkuar për të bërë tani është konfiguroni kërkesën time të internetit kështu që e di se si të lidheni me bazën e të dhënave, dhe kjo, përsëri, është diçka që ju do të keni për të bërë me të gjitha aplikacioneve web. Ju duhet të tregoni atë emrin e përdoruesit dhe fjalëkalimin dhe emri i bazës së të dhënave dhe kështu me radhë e kështu me radhë të kuptoj se si për të në fakt të lidhur me bazën e të dhënave tuaja. Në Kohana, ne kemi diçka që quhet një modul bazë të dhënash, dhe në dosjen e konfigurimit ne e kemi këtë dosje të quajtur Baza e të dhënave, dhe si ju mund të shihni, ka një bandë e parametrat që ju keni për të vendosur këtu për të të treguar atë se çfarë është emri i përdoruesit dhe fjalëkalimi për bazën e të dhënave kështu që unë në fakt mund të lidheni me të. Dhe pasi që unë nuk dua që ju djema të vërtetë e di emri i përdoruesit dhe fjalëkalimin e bazës së të dhënave tim, Unë kam një fotografi, ku kam tashmë të vendosur të gjithë, dhe unë jam duke shkuar për të kopjoni dhe ngjisni atë përsipër. Awesome. Mirë. Unë mendoj se është e gjitha konfigurimit duhet të bëj, por le të shohim. Ne do të vazhdojmë të punojmë në të, dhe nëse diçka crashes, atëherë ne do të rregullohet. Tani ajo që unë jam duke shkuar për të bërë është që unë jam duke shkuar për të krijuar një kontrollues të ri. Ose në të vërtetë, më vjen keq. Së pari më duhet për të krijuar një model të ri. Unë do të krijojë një model të ri të quajtur Post.php, dhe ajo që ne jemi duke shkuar për të bërë është që ne jemi duke shkuar për të thirrur atë klasë Model_Post. Merrni disa sintaksë theksuar për, dhe kështu kur them, "shtrihet ORM," kjo është në thelb disa më shumë object-oriented programimit, e cila për fat të keq ju djema nuk e kanë mësuar në CS50 ende, por kjo është goxha e lehtë për të marrë veten. Kjo më jep gjithë këtë funksionalitet shtesë që vjen në këtë paketë ORM, dhe kështu që unë të marrë një bandë e funksioneve shtesë dhe gjësend për të lira, të cilat ju do të shihni një grimë në një të dytë. Tani për tani në të vërtetë të gjitha unë duhet të bëni është të krijojë këtë klasë. Unë as nuk duhet të bëjë ndonjë funksion apo ndonjë gjë, por unë kam krijuar një klasë që përfaqëson tryezë, dhe për shkak se unë kam shtrirë këtë klasë ORM, Unë të merrni një bandë e gjëra për të lira, kështu që tani për tani ju nuk keni për të vendosur asgjë më shumë deri. Dhe tani ajo që unë jam duke shkuar për të bërë është që unë jam duke shkuar për të krijuar një kontrollues të ri, të cilën unë jam duke shkuar për të përmendur blog.php, dhe unë jam duke shkuar për të kopjuar mbi kontrollues Welcome kështu që unë nuk duhet të Rivendos disa sende, dhe tani më duhet të riemërtoni këtë. Tani ajo që unë jam duke shkuar për të bërë për të provuar për të siguruar çdo gjë është duke punuar jashtë, Unë jam duke shkuar për të rrëmbyer postin e parë nga baza e të dhënave e mia dhe të shtypura trupin e postit në ekran. Për të bërë që ajo që unë jam duke shkuar për të bërë para është që unë jam duke shkuar për të shpëtuar postimet të një variable kështu që ajo që ne jemi duke shkuar për të bërë është - në Kohana atë që ju bëni është për të rrëmbyer postimi objekt kjo është lloj i rëndë, por ju duhet të bëni këtë gjë të quajtur ORM :: fabrikë, dhe pastaj të kalojë në emrin e modelit që ju dëshironi, dhe ajo kthehet ne objekt ORM që përfaqëson atë model. Dhe pastaj, si i tha, kur ne zgjerojnë objektin ORM, ne të merrni të gjitha këto metoda për të lira, kështu që për shembull, ne kemi marrë këtë funksion të ri të quajtur "gjeni të gjitha," e cila automatikisht e kthen çdo postim të vetëm në bazën e të dhënave, e cila është shumë i përshtatshëm. Dhe tani në trup unë jam duke shkuar për t'u kthyer Postimi i parë dhe kthehen trupin e saj. Dhe sigurisht, kam nevojë për të krijuar një post, kështu që le të futur një post të ri. Unë do të them, "Brandon, postin tim të parë." Awesome. Dhe tani ne jemi duke shkuar për të shkuar në blogs dhe në qoftë se të gjithë punon mirë - oh, kjo është një tjetër gjë e leje memec fotografi përsëri. Prit 1 sekond. Kjo është lloj i absurde. Nuk shkojmë. Mirë. I fiksuar këtë problem leje. Ai ishte duke u përpjekur për të krijuar disa fotografi dhe disa log, dhe lejet, përsëri, nuk ishin të vendosur siç duhet, kështu që unë e bëri atë kështu që ato fotografi ishin të shkruhet dhe të ekzekutueshme kështu që në fakt mund të hyni në gjëra. Tani ajo është dhënë mua një tjetër thënie përjashtim, "klasa e ORM nuk u gjet" dhe kjo është për shkak se kam harruar një hap tjetër. Kjo është shumë e keqe. Në dosjen dosje bootstrap, ka këto module këtu, të cilat ju mund të zgjidhni për të mundësuar ose çaktivizoni. Këto janë një bandë e karakteristika të ndryshme që ju mund të zgjidhni për të përdorur brenda Kohana, që është lloj i bukur. Për shembull, ata kanë një modul authentication të cilat ju mund të përdorni për të vërtetuar përdoruesit. Ata kanë një modul caching në qoftë se ju doni për të zbatuar një lloj caching mbrapa fund për të bërë punën e aplikimit të shpejtë dhe gjësend. Ne kemi nevojë për të bërë të mundur bazën e të dhënave dhe modulin ORM, sepse si i tha, ne jemi duke përdorur bazën e të dhënave, natyrisht, dhe ne gjithashtu duhet të aktivizoni modulin ORM, sepse ne do të donim që të ketë funksionalitet shtesë, e cila është mirë të ketë. Të gjitha unë duhet të bëni është uncomment këto 2 linja, dhe tani, nëse unë refresh, ajo më dha një tjetër gabim. Ajo thotë se, "Klasa Model_Post nuk u gjet." Tani ky është një problem i mirë që të ketë. Le të shohim. Bëjë atë publike. Nr Prit. Oh, i dashur. Unë nuk e di pse kjo nuk është në gjendje për të gjetur atë. Kjo është me të vërtetë e çuditshme. Unë kam këtë klasë të drejtë këtu. I guess I mund të ketë për - oh. Unë jam aq memec. Kam harruar të shtoni një tag PHP. Kjo është arsyeja pse. Tani unë kam për të ndrequr se 1 ndryshim unë vetëm e bëri. Mirë >>. Nuk shkojmë. Kjo ishte me të vërtetë budalla. Unë nuk kanë një etiketë e hapjes PHP. Por si ju mund të shihni, tani ajo është duke punuar si duhet, apo jo? Ne kemi 1 postim. Ne mori postin e parë, dhe tani ne shtypura jashtë trupin e saj. Great. Sporte. Çdo pyetje deri më tani? Jo? Ndonjë pyetje? Mirë, kështu që ne vetëm të krijuar modelin postimi, shumë themelore, dhe ne do të shtoni disa funksione më vonë. Ne mund të shtoni validations dhe filtrim. Validations janë një nga gjërat se kornizat zgjidhur për ju me të vërtetë, të vërtetë të mirë, dhe unë nuk mendoj se ju djema kishte për të bërë këtë për pset tuaj CS50, por në qoftë se ju bëni web zhvillim për projektin tuaj përfundimtar, ju jeni shumë gjasa do të dëshironi të bëni disa lloj validation, si nuk ka emra bosh përdorues, ndoshta të paturit e një fjalëkalim me të paktën një gjatësi, gjëra të tilla si se. Dhe kjo është me të vërtetë i rëndë për të zbatuar këto gjëra me veten, dhe shumë e shumë çdo kuadër të vetëm të web e bën këtë për ju dhe ju lejon të bëni atë në një mënyrë shumë të pastër. Dhe modeli është ajo ku ju zakonisht shprehin këto rregulla validation, sepse është e Vleresimin nëse një model është e vlefshme apo jo. Por tani për tani, ne jemi duke shkuar për të vënë atë deri vonë, dhe tani për tani ne jemi duke shkuar për të punuar në një pjesë tjetër, dhe ne do të përpiqet dhe të bëjë një pamje të re që listat të gjitha postimet e bëra. Hapat e përfshirë në marrjen e një aksion të ri për të renditur të gjitha postimet e bëra është për të rrëmbyer një listë të të gjitha postet dhe pastaj të bëjnë listën e të gjitha postet me një pamje. Të drejtë këtu, për fat të mirë të mjaftueshme, ne tashmë mori të gjitha postimet e bëra duke përdorur këtë rreshtin e parë, të gjeni të gjitha funksion, dhe tani ajo që ne jemi duke shkuar për të bërë është deri më tani Unë kam qenë direkt vendosjen trupin e përgjigjes duke kaluar string, por tani unë dua të përdorni një pamje, dhe dallimi në mes një pamje dhe vetëm duke bërë këtë është me qëllim që unë mund të ketë një të bukur, të madh template HTML, dhe ajo që unë mund të bëni është të kalojë atë variablave të caktuara dhe pastaj kanë pikëpamje automatikisht populloj template e saj duke përdorur këto variabla. Ajo që unë do të bëj është që unë do të krijojë një pamje të re, dhe unë do të emrin e view diçka si "blog / indeksin," dhe unë jam duke shkuar për në thelb lidh këtë - oh, çfarë jam unë shkrim? Truri im është diku tjetër. Unë do të lidh postimet e ndryshueshme të mendimit, kështu që mënyra pikëpamje ka qasje në këtë variabël pas. Dhe kështu që tani kam nevojë për të krijuar këtë pikëpamje, kështu që këtu ne kemi këtë dosje të quajtur "Views", dhe për herë të parë, unë jam duke shkuar për të krijuar një dosje të re nën atë të quajtur "Blog." Kjo është e bukur. Në këtë mënyrë ne mund të kemi një hierarki të këndshme për pikëpamjet tona. Dhe atëherë unë jam duke shkuar për të krijuar një tjetër fotografi në atje quajtur "index.php". Awesome. Në fakt, le të kenë ata të dy këtu. Marrja e një pamje skedar është ndoshta pjesa më e thjeshtë të gjithë kësaj, dhe këto janë gjëra që ndoshta ju jeni tashmë të njohur me të. Ne jemi duke shkuar për të bërë diçka me të vërtetë të thjeshtë, filloni duke thënë: "Lista ime e blog posts." Atëherë ne mund të kalojnë nëpër, dhe ne mund të iterate përmes Postimet e array, kap çdo postim të vetëm dhe të thonë diçka si - ndoshta shtoni një linjë të dhe pastaj të shtypura nga kreu dhe trupin. Kjo ka kuptim deri më tani? Dhe le të shohim nëse ajo punon. Asgjë nuk ka ndodhur. Unë pyes veten pse. Oh, unë humba 1 hap. Shumë pa kuptim për mua. I krijuar një pamje, por nuk e kam vënë pamjen si përgjigje, kështu që ju duhet të bëni 1 më shumë gjë. Ju duhet të bëni "këtë trup përgjigje" dhe vendosjen e tij të jetë mendimi. Nuk shkojmë. Ne kemi titullin tonë, dhe atëherë ne kemi një post, dhe vetëm për goditje, le të futur një tjetër post kështu që ne mund të shohim një listë. Dhe futur këto 2 postimet e bëra, dhe tani në qoftë se unë rifreskoni faqen, ne shohim të gjitha këto postimet e bëra këtu. A do të kishte kuptim deri më tani? Po, një pyetje? Oh, në rregull. Siç mund ta shikoni, ne kemi qenë në gjendje për të ndarë të gjitha këto kode jashtë në seksione të ndryshme, dhe pastaj ju mund të shihni se është më e qartë me kodin pamje. Kjo skedë këtu që përfaqëson pikëpamjen, ai vetëm kujdeset për përfaqësimin e të dhënave, duke shfaqur të dhënat. Ajo merr kaluar një lloj të të dhënave, dhe të gjithë kjo nuk është vetëm për të treguar atë për ju. Në të gjitha pjesët e tjera të kodit tuaj, ju nuk do të duhet të shqetësohen për ndonjë nga të cilat, dhe në mënyrë të ngjashme, kodi juaj pikëpamje nuk ka për t'u shqetësuar për ndonjë gjë se si për të hyrë në bazën e të dhënave dhe kështu me radhë e kështu me radhë, e cila është me të vërtetë e mirë dhe e bën kodin tuaj shumë më maintainable. Ashtu si thashë, views, ata janë dinamike në të cilat kjo është 1 fotografi, por kjo do të gjenerojë pikëpamje të ndryshme bazuar në variablat ju në të vërtetë të kalojë në, dhe për më tepër, ka shumë funksione të ndryshme ndihmëse që ju mund të përdorni për t'ju ndihmuar të shkruani kodin tuaj të shpejtë, që unë do të ju tregojnë në vetëm një të dytë. Po. [Student] Pra $ 0 është një kontrollues, e drejtë? Kjo gjë e dytë. Pyetja eshte eshte $ 0 a kontrollues? $ 0 është një variabël kam krijuar këtu. I krijuar një pamje të parë. I caktuar atë për rreth ndryshueshme. Pastaj kam kaluar atë në këtë funksion, vendosur atë si trupin e përgjigjes. A ka kjo kuptim? [Student] Pra, është view :: fabrikë, është parë si një klasë ose një bibliotekë [padëgjueshme] Funksioni fabrikë? Pyetja ka të bëjë me funksionin view :: fabrikës, dhe në thelb kjo është disa më shumë e orientuar kah objekti programimit në thelb. View është klasa pamje, dhe ajo ka një metodë të quajtur "Fabrika" dhe kjo është një mënyrë për të rrëmbyer e objektit që është quajtur "blog / index." Dhe kjo është disa më shumë object-oriented programimit gjëra se unë nuk jam duke shkuar për të shkuar në këtu shumë. Tani natyrisht, ne duam të krijojmë postime të reja, por ne nuk duam që të ketë për të bërë atë nëpërmjet një bazë të dhënash, kështu që ne jemi duke shkuar për të krijuar një aksion të ri për të krijuar një post të ri, dhe ka shumë gjëra që duhet të bëjmë. Gjëja e parë që ne jemi duke shkuar për të bërë - le të merret me këto gjëra një nga një. Gjëja e parë që ne do të bëjmë është që ne kemi marrë për të krijuar një formë të për të futur një post të ri, por unë jam gjithashtu do të shtoni një veprim të ri e parë, kështu që duke shtuar një veprim të ri është po aq e lehtë sa duke shtuar një funksion të ri me kontrollues tuaj, dhe tani për tani unë jam duke shkuar për të bërë diçka shumë të thjeshtë, kap vetëm këtë pikëpamje dhe pas atë, vetëm të shfaq atë për ju. Dhe pastaj tani unë jam duke shkuar për të krijuar një skedë të re pamje, dhe unë jam duke shkuar për të filloni të shkruani disa sende. Çfarë është e mirë për Kohana është se ato ofrojnë një shumë të funksioneve të ndryshme ndihmëse për ju që të shkruani kodin Shiko më lehtë, dhe 1 i atyre funksioneve ndihmëse apo module ndihmëse është rreth shkrim forma. Për të shkruar forma, unë vërtetë nuk kanë për të shkruar drejtpërdrejt ndonjë HTML veten time. Ju djema keni shkruar forma HTML. Ti e di se si ajo mund të jetë me të vërtetë, të vërtetë e dhimbshme dhe të rëndë për të shkruar forma. Kjo nuk është argëtim, kështu që për fat të mirë, ne mund të thelb të shkruani një formë duke përdorur Kohana-së formojnë funksionet e ndihmësit të bëjë atë për ne. Ne jemi duke shkuar për në thelb të ketë fusha për çdo gjë të vetme që kemi, kështu që një për autorët dhe një për organet. Ne do të kemi një emërtim, dhe ne do të kenë një kontribut. Dhe pastaj në fund, ne do të kemi një nënshtrim. Dhe si ju mund të shihni, kjo është shumë më e pastër për të shkruar se të gjitha HTML atë çrregullt, që është lloj i bukur. Dhënë, ka kornizat tjera të internetit që kanë atë edhe më të pastër se kaq, por të paktën kjo është më e mirë se sa me shkrim HTML veten. Tmerrshëm, kështu që kjo është ajo që ju shihni. Kjo është lloj i çrregullt, kështu që unë jam duke shkuar për të shtuar një pushim linjë atje për të bërë që të duket pak nicer. Well, natyrisht, ajo ende duket me të vërtetë, me të vërtetë keq, por ne jemi fokusuar vetëm në funksionalitetin për tani dhe jo për estetikë. Nuk ka kohë për të bërë çdo gjë. Dhe si ju mund të shihni, tani ne kemi një formë super bazë, që është lloj i bukur. Ky kod do të thosha është i pastër se duke u përpjekur për të shkruar një HTML formojnë veten, kështu që është e bukur. Çfarë ndodh më pas? Tani ne kemi nevojë për të bërë gjëra me veprimin. Normalisht kur ju shkruani format HTML, ju duhet të tregoni atë se ku ajo do të dorëzojë formularin për të. By default në kornizat më të madhe të internetit, ajo paraqet në të njëjtën URL e saktë, kështu që gjëja është, në qoftë se ju të dërgoni një kërkesë për të marrë / blog / e re, ajo duhet të ekranit ju formën, por në qoftë se ju dërgoni një kërkesë tek postimi i / blog / e re me të dhënat, ai në fakt duhet të përpiqen për të shpëtuar këtë post dhe të bëjë diçka me të. Ajo që ne jemi duke shkuar për të bërë është në thelb të gjithë ne duhet të bëjmë për të parë nëse kjo është një kërkesë e pas apo kërkesë get është për të kontrolluar se cilat janë variablat Postimi ju mund të vendosni. Dhe në qoftë se pas ndryshueshme është vendosur, atëherë ne jemi duke shkuar për të provoni dhe për të krijuar një post të ri. Përsëri, ne vetëm e bëjnë këtë, dhe që krijon një post të ri, dhe ne jemi fjalë për fjalë do të të vendosur fushat e saj si kjo, dhe atëherë ne jemi duke shkuar për të shpëtuar atë. Dhe atëherë unë jam duke shkuar për të përcjellim në faqen e indeks në mënyrë që ata mund të shikoni listën tonë të postimeve përsëri. Le të provoni këtë. Unë do të them, "Brandon," dhe pastaj të dorëzojë postin, dhe në qoftë se të gjitha shkon mirë, si ju mund të shihni, është ridrejtuar mua në faqen e indeks, dhe në qoftë se unë shkoni në fund, ne kemi një post të sapo futur. Yay! Po, pyetje. [Student] Po në qoftë se ju kishte hyrë njëjtën gjë e saktë ju hyrë para? A ka kontrolluar për të siguruar që ju nuk e keni të dyfishta të njëjtën gjë nënshtrim? Të jetë i parazgjedhur, nuk ka, sepse nga default - vjen keq, pyetja është nëse ju të hyjë në të dhënat e saktë të njëjtën në formën dhe të paraqesë se, do të lejojë të futur një objekt kopjuar, a kopjuar hyrjen, në thelb? Tani për tani, po, ajo do të ju lejojnë për të bërë këtë, sepse në bazat e të dhënave është e përkryer e vlefshme që të ketë rreshtave krejtësisht të kopjuar, por në qoftë se është një shqetësim, atëherë ju mund të shtoni validations, për shembull, për t'u siguruar se në qoftë se kjo është pikërisht i njëjtë si diçka që tashmë ekziston, pastaj thonë se kjo është një objekt i pavlefshëm, dhe pastaj ju mund të specifikoni mesazhin tuaj gabimi dhe thonë, "e pavlefshme për shkak se kjo tashmë ekziston" ose diçka të tillë. Por në këtë rast, unë mund vetëm të krijojë diçka të kopjuar. Tani le të përpiqemi dhe të shtoni disa validations. Problemi me këtë të drejtë tani është se Unë fjalë për fjalë do të mund të paraqesë një post krejtësisht bosh. Unë mund të klikoni këtë buton tani, dhe aty ne do të shkojmë. Ju nuk mund të vërtetë e shohin atë, por kjo linjë shtesë këtu tregon se unë fjalë për fjalë kanë një post të ri. Ajo vetëm ka një autor bosh dhe një trup bosh, dhe ne nuk duam që të lejojnë njerëzit për të bërë këtë. Kjo është ajo ku vjen in validation Unë mund të shkoni në objektin tim modelit, dhe tani unë mund të shtoni një funksion të ri që përcakton çfarë rregullat validation unë duhet të shtoni në këtë model për t'u siguruar se ajo është e vlefshme apo të specifikojë se çfarë do të thotë të jetë një post të vlefshme? Dhe unë dua të them se është vetëm një post i vlefshëm në qoftë se të dy autor dhe trupi nuk janë bosh, dhe kjo është se si ju bëni atë në Kohana. Ju krijoni një funksion të ri të quajtur "Rregullat", dhe pastaj ju ktheheni në thelb një koleksion asociative që përcakton rregullat validation për këtë objekt. Ne jemi duke shkuar për të kthyer array, dhe pastaj ajo që ne jemi duke shkuar për të bërë është thonë "autor", ajo shkon në një grup, i cili shkon në një tjetër grup të quajtur "jo bosh." Dhe atëherë unë jam duke shkuar për të thënë "trupin." Mirë, dhe sintaksa për këtë strukturë dhe për këtë mund të duket i rëndë një të vogël dhe pak e komplikuar. Nëse ju lexoni dokumentacionin, kjo është goxha e lehtë për të kuptoj se, Por në thelb kjo është ajo që ju duhet të bëni për të specifikojë disa rregulla validation, dhe ka shumë rregulla të ndryshme Kohana që do të ju jap falas, si ju mund të shtoni rregulla për të thënë ajo duhet të jetë të paktën këtë gjatësi. Ndoshta ajo duhet të jetë një numër. Ndoshta ajo duhet të jetë një numër alfa. Ndoshta ajo duhet të jetë më së shumti këtë gjatësi, kështu me radhë e kështu me radhë. Nuk janë një shumë e rregullave të ndryshme që Kohana ofron për ju, dhe ju mund të shkoni në faqen e tyre, shikoni në dokumentacionin, dhe ju mund të shihni të gjitha gjëra të ndryshme që ju mund të bëni. Por kjo është e gjitha unë duhet të bëni, dhe tani le të shohim se çfarë ndodh në qoftë se unë të paraqesë një post bosh. Çfarë do të ndodhë? Oh, jo, unë të marrë një gabim. Kam marrë një përjashtim validation. E pra, kjo është e mirë. Ajo më tha se modeli im është i pavlefshëm, por unë nuk dua për të shfaqur një përjashtim për përdoruesit e mi kur ata përpiqen të paraqesin diçka të pavlefshme, e drejtë? Unë dua të jap atyre një lloj mesazhi miqësore gabimi kur diçka shkon keq. Ajo që ne jemi duke shkuar për të bërë është që ne jemi duke shkuar për përfundojë çdo gjë në një lak kapur provoni. Në fakt, unë mendoj se kjo është gjithashtu diçka që ju nuk e kanë mësuar ende në CS50, sepse C, gjuhë programimi C, nuk ka përjashtime, por pothuajse të gjitha gjuhët vetëm Të tjera ka përjashtime, kështu që me të vërtetë, me të vërtetë shkurtimisht, një përjashtim është diçka që një pjesë të kodit mund hedhin një përjashtim kur diçka shkon keq, por pastaj ndoshta disa pjesë të tjera të kodit më e lartë deri mund të arrijë këtë përjashtim dhe të bëjë diçka me të. Për shembull, në këtë rast, pjesë të kodit që është duke u përpjekur për të ruajtur një model, ajo validates modelin, dhe në qoftë se ai thotë, "Mirë, ky model është i pavlefshëm" ajo do të hedhin një përjashtim, dhe kjo është lloj i barabartë me në C ju mund të ktheheni një -1 ose diçka të tillë. Dhe pastaj për mua, ky funksion, kodi im në një nivel më të lartë, unë mund të përpiqen dhe të kapur atë përjashtim dhe thonë se në thelb, "Mirë, në qoftë se unë të kapur përjashtim, çfarë jam unë do të bëj?" Ose unë mund të zgjedhin të mos për të kapur atë përjashtim dhe le dikush më i lartë deri kapur përjashtim, ose në qoftë se askush nuk e kap atë, atëherë i tërë programi crashes dhe thotë, "Diçka shkoi keq, dhe unë nuk mund të trajtojë atë." Por ajo që ne bëjmë është që të përfundojë një pjesë të kodit në një bllok të përpiqemi, dhe pastaj ju të shtoni edhe diçka që quhet një bllok kapur, që është lloj i kodit që do të përpiqen dhe të kapur përjashtimet që mund të ndodhin. Dhe kështu në qoftë se unë kapur këtë përjashtim të veçantë ose përjashtim pavlefshmëri, atëherë ajo që unë jam duke shkuar për të bërë është Unë jam duke shkuar për të vendosur gabimet - Unë mendoj se kjo është se si të bëj atë - dhe unë jam duke shkuar për të vendosur gabimet në ndonjë objekt. Dhe pastaj ajo që unë jam duke shkuar për të bërë është në qoftë se ajo hits këtë përjashtim, ajo nuk do të përcjellim, dhe në qoftë se ajo nuk përcjellëse, ajo do të dalë nga nëse blog dhe e goditi këtë blog / e re, e cila është e doni unë dua të bëj. Nëse ka një gabim, atëherë unë dua të kthehem në formë dhe të shfaqin ato gabime. Tani ajo që unë dua të bëj është që unë dua të kalojë në ato gabime në pamje. Mirë, unë mendoj se kam pamje të drejtë këtu, dhe në thelb unë dua për të shfaqur ato gabime, nëse ato ekzistojnë. Para se të shkruani HTML për këtë, unë jam duke shkuar për të vërtetë shpejt të tregojë se çfarë struktura e këtij gabimeve duket ndryshueshme pëlqen, dhe kjo është një praktikë e mirë në përgjithësi. Shumë herë ju merrni diçka prapa nga disa metoda, disa funksion në kuadër të internetit, dhe ju nuk e dini se çfarë duket si e ndryshueshme, kështu që ju nuk e dini se si të punojnë me të. Unë jam duke shkuar për të përdorur një metodë r shtypura në thelb print it out. Dhe si ju mund të shihni, ajo më thotë se është një grup i asociuar, dhe ju keni një kryesore, autor, pikë në këtë varg, Autori nuk duhet të jetë bosh, dhe një tjetër kyç, trupi, pikë në një tjetër varg, organi nuk duhet të jetë bosh. Unë jam si, rregull, cool. Pastaj unë mund të iterate nëpër rrjet dhe të shtypura nga çdo mesazh të vetëm. Kjo është në thelb si një grup shoqëruese me një bandë e mesazheve. Ajo që unë jam duke shkuar për të bërë është "nëse ka gabime," dhe unë jam duke shkuar për të krijuar një listë të parenditur, dhe unë jam duke shkuar për të iterate nëpër të gjitha gabimet. Dhe kjo, dhe tani unë jam duke shkuar për dorëzimin provoni këtë përsëri, dhe le të shohim se çfarë kemi. Tani ne kemi marrë këtë listë bukur të gabimeve, dhe kjo është ende shumë e shëmtuar, por kjo padyshim mund të jetë i formatuar për të duken bukur, por ideja themelore është vetëm në disa rreshta të kodit, ne ishim në gjendje për të vërtetuar modelin tonë, të sigurt se fusha të caktuara nuk ishin bosh, dhe nëse diçka shkoi keq, atëherë kthehen disa lloj mesazh gabimi Unë pastaj mund të paraqesë përsëri të përdoruesit. Ju gjithashtu mund të rregulloje validation tuaj kështu që ju në fakt mund të ketë një mesazh gabimi që është më specifike të aplikimit tuaj ose diçka të tillë. E gjithë kjo është në përgjithësi i përshtatshëm. Fat të keq, ne jemi mbetur shumë kohë, kështu që unë jam do të ketë për të ndërprerë seancën jetojnë coding këtu. Ka një bandë e karakteristika të tjera që unë dua të demonstruar për ju në këtë shembull. Për shembull, ju mund të shtoni templates për faqen tuaj, kështu që ndoshta ka një lloj Kodi HTML që ju doni të aplikoni në çdo faqe të vetme në faqen tuaj, dhe në vend të pasting që në çdo skedar të vetëm pamje që keni, e cila padyshim do të jetë një praktikë e keqe, që në thelb mund të përcaktojë këto templates, dhe më pas në kontrollues tuaj thonë, "Mirë, unë jam duke përdorur këtë template." "A të gjitha pikëpamjet e mia përdorni këtë template." Dhe një gjë e fundit që unë dua të demonstruar për ju si se ne nuk kemi kohë për të është ndër-site scripting, dhe në thelb unë mendoj se ju djema keni parë ndoshta në CS50 - Unë mendoj se David Malan ndoshta folur se si ju zakonisht mund të merr injeksion JavaScript kodin ne - a keni biseduar për këtë? Ndoshta? Ndoshta jo? Por shumë herë ju mund të merr injeksion me qëllim të keq kodin JavaScript në bazën e të dhënave e dikujt, dhe në qoftë se ata nuk e shpëtojnë atë siç duhet, atëherë kur ata paraqesin se të dhënat përsëri për të përdoruesit, atëherë ajo mund të kandidojë një lloj të rastit kodit JavaScript që ju nuk dëshironi të ndodhë, dhe unë do të të treguar se si ju do të bëni atë brenda Kohana. Është e vërtetë me të vërtetë, të vërtetë e lehtë. Unë mund të bëjë atë të drejtë tani në 2 sekonda fjalë për fjalë. Të gjithë ju duhet të bëni është në thelb të përfundojë këto gjëra në këtë gjë të quajtur subjektet HTML. Dhe kjo automatikisht do të shpëtoni nga të gjitha karakteret e duhur dhe sigurohuni që ju nuk e merrni këtë problem. [Student] Ju dha testin e parë gabimisht. [Brandon Liu] Oh, oops. Mirë >>, kjo është e gjitha unë kam për të ndarë me ju për sot. Këto slides do të jetë postuar, por këto janë në përgjithësi vetëm burimet e ju duhet me të vërtetë duhet të merrni filluar me Kohana. Ju mund të shkoni në faqen e internetit. Ata kanë një udhëzues të përdoruesit, dhe ata gjithashtu kanë një explorer API. Ne mund të shqyrtojë të gjitha funksionet e ndryshme dhe funksionet e ndihmësit që ata kanë për ju. Ata në përgjithësi kanë informata të mjaftueshme në faqen e internetit që ju mund të përdorni për të filluar dhe për të marrë do me Kohana. Ka nuk janë aq shumë mësime, unë mendoj se, për Kohana, jashtë atë që ata kanë në faqen e internetit këtu, kështu që kjo është ndoshta bast tuaj më të mirë. Por në qoftë se ju doni të shkoni me kuadrin web dhe ju nuk dëshironi të keni për të marr një gjuhë të re, dhe ju doni diçka që është relativisht e lehtë dhe ka një kurbë të lehtë të mësuarit, Unë patjetër do të sugjeroja Kohana. Kjo është ndoshta oferta më e mirë për këtë. Funny gjë, megjithatë, është nëse ne kemi qenë duke përdorur Ruby on Rails, ne mund të përsëritet ajo që ne vetëm e bëri dhe ndoshta më shumë në nën 3 minuta. Jo shaka, por të mësuarit Ruby on Rails merr shumë më të gjatë se ajo do të marrë për të mësuar Kohana. Kjo është në thelb zgjedhjen tuaj në atë që ju doni të zgjidhni për të mësuar, por në qoftë se ju doni të merrni dhe drejtimin shpejt, Kohana është padyshim një zgjedhje shumë e mirë. Çdo pyetje të fundit para se të përfundojë? Po. [Student] Si do që ne integrimin në një kuadër CSS si ju jeni duke përdorur kur keni qenë të udhëzuar? Pyetja është se si do ne integrimin e që me një kuadër CSS? Ajo që ne ndoshta do të bëjmë është që ne ndoshta do të përfshijë një dosje të re ku ne do të hale të gjitha dosjet tona CSS, dhe pastaj ne do të shtoni një template të ri. Në template ne do të përfshijnë ato fotografi CSS për t'u siguruar që ata janë të cekura në çdo faqe të vetme, dhe pastaj kur ju të vërtetë shkruani HTML, ju vetëm të shtoni klasa dhe gjësend të përshtatshme, dhe për shembull, kur ju jeni duke përdorur diçka si formë funksion ndihmës, ju mund të shtoni më shumë parametrat më pas të specifikojë se çfarë klasa që ju doni të jetë e bashkangjitur me gjëra të ndryshme në mënyrë që ata mund të stilit atë siç duhet, dhe kjo është në thelb se si do të shkojë. Çdo pyetje të tjera? Awesome. Faleminderit për kohën tuaj, dhe ju falënderoj për të ardhur. Unë nuk ishte duke shkuar për të shtuar shumë e shumë gjëra tjera, por 1 gjë me të vërtetë i shpejtë është që ne nuk kemi një lidhje në formën. Me të vërtetë memec. Le të shtoni një - në të vërtetë në pamje, blog, indeksi, le të vërtetë të shpejtë të shtoni një link që shkon në faqen e re, faqe ku ne mund të futur një post të ri. Ne jemi duke shkuar për të bërë këtë. Çfarë është e bukur është ka ky grup të tërë të funksioneve HTML ndihmëse të cilat bëjnë gjëra të ndryshme për ju, kështu që ju tashmë e pa e subjekteve funksionojnë këtu, por ata gjithashtu kanë një funksion të quajtur "spirancë" të cilat ju mund të shtypni në blog / e re dhe thonë: "Posto një blog të ri." Dhe kjo do të krijojë atë lidhje për ju, dhe kjo duket me të vërtetë i parëndësishëm për të bërë, por kjo është e bukur, sepse mendoj që ju jeni duke lëvizur faqen tuaj te internetit nga 1 domain në një tjetër. Dhe në qoftë se ju vetëm shkruajtur nga urls veten, atëherë ju do të duhet të ndryshojë të gjitha URL. Apo ndoshta ju u zhvendos atë nga 1 subfolder në një tjetër subfolder. Ju do të duhet të ndryshojë të gjitha ato URLs veten, dhe kjo është më zbavitëse. Ju mund të përdorni këtë spirancë të drejtë këtu, dhe ju mund të ndryshojë domain ose prefiksin subfolder në file e konfigurimit një herë, dhe atëherë ai do të zbatohet se kudo, dhe kjo është, përsëri, një shembull i madh i nuk e përsëris veten, tharje kodin tuaj jashtë. Kudo që të jeni duke përsëritur veten, të përpiqet dhe të ekstrakt në një lloj të file e konfigurimit ose në një funksion të ndryshëm dhe atë e kanë trajtuar atë për ju. Dhe gjëja e fundit që kam kërkuar për të ju tregojnë se ishte mendoj ne jemi kthyer në këtë post, dhe unë e kishte në përbërje disa ese të vërtetë të gjatë, por kam harruar për të përfshirë autorin time. Tani kur unë klikoni "Submit Post," Unë vetëm humbur çdo gjë. Jo! Të vërtetë e trishtuar. Pra, si mund të merren me këtë? Kjo është ajo që ne bëjmë. Ajo që ne bëjmë është këtu për këto të dhëna dhe të zonës tekst funksioneve, në qoftë se ne të përfshijë një parametër të dytë, atëherë vlera e këtij parametri të dytë do të jetë ajo që fusha do të jetë e populluar fillimisht me. Ajo që ne mund të bëjmë është në kontrollues tonë blog, ne mund të lidhin një tjetër ndryshore. E quajti atë "vlerat" ndoshta. Dhe të kalojë në postin grup, fjalë për fjalë. Kjo do të thotë se në qoftë se validation dështuar, kalojnë për mua array postimi që kam paraqitur nga kërkesa e fundit, dhe në këtë mënyrë unë mund të përdorni vlerat nga paraqitja ime e fundit për të ripopulluar fushat. Tani unë mund të bëjë diçka si vlera autori dhe vlerat e trupit, dhe në këtë mënyrë tani në qoftë se unë bëj disa gjëra të rastit dhe klikoni "Submit Post", atëherë ajo qëndron atje. Por ne jemi duke shkuar për të drejtuar në një problem tjetër. Që punon, por në qoftë se unë të shkoni në faqen herën e parë, ajo do të rrëzuar, dhe kjo është për shkak herë të parë ne do të shkojmë në faqe, ky variabël pas ende nuk është përcaktuar. Është null. Ajo nuk ekziston. Dhe ajo që dua të them është, nëse ekziston ky kyç, pastaj kthehen vlerën e kësaj grup, por në qoftë se çelësi nuk ekziston, pastaj të kthehen një varg bosh. Kjo është funksionaliteti ne duam këtu. Ne duam të kontrolloni nëse çelësi ekziston para se të përpiqet për të hyrë në rrjet, dhe për fat të mirë të mjaftueshme, Kohana gjithashtu na jep një funksion ndihmë e përshtatshme për këtë. Ata e kanë këtë suitë e tërë e funksioneve me emrin ARR, të shkurtër për grup, dhe ata 1 funksion të quajtur "të marrë", dhe ju mund të kalojë në rrjet, dhe ju mund të kalojë në emër të kyç. Pastaj në thelb ajo që do të bëni është se do të përpiqet të marrë atë çelës, por në qoftë se çelësi nuk ekziston në rrjet, atëherë ajo do të kthehet bosh, ose ne mund të caktojmë edhe një, unë besoj, e cila është e bukur. Tani në qoftë se ne bëjmë të njëjtën gjë përsëri, atëherë ju shihni tani ajo punon herë të parë përreth, dhe përsëri, në qoftë se ne të shkruani disa sende të rastit dhe të përpiqen dhe të paraqesë, atëherë ajo qëndron atje. Dhe unë mendoj unë mund të ju tregojnë se si të shtoni një template të vërtetë shpejt. Ajo që ne mund të bëjmë së pari të thotë që ne mund të shtoni një pamje të re të quajtur "template.php" brenda dosje Views, dhe atë që unë jam duke shkuar për të bërë është që unë jam duke shkuar për të shtypur nga diçka që quhet "përmbajtje" e cila do të jetë përmbajtja e mia kryesore. Dhe ndoshta në fund të fund unë jam duke shkuar për të shtuar, të themi, drejtën e autorit. [Pyetja e padëgjueshme studenti] [Brandon Liu] Ndoshta kjo është një template super themelore që unë dua të përdorni. Unë dua që të ketë një dosje me të drejtën e autorit tim në çdo faqe të vetme, dhe tani ajo që unë jam duke shkuar për të bërë brenda kontrollues tim tani është në vend të thënë, "shtrihet Controller" Unë jam duke shkuar për të thënë, "shtrihet Controller_Template," dhe tani në vend të thënë, "trupi përgjigje është e barabartë me këtë pikëpamje," Unë jam duke shkuar për të thënë, "kjo përmbajtje template është -" dhe unë mendoj se - mund ta vënë një shenjë të barabartë? I harroj. Po, kam menduar kështu. Dhe tani kam vendosur që ndryshueshme përmbajtje të barabartë me pamje. Unë mund të bëjë të njëjtën gjë këtu. Dhe tani, nëse unë rifreskoni, ju mund të shihni tani këtë të drejtën e autorit është shtuar atje, dhe vetëm të bëjë disa postim të rastit, dhe pastaj, përsëri, ju duhet të shihni se është e drejta e autorit në fund shumë të faqes. Great. Kjo është e gjitha që kam kërkuar për të treguar ju djema. [Duartrokitje] Ndonjë pyetje? [CS50.TV]