[Seminar] [Kohana: Isang Magaang PHP Framework] [Brandon Liu] [Harvard University] [Ito ay CS50.] [CS50.TV] Hi sa lahat. Ang pangalan ko ay Brandon. Ako ay isang junior dito sa kolehiyo paggawa ng computer science, at ngayon kami ay pagpunta sa makipag-usap tungkol sa Kohana, na isang PHP web development framework. Ngayon ay magiging isang live na coding seminar, kaya talaga Pupunta ako sa gastusin ng 5-10 minuto pagpapaliwanag kung ano ang Kohana ay, at pagkatapos ay literal na pupuntahan ko bumuo ng isang napaka-simpleng blog para sa iyo karapatan dito literal mula sa simula. Kami ay pagpunta upang i-download ang code mula sa Kohana website, at kami ay pagpunta upang simulan ang pagbuo ng isang blog, at sana ay magkakaroon ito maging napaka-nakapagtuturo, dahil makikita mo marahil siguro kukunin ko na gumawa ng ilang mga mali, at makikita mo sa akin mabawi mula sa kanila, o makikita mo ang aking proseso ng pag-iisip habang binubuo ko sa pamamagitan ng blog na ito, at samantala, kakailanganin mo ring maging pamilyar sa ang balangkas mismo. Sana makikita itong maging isang napaka-nakapagtuturo ehersisyo. Una, kung ano ang eksaktong ay isang framework? Kung na-pagkuha CS50 sa ngayon, hindi ka talaga nagtrabaho sa anumang Framework pa, at ang bagay ay na ito. Marahil nagawa kang 1 web development pset na, at sabihin nating patuloy kang bumuo ng mga website at panatilihin ang mga website ng gusali. Magsisimula ka upang makapansin ng ilang mga bagay. Ang unang bagay na mapapansin mo ay na marahil ginagawa mo ang parehong mga bagay nang paulit-ulit sa lahat ng oras, mga bagay tulad ng paglilinis ng data ng pag-input ng user, mga bagay tulad ng pag-aayos ng iyong mga file sa isang tiyak na paraan. Ang iba pang mga bagay na makikita mo marahil napansin rin ay na ang iyong code maaaring magsimulang upang maging napaka, napaka-walang kaayusan, at maaari mong iwanan ito maraming kalat at mayroon lamang isang napakahirap oras sa pagpapanatili ng ito, o maaari mong simulan upang buuin ang iyong code at ginagawa itong Modular sa ilang mga paraan upang gawin itong mas maintainable. Ito ay kung saan web Framework talaga dumating in Ang mga taong binuo ng maraming mga website, sinabi nila, "Hindi namin kailangang gawing muli ito bawat solong oras bumuo kami ng isang website." "Bakit hindi gumawa lang namin ang isang package na ang lahat ng mga bagay na ito para sa iyo bawat solong oras na gusto mong bumuo ng isang website? " At nang sa gayon ay kapag gumawa ka ng isang bagong website, tumutok ka lamang sa kung ano eksakto ang partikular na website ay tungkol sa. Hindi mo na kailangang ulitin ang lahat ng mga iba't-ibang mga configuration at paghihiwalay ng mga code at muling pagsusulat ng code na madalas ay mayroon kang gawin kapag nagsasagawa ka ng mga website. Ang ideya ay na nagbibigay-daan sa isang framework mong magsulat ng isang code mas mataas na antas nang hindi na kinakailangang mag-alala tungkol sa mga detalye ng mas mababang antas. Isang detalye mas mababang antas ay maaaring maging isang bagay tulad ng pagharap sa paglilinis ng data ng pag-input ng user. Iyan ay isang bagay na hindi dapat talaga kailangan mong mag-alala tungkol sa. Dapat mong tumuon sa kung ano ang iyong web paglalaan ay tungkol sa aktwal na. Ito inaalis ng maraming boilerplate na code. Ito ay isang architecture para sa iyong proyekto. Ang pinaka-popular na isa ay magiging Model-View-Controller, kung saan ako pupunta na makipag-usap tungkol sa isang segundo. At marami ng beses na ang mga Framework magsama ng isang hanay ng mga pamamaraan, mga panuntunan, at mga pinakamahusay na kasanayan para sa iyo upang gamitin ang kaya na kapag umaayon sa mga web framework kailangan mong isulat ang iyong code sa isang tiyak na paraan, at ito ay sa pangkalahatan ay isang napagkasunduang hanay ng mga prinsipyo sa pamamagitan ng ang komunidad na pangkalahatang tinatanggap na maging isang mahusay na paraan ng pagsulat code. Ginagawa itong mas maintainable ang iyong code, mas kapaki-pakinabang, kaya sa at iba pa. At sa wakas, ang bagay na gusto kong bigyang-diin ang tungkol sa Framework kumpara sa mga aklatan ay sa ideya na ito tungkol sa pagbabaligtad ng control, at ang bagay ay na ito. Ang pagkakaiba sa pagitan ng isang library at isang framework ay na may isang library na iyong isinusulat pa rin sa pangunahing programa, at tapos ka uri ng invoking ang library at pagtawag sa mga library upang gawin ang isang bagay para sa iyo. Ang pagkakaiba sa pagitan ng isang library at isang balangkas ay ang balangkas ay nagsisimula out kasama ang control, at ito invokes ang iyong code, sa gayon maaari mong isipin ito bilang - ito ang dahilan kung bakit ito ay tinatawag na isang framework - ang balangkas ay nagbibigay ito frame at istraktura para sa iyong code, at punan mo sa butas, at ito ay nagiging mas maliwanag sa isang segundo kapag nakita mo sa akin simulan na magsulat code sa loob ng konteksto ng mga balangkas. Makikita mo na ako ng pagpuno sa gaps, at sa balangkas ay uri ng pagkontrol ng lahat sa umaandar na piraso, at Kailangan ko bang ilagay ang mga piraso sa kanan lugar. Ngayon kami ay pagpunta sa makipag-usap tungkol sa Kohana, na kung saan ay isa sa maraming mga Framework PHP. May mga web Framework, at doon ay mga sa halos bawat solong wika, at ako pagpili Kohana dahil Kohana ay arguably at sa pangkalahatan ay kinikilala bilang ang pinakamadaling balangkas na PHP upang kunin. Ito ay ang pinaka-magaan ang timbang. May iba pang mga out doon na may maraming, maraming iba pang mga tampok, ngunit may posibilidad sila na maging mas mahirap i-pick up. At sa wakas, Kohana ay gumagamit ng arkitektura MVC. Ito ay sapat na magaan ang timbang na maaaring literal naming bumuo ng isang proyekto dito mismo sa harap ng iyong mga mata karapatan, at maaari mong medyo magkano sundin kasama medyo madali. Ano ang arkitektura MVC? Ito ay nakatayo para sa Model-View-Controller, at siguro kung sa tingin mo tungkol sa ang code nagsusulat ka sa ngayon para sa ilan sa iyong mga psets web development maaaring magawa upang makita ang ilan sa mga ito, ngunit karaniwan kapag nagsimula ka ng pagsulat isang mas kumplikadong mga web application, ang dibisyon sa pagitan ng mga 3 mga segment ay nagiging higit pa at higit pa maliwanag. Inilatag out ko ang MVC dito uri ng bilang isang stack, at madalas makikita mo marinig nagsasalita ang mga tao tungkol sa mga stack sa web development, at ito ay upang ilarawan ang ideya na ang bawat layer, talagang sinusubukan ng bawat bahagi upang makipag-ugnayan lamang sa pagitan ng 2 iba pang mga bahagi. May nag-a-access ang iyong website bilang isang client o isang browser. Sila ay nakikipag-ugnayan sa iyong programa sa pamamagitan ng code view. Nakikipag-ugnayan ang view ng code na may controller. Controller Ang nakikipag-ugnayan sa mga modelo, at ang modelo nakikipag-ugnayan sa mga database ng SQL. At walang hopping sa pagitan ng kung isulat mo nang maayos ang iyong code. Ano ang mga bagay na ito gawin? Ang modelo mahalagang ay ang piraso ng code na deal sa iyong data. Anumang bagay na deal sa iyong database, na may mga bagay na ini-imbak mo, o pagbawi ng mga bagay sa database, na lahat ng hinahawakan ng mga modelo. Siguro mayroon kang mga bagay sa iyong database. Kami ay pagpunta upang lumikha ng isang modelo na kinakailangang gawin sa mga post, kaya isang post ay maaaring magkaroon ng ilang mga katangian dito. Maaari kang magkaroon ng mga pag-andar sa paligid pag-iimbak ng mga post o pagbawi ng mga post o pini-filter ang mga post at iba pa at iba pa, at iyon ang lahat ng code na hinahawakan ng mga modelo. Controller ang uri ng application logic, at maraming iba't ibang mga bagay na maaari pumunta sa application ng logic. Kung ikaw ay pakikipag-usap sa isang iba't ibang mga API, na maaaring maging kung saan ka pagharap sa mga application logic. Kung sinusubukan mong magkaroon upang dalhin sa data mula sa maraming iba't ibang mga modelo at kailangang pagsamahin ang mga ito sa ilang mga paraan, na madalas ay maaaring panghahawakan ng controller. Halimbawa, sa Facebook, kung kaibigan mo ang isang tao, pagkatapos ay marahil na gawa ng pagtaguyod ng kaugnayan na maaaring tapos na sa pamamagitan ng controller. At sa wakas, ang view ay ang code na pagbuo ng kung ano ang iyong aktwal na makita. Ang isang pulutong ng mga oras sa tingin ko sa CS50 psets sila ay hindi talagang hinihikayat ka guys upang paghiwalayin ang 3 mga bagay. Makikita mo marahil mayroon kung saan ito malaki, mahaba ang file sa tuktok kang gumawa ng ilang mga SQL query at marahil gumawa ng ilang processing sa ang data na iyong nakuha mula sa database, at pagkatapos ay mayroon kang lahat ng iyong HTML sa ibaba. At maaari mong makita na bilang lumikha ka ng higit pa at higit pang mga pahina na kayo ay pagpunta sa may ilang mga code sa pag-uulit, at din, ang bagay ay ang iyong file ay makakakuha ng talagang malaki at mahaba at magiging mahirap gamitin upang pamahalaan. Ang dahilan kung bakit MVC ay kaya mahusay itinuturing ay para sa isang bilang ng mga kadahilanan. Ang unang bagay ay isang bagay na tinatawag na paghihiwalay ng alalahanin kung saan ay ang ideya na kapag mayroon kang - Perpekto ang 1 piraso ng code ay dapat gawin 1 bagay at gawin ito talagang mahusay, at hindi mo dapat pagsamahin ang mga piraso ng code na gawin disparate mga bagay. Halimbawa, tingnan ang code at code ng modelo, sila ay hindi talagang ay kailangang may kaugnayan. Hindi nila kailangang maging sa parehong file, kaya kapag maaari mong, ihiwalay ang mga ito out kaya napakadali upang mapanatili. Ang iba pang mga bagay ay ang code sa muling paggamit. Maaari mong mahanap ang iyong sarili sa pagsusulat sa parehong query sa SQL o paggawa katulad na mga query na maaaring lumilipad ang isip sa 1 function, at iyon ang ideya sa likod ng mga modelo at controllers, nagkakaproblema ito sa isang hiwalay na pag-andar na maaari mong muling gamitin sa iba't-ibang lugar sa iyong proyekto. At sa wakas, na nakatali sa drying ang iyong code, o hindi na paulit-ulit ang iyong sarili, huwag ulitin ang iyong sarili. Ito ay napaka maaaring maunawaan sa pag-develop. Sa tuwing mo, hindi mo gustong upang ulitin ang iyong sarili, dahil kung ulitin mo ang iyong sarili,  ito ay mas mahal upang mapanatili. Kung nais mong baguhin ang 1 bagay, kailangan mong baguhin ito sa lahat ng dako, at na humahantong sa mga bug, at ito ay kasindak-sindak. Lahat ng karapatan. Sa lahat ng mga katanungan sa ngayon tungkol sa Kohana? Mahusay. Ngayon kami ay pagpunta sa sumisid sa live na coding session, at sana lahat ng bagay ay tumatakbo nang maayos. Ako ay pagpunta sa isa lamang bumuo ng website na ito sa isa sa aking mga remote na server, at na paraan kung paano ka guys maaari ring tingnan ang website at i-access sa website, at din ang kapaligiran ay mas mahusay na-configure kaysa sa aking remote machine, dahil ito ay tumatakbo sa Linux sa halip ng OS X. Literal na Kami ay pagpunta sa simulan. KohanaFramework.org. Pupunta ako upang i-download ang code mula sa website. Pupunta ako upang kopyahin ang address ng link, pumunta sa aking server, i-download ito, at pupuntahan ko i-extract ito. [Mag-aaral] Ano ang pinakamalaking maaari mong gawin ang teksto? [Brandon Liu] Iyan ba ang mas mainam? [Mag-aaral] Iyan ba ang maaaring gawin? [Brandon Liu] Oo, na fine. Download ko ng ZIP file at unzipped na sa isang direktoryo na tinatawag na Kohana, at kami ay pagpunta sa palitan ang pangalan na CS50-Kohana, at sabihin pumunta in Kahanga-hanga. Dito mo makikita ang isang bungkos ng iba't ibang mga file. Karamihan sa inyo ay maaaring balewalain - lubos hindi pagpunta sa pumunta sa pamamagitan ng bawat solong file na in dito dahil sa aming mga hadlang sa oras, ngunit sa pangkalahatan kapag nag-install ka Kohana, ang unang bagay na gagawin mo ay kang pumunta sa direktoryo, at makikita mo talaga gawin ang ilang mga pagsubok na kapaligiran at watnat upang siguraduhin na ang iyong kapaligiran ay wastong itatakda upang patakbuhin ang Kohana at tiyakin na ang lahat ng bagay ay ang lahat ng karapatan. Maaari mong makita ang pinaka-bagay na lumipas, ngunit sa pangkalahatan ay palagi kang makatagpo ng mga ito problema 1 kung saan ito complains na ang ilang mga direktoryo ay hindi writable, at iyon ang dahilan sa ilang mga pahintulot. Hindi ko alam kung magkano ang iyong guys na natutunan ang tungkol sa mga pahintulot ng file sa CS50, ngunit kung gagawin mo web development, ikaw ay pagpunta upang tumakbo sa ang isyu na ito ng maraming. Pupunta ako upang gawin itong writable at sa tingin ko ay mayroon din ako sa - doon kami pumunta. Okay, kaya ngayon maaari mong makita ang lahat ng bagay lumipas, at ngayon sasabihin ito sa iyo na baguhin ang pangalan ng install.php file. Pupunta ako upang ilipat ang install.php file upang installed.php, at ngayon kung i-refresh ko, nagbibigay ito sa akin ang ilang error, at ito ay kung saan nagmumula ang pag-debug in Ito ay kung saan maaari mong makita kung ano ang aktwal na pagpunta sa mangyari. Bagay ay, sa pamamagitan ng default, Kohana Ipinagpapalagay na iyong proyekto ay nasa root directory ng iyong domain, kaya umaasa mong maging sa demo.brandonkliu.com. Mayroon kaming upang sabihin dito na ito ay nasa isang subfolder talaga. Ito ay sa isang subfolder na tinatawag CS50 Kohana. Bagay ay, ito ay misinterpreting CS50-Kohana bilang ibang bagay, na Ipapaliwanag ko sa iyo sa isang segundo. Ngunit dapat kong sabihin sa iyo na ang isang bagay na na inaasahan. Ano kami ay pagpunta sa gawin ay kami ay pagpunta sa pumunta sa folder na ito na tinatawag na bootstrap.php, kung saan ay ang configuration ng folder kung saan ng maraming iba't ibang mga bagay na naka-set up. Buksan ko na up. Pagkatapos siguro isa sa mga unang bagay na nanaisin kong gawin ay baguhin ang time zone. At pagkatapos ay sabihin makita. Aha! Kanan dito. May ng grupo ng mga iba't ibang mga kasabihan sa configuration sa dito, ngunit ang isa Naghahanap ako ay bagay ito na tinatawag na base URL, at sa pamamagitan ng default na nakukuha ko itakda ito upang Kohana, pero pupuntahan ko babaguhin na sa CS50-Kohana, at sa tingin ko na dapat itong ayusin. Oo, mahusay. Sa pamamagitan ng default, upang makita na ito ay gumagana, sinasabi nito, "Hello World." Saan mo na nanggaling? Paano mo makuha namin sa Hello World? Saan eksakto ay ang code na aktwal na sinulat iyon? Upang maunawaan na, makikita ba kitang ipakilala ito konsepto na tinatawag na routing. Pretty magkano ang lahat ng mga web Framework ay may konsepto na tinatawag na routing, kung saan ay ang piraso ng software na i-map sa isang tiyak na URL sa isang tiyak na piraso ng code sa loob ng iyong balangkas. Halimbawa, kung mayroon kang ilang mga URL at pumunta ka sa ilang mga URL tulad ng foo.com / blog / lahat pagkatapos ay kung ano ang balangkas ay pagpunta sa gawin - o hindi bababa sa kung ano Kohana ay pagpunta sa gawin - ay itong ibang mapupuntahan upang mahanap ang isang klase na tinatawag na controller blog, at ito ay pagpunta upang patakbuhin ang pag-andar na may pangalang pagkilos lahat. Alam ko ako ng pakikipag-usap tungkol sa klase at pag-andar, at alam ko mo guys na hindi sakop ng mga klase at mga function sa CS50 pa, ngunit sa ngayon, maaari mong isipin ang mga klase bilang isang pangkat lamang ng mga pag-andar, isang paraan ng pagpapangkat ng mga pag-andar nang sama-sama. Iyon lang talaga ang lahat ng kailangan mong malaman. Ngayon kung tinitingnan namin ang aming istraktura ng folder, sa loob ng folder ng application doon ay isa pang folder na tinatawag na mga klase, at ang iba pang mga folder ay tinatawag na Controller at Model. Kung tumingin ka sa loob ng Controller folder, makikita natin na mayroong isang file na tinatawag Maligayang pagdating, at maaari mong makita dito ay isang klase na tinatawag Controller Maligayang pagdating, at doon ay isang katangian na tinatawag Index Action, at kung ano ang ginagawa nito ay ito nagtatakda ng katawan ng iyong tugon sa Hello World. Iyon ay kung saan ang code ay nakasulat. Ang iba pang mga tanong, mahusay, ako ay hindi pumunta sa blah, blah, blah, / maligayang pagdating / index. Paano mo tapusin ko up dito? Well, na lamang dahil dito sa ibaba ng aming bootstrap file kung saan namin-set ang aming mga ruta maaari mong makita na itakda mga ito ng ilang mga default para sa iyo. Ang default na controller ay Maligayang pagdating. Ang default na pagkilos ay Index. Iyon ay kung bakit kapag inilalagay namin ang walang anuman sa doon awtomatiko itong nagpunta sa controller Maligayang pagdating at ang index ng Action. Lahat magkaroon ng kahulugan sa ngayon? Ngayon, maaari mong gawin nang higit pa kaysa pumunta lamang sa Controller at isang tiyak na aksyon. Maaari mo ring pumasa sa mga parameter sa controller. Tulad ng isang halimbawa, Pupunta ako sa magdagdag ng isa pang pagkilos sa ito controller upang ipakita sa iyo. Hayaan tawagan ni ang pagkilos na ito Echo, dahil ito ay pagpunta sa sabihin sa iyo ang kahit anong bigyan mo ito, at kaya talaga Pupunta ako sa grab isang parameter na pupuntahan ay ipapadala sa pamamagitan ko upang ang route ng programa, at bilang maaari mong makita dito, ang linyang ito dito mismo, maaari mong makita na ito talaga ay nangangahulugan na mayroon kang controller, at mayroon kang isang /, at mayroon kang aksyon, at mayroon kang isa pang /, at na pupuntahan maging mga parameter, at dahil mayroon kaming ang pangalang ID sa loob ng anggulo bracket, na nangangahulugan na aming pagbibigay ng pangalan ng parameter ID na ito. Mamaya sa aking controller code kung gusto kong i-grab ang isang hold ng na parameter, Maaari ko bang gamitin ang code na sinulat ko, hanapin ang parameter na may pangalang ID. Iyon ay kung ano ang aking ginawa dito, at ako pagpunta sa bumalik at sabihin, "Sinabi mo" na iyon. At kaya kung ngayon pumunta ako sa aming website, Pumunta ako sa cs50-kohana/welcome/echo/Helloooo-- oh, na tama. May 1 hakbang ko kaliwa out. Ito ay bahagi ng mga live na coding ideya. Narito ang 1 bagay. Ni makita Hayaan. Kaya normal sa pamamagitan ng default na may maraming mga mga application sa web mayroon kang na isama ito index.php bagay sa iyong URL, dahil ang ideya ay index.php ay uri ng entry point ng iyong application, ngunit siyempre, na uri ng mga nakakainis na magkaroon. Hindi mo nais na magkaroon index.php lilitaw sa iyong URL, at halos bawat web framework sa labas ng kahon May problemang ito index.php, at sa gayon mayroon kang gumawa ng ilang mga hakbang upang magagawang alisin ang mga iyon. At kaya sa kasong ito, kung ano kami ay pagpunta sa gawin ay kami ay pagpunta sa gumamit ng isang file na tinatawag na. htaccess, at ito ay isang bagay na tiyak sa Apache web server, at maaari itong gumawa ng mga bagay tulad ng pagsulat na muli ng URL at mga redirect URL at iba pa at iba pa, at Kohana ay sapat na magaling na magbigay ng isang template. htaccess file na maaari naming gamitin. Tulad ng iyong nakikita, mayroong isang file na may tinatawag na example.htaccess, at kami ay pagpunta sa kopyahin na sa. htaccess. Pupunta ako upang buksan ito at i-edit ito, at talaga ginagawa nito ng grupo ng mga iba't ibang mga bagay. Ang pangunahing linya baka gusto upang tumingin sa ay dito mismo. Ang ideya ay na ito Nagtatakda up ng isang panuntunan na nagsasabing, "Okay, kahit anong type ka sa, i-prepend index.php upang iyon." Maaari mong makita iyon. Ang. * Nakatayo para sa anumang bagay, tumugma sa anumang bagay, at pagkatapos ay ang ikalawang bahagi ay index.php / $ 0, at $ 0 ay tumutukoy sa kahit anong ay tumugma sa dati. Ba na magkaroon ng kahulugan? Ngunit ang talagang key bagay na gusto kong baguhin ay baguhin ito sa pagsulat na muli base, kung saan ay ang URL base. Ito uri ng mga Ipinagpapalagay kung saan nagtatrabaho ka mula sa. Pupunta ako sa magdagdag CS50 Kohana iyon, at na paraan ngayon kung alisin ko ang index.php, ito ay gagana, at pupuntahan ko magdagdag ng ilang mga numero upang ipakita sa iyo na ito sa katunayan ginawang trabaho. Magaling. Ang anumang mga katanungan sa ngayon? [Mag-aaral] Paano ito malaman upang gawin ang mga 123? Iyan ba ay argumento? Mismong. Maaari mong isipin na ito tulad lamang ng isang argumento. Ngunit ang kakaiba bagay, bagaman, ay na ang paraan ng Kohana ginagawa nito Hindi nila gagawin ito nang eksakto tulad ng isang argumento. Mayroon kang i-grab ito tulad nito. Mayroon kang i-grab ang mga kahilingan sa bagay at hilingin ang parameter na may pangalang ID, at na pangalan ID ay mula na bootstrap file na nagpakita ako nang mas maaga, at ang pangalan ng ID noon ay sa mga anggulo bracket, at iyon ang kung paano mo grab ang mga parameter. Kahanga-hanga. Anumang iba pang mga katanungan? Tulad ng sinabi ko, controllers, pangasiwaan nila application logic, kaya na 1 halimbawa kung saan maaari mong makita that's - masyado nang basic, ngunit ito ay pa rin application logic, ang ideya ng daklot ang parameter at ang paglikha ng bagong string na nagsasabing, "Sinabi mo blah," at pagkatapos pagsigam na pabalik sa iyo. At sa pangkalahatan ay kung ano ang ginagawa mo ay kang lumikha ng iba't ibang mga controllers. Kang lumikha ng hiwalay na controllers para sa iba't ibang mga bahagi ng iyong website. Ngayon kami ay pagpunta sa gumawa ng isang napaka-simpleng website, at ito ay pagpunta sa maging isang napaka-basic na blog. Kami ay pagpunta upang gumawa ng bagong controller para lamang sa ang mga post sa isang blog. Ngunit pagkatapos ay kung ako ay upang magdagdag din ng mga komento sa mga post ng blog, pagkatapos Gusto ko nais marahil upang gumawa ng bagong controller para sa mga komento. Kung Nais kong magdagdag ng mga gumagamit, marahil Gusto ko magdagdag ng bagong controller para sa mga gumagamit na iyon, at sa pangkalahatan, ang ideya ay na sa tuwing mayroon ka ng isang bagong modelo, isang bagong data sa bagay na kayo ay pagharap sa, mayroon kang isang solong controller para sa data na iyon sa bagay. Ngayon kami ay lamang pagpunta upang gumana sa 1 data sa bagay, at na pupuntahan maging post, at din maaari mong tingin ng mga bagay na data bilang naaayon sa mga talahanayan. Sa pangkalahatan ng bawat talahanayan ay tumutugma sa 1 uri ng data object, kaya ang post na talahanayan ay magkakaroon ng 1 modelo post, na kung saan ay magkakaroon ng 1 post controller naaayon sa na, at ang parehong para sa mga komento, ang parehong para sa mga gumagamit, at iba pa at iba pa. At iyon ang isang pangkalahatang pamantayan. Mayroong pagpunta sa maging espesyal na mga kaso kung saan maaari kang mag-iba mula sa na, ngunit 90% ng oras na kung ano ang iyong pagpunta sa ginagawa, at kukunin ko na ipakita sa iyo na kung ano ang pagpunta naming ginagawa ngayon. 1 pang konsepto bago namin sumisid pabalik sa code, sa ideyang ito ng pamanggit pagmamapa bagay. Mo guys pa nagagawa ang isang web-unlad pset, at nakita mo na gumawa ka ng isang SQL query, at kahit anong ito ay nagbalik sa iyo ang mga hilera. Makakakuha ka ng mga hilera, at sa iyo index ang mga ito sa pamamagitan ng ilang mga pangalan, ang pangalan ng haligi at ng talahanayan, at iyon ang kung paano gumagana sa iyo ng ito, at maaari itong maging isang bit pahirap. Ngunit tangi sa roon, kung mayroon kang mga relasyon sa loob ng iyong database, tulad halimbawa kung mayroon akong mga komento at mga post, pagkatapos siguro gusto kong i-grab ang magulang post ng isang komento. Kung gagamitin ko lang ang mga hilera sa SQL, pagkatapos ang lahat ng maaari kong makuha ang ID ng mga magulang ng post at hindi ang aktwal na post mismo. Ngunit kapag kami ay coding, kung ano talaga namin nais ay upang aktwal na-grab  mag-post ng mga magulang mismo kung minsan. Ano sa bagay na pamanggit pagma-map ang ginagawa ay tumatagal ang mga resulta ng query ng database at naglalagay ito sa mga bagay para sa iyo, na kung saan ay magkano nicer upang gumana sa kaysa plain array at mga hilera. Halimbawa, ngayon kapag mayroon akong isang komento marahil, at gusto kong i-grab magulang post nito, at marahil ko magkomento arrow post, pagkatapos ito ay aktwal na magbigay sa akin ang post na ito sa bagay na naaayon sa aktwal na post magulang, ang ilang mga hindi lamang ang ID, kung saan Gusto ko kung hindi man ay mayroon upang gamitin at gumawa ng isa pang SQL query sa grab ang post na ito, na kung saan ay masalimuot at hindi kailangan. At tangi sa roon, sa pamamagitan ng pagma-mapa ang lahat ng mga hilera ng data sa mga bagay, maaari mo ring ilakip ang higit pang mga pag-andar sa mga bagay, kaya halimbawa, usapan ako tungkol sa kung paano mga klase ay mahalagang mga pagpapangkat ng mga pag-andar. Maaari mong isipin na ito tulad na. Halimbawa, siguro Mayroon akong ang post na ito sa bagay, at marahil Gusto kong magkaroon ng ilang mga uri ng mga function na naka-attach sa ito na nagsasabi talaga sa akin ay kamakailan-post? Ay ito na nai-post sa loob ng nakaraang linggo, tama o mali? At iyon ang isang function maaari kong i-attach sa bagay na iyon, at ito ay talagang maginhawa upang magkaroon ito sa parehong lugar, at mayroong isang host ng iba't ibang mga pag-andar maaari kang lumikha para sa mga bagay na ito, at ito ay talagang maganda para makapag-ilakip ito sa isang klase, sa isang bagay, samantalang kung nagkaproblema ka lamang hilera na nanggagaling mula sa iyong database, pagkatapos ay hindi ka talaga maaaring maglakip ng anumang pagpapaandar sa na. Ito ay literal lamang ng data. Ang anumang mga katanungan tungkol na sa lahat? ORMs napaka-karaniwang mga web development, at mayroong maraming iba't ibang mga uri ng ORMs, at Kohana ay may sarili nitong ORM. Ito ay napaka basic, ngunit makakakuha ka ng isang lasa ng kung ano ang mukhang. Lumikha ng isang modelo para sa aming mga post sa blog Hayaan, at ang unang bagay na malinaw naman kailangan naming gawin ay upang lumikha ng isang aktwal na talahanayan sa loob ng aming database upang aktwal na mag-imbak ng aming data para sa mga post. Ang unang bagay na ako pagpunta sa gawin ay pumunta sa phpMyAdmin. Nakarating na guys ginamit phpMyAdmin bago? Okay, kasindak-sindak, kaya ka guys na alam kung ano iyon ay, at Pupunta ako sa lumikha ng isang bagong talahanayan na tinatawag na Kohana Post, at ito ay pagpunta sa maging talagang simple. Kukuha ako upang muling mag-log in Lahat kami ay pagpunta sa gawin ngayon ay mayroon ng isang may-akda at isang katawan, panatilihin lamang itong simple. Pupunta ako upang lumikha ng talahanayan na, at ngayon ay may lamang kami ng isang talahanayan na kumakatawan sa aming mga post may 2 field para sa aming mga may-akda at ang aming katawan. Ang iba pang mga bagay na ako pagpunta sa gawin ngayon ay i-configure ang aking mga web application kaya alam nito kung paano upang kumonekta sa database, at ito, muli, ay isang bagay na kailangan mong gawin sa lahat ng mga web application. Mayroon kang upang sabihin dito na ang user name at ang password at ang pangalan ng database at iba pa at iba pa upang malaman kung paano upang aktwal na kumonekta sa iyong database. Sa Kohana, mayroon kaming isang bagay na tinatawag na isang module database, at sa folder ng configuration mayroon kaming folder na ito na tinatawag na Database, at bilang maaari mong makita, mayroong isang bungkos ng mga setting mayroon kang magtakda dito upang sabihin dito kung ano ang mga user name at ang password para sa mga database ng sa gayon ay maaari ko talagang kumonekta doon. At dahil hindi ko nais ka guys upang aktwal na malaman ang user name at password ng aking database, Mayroon akong isang file kung saan itinakda ko na ang lahat ng ito up, at ako pagpunta sa kopyahin at ilagay ito sa paglipas ng. Kahanga-hanga. Okay. Sa tingin ko na ang lahat ng configuration kailangan kong gawin, ngunit sabihin makita. Patuloy kaming magsusumikap sa loob nito, at kung may isang bagay nag-crash, pagkatapos ay gagamitin namin ayusin ito. Ano pupuntahan ko magawa Ngayon ay Pupunta ako sa lumikha ng isang bagong controller. O kaya naman talaga, paumanhin. Una Mayroon akong lumikha ng isang bagong modelo. Kukunin ko lumikha ng isang bagong modelo na tinatawag na Post.php, at kung ano kami ay pagpunta sa gawin ay kami ay pagpunta sa tumawag ito klase Model_Post. Maging sa, ang ilang mga syntax-highlight at kaya kapag sinabi ko, "ay umaabot ORM," na talaga ilang higit pang mga object-oriented programming, na sa kasamaang-palad ka guys hindi pa natutunan sa CS50, subalit ito ay medyo madali upang kuhanin. Nagbibigay ito sa akin ang lahat ng ito labis na pag-andar na nauuna sa ito ORM package, at kaya nakukuha ko ng grupo ng mga dagdag na pag-andar at watnat nang libre, kung saan makikita mo ang isang bit ng sa isang segundo. Sa ngayon talaga ang lahat ng kailangan kong gawin ay lumikha class na ito. Hindi ko na kailangang gumawa ng anumang mga pag-andar o anumang bagay, ngunit Lumikha ako ng isang klase na kumakatawan sa talahanayan, at dahil pinahaba ko na ito ORM klase, Nakakuha ako ng grupo ng mga bagay para sa libre, kaya sa ngayon hindi mo kailangang magtakda ng kahit ano nang higit pa up. At ngayon kung ano pupuntahan ko lang gawin ay Pupunta ako sa lumikha ng isang bagong controller, kung saan ako pupunta para pangalanan blog.php, at ako pagpunta sa kopyahin sa ibabaw ng controller Maligayang pagdating kaya hindi ko na kailangang mag-type muli ang ilang mga bagay-bagay, at ngayon Kailangan ko bang palitan ang pangalan na ito. Ano pupuntahan ko gawin upang subukan upang tiyakin na ang lahat ng bagay ay gumagana out Ngayon, Pupunta ako sa grab ang unang post mula sa aking database at i-print ang katawan ng post sa screen. Upang gawin na kung ano pupuntahan ko gawin muna ay Pupunta ako upang i-save ang mga post sa isang variable kaya kung ano kami ay pagpunta sa gawin ay - sa Kohana kung ano ang ginagawa mo ay ang pag-grab ang post na ito sa bagay na ito ay uri ng pahirap, ngunit kailangan mong gawin ito bagay na tinatawag na ORM :: factory, at pagkatapos ay pumasa ka sa pangalan ng modelo na gusto mo, at ibinabalik ito ang ORM bagay na kumakatawan na modelo. At pagkatapos, tulad ng sinabi ko, kapag pahabain namin ang ORM bagay, makuha namin ang lahat ng mga pamamaraan na ito para sa libre, kaya halimbawa, makuha namin ang bagong function na tinatawag na "hanapin ang lahat," na awtomatikong nagbabalik bawat solong post sa database, na kung saan ay medyo maginhawa. At ngayon sa katawan Pupunta ako upang bumalik ang unang post at bumalik ng katawan nito. At siyempre, kailangan kong lumikha ng isang post, kaya magpasok ng isang bagong post ipaalam. Sasabihin kong, "Brandon, ang aking pinakaunang post na ito." Kahanga-hanga. At ngayon kami ay pagpunta upang pumunta sa mga blog at kung ang lahat na rin gumagana - oh, ito ay muli sa ilang ibang mga pipi pahintulot file bagay. Pindutin nang matagal sa 1 segundo. Ito ay uri ng walang katotohanan. May pumunta namin. Okay. Naayos ko na ang problema pahintulot. Ito ay sinusubukang lumikha ng ilang mga file at ang ilan ng log, at ang mga pahintulot, muli, ay hindi maayos na set, kaya ginawa ko ito kaya mga file na iyon ay writable at executable kaya talagang ito ay maaaring mag-log sa mga bagay. Ngayon ito ay nagbibigay sa akin ng isa pang pagbubukod na nagsasabi, "Hindi nahanap ang klase ORM," at iyon ay dahil Nakalimutan ko ang isa pang hakbang. Iyan ay masyadong masama. Sa file bootstrap folder, mayroong mga module na ito dito, kung saan maaari mong piliing paganahin o hindi paganahin. Ito ang mga ng grupo ng mga iba't ibang mga tampok na maaari mong piliin na gamitin ang sa loob Kohana, na kung saan ay isang uri ng magaling. Halimbawa, mayroon sila ng isang module na pagpapatotoo na maaari mong gamitin para sa pagpapatunay ng mga gumagamit. Ang mga ito ay isang pag-cache module kung gusto mong ipatupad isang uri ng pag-cache likod ng pagtatapos upang gawing mas mabilis at watnat ang application trabaho. Kailangan namin upang paganahin ang database at ang mga module ORM, dahil tulad ng sinabi ko, ginagamit namin ang database, malinaw naman, at kailangan din namin upang paganahin ang module ORM, dahil gusto naming magkaroon ng dagdag na pag-andar, na kung saan ay mabait sa mayroon. Lahat ng kailangan kong gawin ay uncomment mga 2 linya, at ngayon kung i-refresh ko, ito ay nagbigay sa akin ng isa pang error. Sinasabi nito, "Hindi nahanap ang Class Model_Post." Ngayon ito ay isang mahusay na problema na magkaroon. Ni makita Hayaan. Gawin itong pampubliko. Hindi. I-hold on. Oh, mahal. Hindi ko alam kung bakit hindi ito magagawang makita na. Iyan ay talagang kakaiba. Mayroon akong class na ito dito mismo. Hulaan ko na maaaring mayroon ako upang - oh. Ako kaya pipi. Nakalimutan ko bang magdagdag ng tag PHP. Iyon ang dahilan kung bakit. Ngayon Mayroon akong upang i-undo na 1 pagbabago ko lang ginawa. Okay. May pumunta namin. Iyon ay talagang walang isip. Hindi ko magkaroon ng isang pambungad na tag na PHP. Ngunit bilang maaari mong makita, ngayon ito ay gumagana ng maayos, tama? Mayroon kaming 1 post. Grabbed namin ang unang post, at ngayon ay naka-print na namin ang katawan nito. Mahusay. Hindi kapani-paniwala. Ang anumang mga katanungan sa ngayon? Nope? Ang anumang mga katanungan? Okay, sa gayon nilikha lamang namin ang modelo post, napaka basic, at kami ay pagpunta sa magdagdag ng ilang mga pag-andar sa susunod. Maaari naming idagdag validations at pag-filter. Validations ay isa sa mga bagay na Framework na malutas ang para sa iyo talaga ito, talagang mahusay, at hindi ko sa tingin mo ay nagkaroon ng guys na gawin ito para sa iyong CS50 pset, ngunit kung gagawin mo web development para sa iyong huling proyekto, malamang ka ng pagpunta sa nais na gawin ang ilang mga uri ng pagpapatunay, hindi pagkakaroon ng tulad ng blangko ang mga user name, siguro nagkakaroon ng isang password na may hindi bababa sa ilang mga haba, mga bagay tulad na. At ito ay talagang mahirap upang ipatupad ang mga bagay na ito sa pamamagitan ng ating sarili, at halos bawat solong web framework gumagana ito para sa iyo at nagpapahintulot sa iyo na gawin ito sa isang napaka-malinis na paraan. At ang modelo ay kung saan mo karaniwang ipahayag ang mga panuntunan sa pagpapatunay, dahil na pagpapatunay kung ang isang modelo ay may-bisa o hindi. Ngunit para sa ngayon, ipinapadala namin ng pagpunta sa ilagay na sa ngayon, at sa ngayon ay pagpunta naming gumawa sa isa pang bahagi, at kami ay pagpunta sa subukan at gumawa ng isang bagong view na naglilista ng lahat ng mga post. Ang mga hakbang na kasangkot sa pagsasagawa ng isang bagong aksyon para sa paglilista ng lahat ng mga post ay upang grab isang listahan ng lahat ng mga post at pagkatapos ay i-render ang listahan ng lahat ng mga post sa pamamagitan ng isang view. Kanan dito, sa kabutihang-palad sapat, na grabbed namin ang lahat ng mga post gamit ang unang linya, ang hanapin ang lahat ng pag-andar, at ngayon kung ano kami ay pagpunta sa gawin ay sa ngayon Na ako ay direkta sa pagtatakda ng katawan ng tugon sa pamamagitan ng pagpasa sa string, ngunit ngayon ay nais ko bang gamitin ang isang view, at ang pagkakaiba sa pagitan ng tanawin at ginagawa ito lamang ay may tanawin ko maaaring magkaroon ng gandang, malaki template na HTML, at kung ano ang maaari kong gawin ay pumasa ito sa ilang mga variable at pagkatapos ay awtomatikong panahanan ng mga tao sa view ng template nito paggamit ng mga variable. Ano kukunin ko na gawin ay kukunin ko na lumikha ng isang bagong view, at kukunin ko na pangalanan ang view ng isang bagay tulad ng "blog / index," at pupuntahan ko talaga isailalim ito - oh, ano ang aking pagsusulat? Ang aking utak ay sa ibang lugar. Pupunta ako sa isailalim ang mga post na variable sa view, kaya na paraan ang may access sa post na ito variable sa view. At kaya ngayon ay kailangan ko upang lumikha ng view na ito, kaya dito mayroon kaming folder na ito na tinatawag na "Views," at una sa lahat, pupuntahan ko upang lumikha ng isang bagong folder sa ilalim na tinatawag na "Blog." Ito ay maganda. Sa ganoong paraan maaari kaming magkaroon ng magandang hierarchy para sa aming mga tanawin. At pagkatapos ay ako pupunta upang lumikha ng isa pang file sa doon na tinatawag na "index.php." Kahanga-hanga. Talaga, magkaroon ng parehong mga ito dito ipaalam. Paggawa ng isang view ng file ay marahil ang pinakasimpleng bahagi ng lahat ng ito, at ang mga ito ay marahil bagay na ikaw ay isa nang alam. Kami ay pagpunta sa gawin talagang simple ang isang bagay, simulan na nagsasabi, "Aking listahan ng mga post sa blog." Pagkatapos ay maaari naming pumunta sa pamamagitan ng, at maaari naming umulit sa pamamagitan ng mga post array, grab bawat solong post at sabihin ang isang bagay tulad ng - siguro magdagdag ng isang linya at pagkatapos ay i-print ang may-akda at ang katawan. Iyon magkaroon ng kahulugan sa ngayon? At ni makita kung ito gumagana ipaalam. Walang bagay ang nangyari. Nagtataka ko kung bakit. Oh, Naiwan ako 1 na hakbang. Bihirang-ulok ng akin. Lumikha ako ng view, ngunit hindi ako nag-set ang view bilang tugon, kaya kailangan mo lang gawin 1 pang bagay. Mayroon kang gawin "ang tugon na ito body" at itakda ito upang maging ang view. May pumunta namin. Mayroon kaming ang aming mga heading, at pagkatapos ay mayroon kaming isang post, at para lamang sa mga kicks magpasok ng isa pang post, sabihin upang maaari naming makita ang listahan. At ipasok ang mga 2 mga post, at ngayon kung i-refresh ang pahina, makita namin ang lahat ng mga post na ito dito. Na gumawa ba ng kahulugan sa ngayon? Oo, isang katanungan? Oh, okay. Tulad ng iyong nakikita, ang nagawa naming upang paghiwalayin ang lahat ng mga code out sa iba't ibang mga seksyon, at pagkatapos ay maaari mong makita ito ay pinaka-malinaw na kasama ang code view. Dito ang file na ito na kumakatawan sa view, pinahahalagahan lamang ito tungkol sa kumakatawan sa data, pagpapakita ng data. Ito ay makakakuha ng pumasa sa isang uri ng data, at ang lahat ng ginagawa nito ay magpapakita lamang ito sa iyo. Sa lahat ng iba pang mga bahagi ng iyong code, hindi mo na kailangang mag-alala tungkol sa alinman sa mga iyon, at katulad, ang iyong pagtingin code ay hindi kailangang mag-alala tungkol sa anumang bagay paano i-access ang database at iba pa at iba pa, na kung saan ay talagang mahusay at gumagawa ng iyong code nang higit pa maintainable marami. Tulad ng sinabi ko, mga tanawin, handa dynamic na in na sila ito ay ang 1 file, ngunit nais ito ay bubuo ng iba't ibang mga view batay sa mga variable na aktwal mong pumasa sa, at tangi sa roon, mayroong maraming iba't ibang mga pag-andar lingkod na maaari mong gamitin upang makatulong sa iyo na isulat ang iyong code mas mabilis, kung saan kukunin ko na maipakita sa iyo sa isang segundo lamang. Oo. [Mag-aaral] Kaya $ 0 ay isang controller, tama? Iyon ikalawang bagay. Ang tanong ay ay $ 0 isang controller? 0 $ ay isang variable na nilikha ko dito mismo. Nilikha ang unang ako ng view. Itinalaga ko ito sa ilang mga variable. Pagkatapos ay pumasa sa ko ito sa ito function, itakda ito bilang katawan ng tugon. Ba na magkaroon ng kahulugan? [Mag-aaral] Kaya ay tanaw :: pabrika, ay tanawin tulad ng isang klase o isang library [hindi marinig] pabrika ng function? Ang tanong ay tungkol sa pagtingin :: factory function, at isa lamang ito ng ilang higit object-oriented programming talaga. Tingnan ang klase view, at mayroon itong isang pamamaraan na tinatawag na "Pabrika," at iyon ang isang paraan upang grab ang mga bagay na may pangalan na "blog / index." At na ang ilang higit pang mga object-oriented programming bagay-bagay na hindi ako pagpunta sa pumunta sa dito masyadong maraming. Ngayon malinaw naman, gusto naming lumikha ng mga bagong post, ngunit hindi namin nais na magkaroon upang gawin ito sa pamamagitan ng isang database, kaya kami ay pagpunta upang lumikha ng isang bagong aksyon para sa paglikha ng isang bagong post, at doon ay isang pulutong ng mga bagay-bagay na mayroon kami na gawin. Ang unang bagay na kami ay pagpunta sa gawin - pagharap sa isang bagay ng mga bagay na ito ng isa-isa ipaalam. Ang unang bagay na gagawin namin ay mayroon kaming upang lumikha ng isang form para sa pagpasok ng isang bagong post, ngunit ako pupunta din upang idagdag muna ang isang bagong aksyon, kaya ang pagdadagdag ng isang bagong aksyon ay kasing dali ng pagdagdag ng isang bagong pag-andar sa iyong controller, at sa ngayon pupuntahan ko gawin ang isang bagay napaka basic, grab lamang ang view na ito at i-post ito, ipapakita lamang ito para sa iyo. At pagkatapos ngayon ako pupunta upang lumikha ng isang bagong view ng file, at ako ng pagpunta sa simulan ang pagsusulat ng ilang mga bagay-bagay. Ano ang maganda tungkol sa Kohana ay na nagbibigay sila ng isang maraming iba't ibang mga pag-andar lingkod para sa iyo na magsulat ng view ng code nang mas madali, at ng 1 ng mga lingkod-andar o lingkod module ay sa paligid ng pagsusulat ng mga form. Para sa pagsusulat ng mga form, hindi ko talaga mayroon upang direktang sumulat ng anumang HTML sarili ko. Ikaw guys nagsulat ng mga form ng HTML. Alam mo kung paano ito ay maaaring maging talagang, talagang masakit at masalimuot na magsulat ng mga form. Ito ay hindi masaya, kaya sa kabutihang-palad, maaari naming talaga magsulat ng isang form gamit ang Kohana ni bumuo lingkod function upang gawin ito para sa amin. Kami ay pagpunta sa isa lamang magkaroon ng mga patlang para sa bawat solong bagay na mayroon kami, kaya isa para sa mga may-akda at isa para sa mga katawan. Kami ay pagpunta sa may isang label, at kami ay pagpunta sa magkaroon ng isang pag-input. At pagkatapos ay sa wakas, kami ay pagpunta sa magkaroon ng isang pagsusumite. At bilang maaari mong makita, ito ay mas mas malinis na magsulat kaysa sa lahat na walang kaayusan ng HTML, na kung saan ay uri ng magaling. Ipinagkaloob, mayroong iba pang mga Framework web page na mayroong ito kahit na mas malinis kaysa doon, ngunit hindi bababa sa ito ay mas mahusay kaysa sa pagsusulat sa HTML sa iyong sarili. Kahanga-hanga, kaya ito ay kung ano ang nakikita mo. Iyon uri ng marumi, kaya ako pupunta upang magdagdag ng isang line break doon upang gawing na tumingin ng kaunti nicer. Well, siyempre, tinitingnan nito pa rin talaga ito, ganap na hindi maayos, ngunit lamang namin nakatuon ka sa ang pag-andar para sa ngayon at hindi sa aesthetics. Walang oras na magawa ang lahat. At bilang maaari mong makita, ngayon ay mayroon kaming isang napaka-basic na form, na kung saan ay uri ng magaling. Ang code Gusto ko sabihin ay mas malinis kaysa sinusubukang magsulat ng isang HTML form ang iyong sarili, kaya na magaling. Ano ang susunod? Ngayon kailangan namin upang gawin ang mga bagay na may aksyon. Karaniwan kapag sinulat mo sa mga form ng HTML, mayroon kang upang sabihin dito kung saan ito ng pagpunta sa isumite ang form na ito upang. Sa pamamagitan ng default sa karamihan ng mga Framework web, ito na isinusumite sa eksaktong parehong URL, kaya ang mga bagay ay, kung magpadala sa iyo ng isang kahilingan upang get / blog / bago, Dapat itong ipakita sa iyo ang form, ngunit kung magpadala sa iyo ng isang kahilingan sa post na ito sa / blog / bagong may data, dapat itong aktwal na subukan upang i-save ang post na at gawin ang isang bagay na may ito. Ano kami ay pagpunta sa gawin ay isa lamang ang mayroon kami upang gawin upang masuri kung ito ay isang kahilingan sa post na ito o ng isang kahilingan get ay ang suriin kung ano ang mga variable post na maaari mong itakda. At kung ang post na variable ay naka-set, at pagkatapos ay ipinapadala namin ng pagpunta sa subukan at lumikha ng isang bagong post. Muli, gawin lang namin ito, at na lumilikha ng isang bagong post, at literal na kami ng pagpunta sa itakda ang mga patlang nito na tulad nito, at pagkatapos kami ay pagpunta sa i-save ito. At pagkatapos ay ako pupunta upang i-redirect sa pahina ng index sa gayon ay maaari nilang makita muli ang aming listahan ng mga post. Subukan na Hayaan. Sasabihin kong, "Brandon," at pagkatapos ay isumite ang post na ito, at kung ang lahat ay tumatakbo nang maayos, bilang maaari mong makita, ito redirect ako sa pahina ng index, at kung mag-scroll ko hanggang sa ibaba, mayroon kaming isang bagong ipinasok na post. Yay! Oo, pinag-uusapan. [Mag-aaral] Paano kung si na iyong ipinasok sa eksaktong parehong bagay na iyong ipinasok bago? Suriin ba ito upang matiyak na hindi mo pa nadoble ang parehong pagsusumite? Mag-default, hindi, dahil sa pamamagitan ng default - Paumanhin, ang tanong ay kung ang iyong ipinasok sa eksaktong parehong data sa form at isumite ang na, ito ay daan sa iyo upang magpasok ng isang dobleng mga bagay, isang duplicate entry, mahalagang? Sa ngayon, oo, ito ay magpapahintulot sa inyo na gawin iyon, dahil sa mga database ng ito ay ganap na ganap wastong upang magkaroon ng ganap na duplicate na mga hilera, ngunit kung iyon ang isang alalahanin, pagkatapos ay maaari kang magdagdag ng validations, halimbawa, upang matiyak na kung ito ang parehong eksaktong bilang isang bagay na ay umiiral na, pagkatapos ay sabihin na ito ay isang di-wastong bagay, at pagkatapos ay maaari mo ring tukuyin ang iyong mensahe ng error at sabihing, "Hindi wastong dahil ito ay umiiral na" o isang bagay tulad na. Ngunit sa kasong ito, maaari ba akong lumikha lamang ng isang bagay duplicate. Ngayon subukan ipaalam at magdagdag ng ilang mga validations. Ang problema sa karapatang ito ngayon ay na Kaya kong literal na magsumite ng isang ganap na blangko ang post na ito. Maaari ko bang i-click ang pindutan na ito sa ngayon, at doon kami pumunta. Hindi mo maaaring talagang makita ito, ngunit dagdag na line na ito dito ay nagpapahiwatig na ako Literal na magkaroon ng isang bagong post. Ito lamang ay may isang blangko ang may-akda at isang blangko ang katawan, at hindi namin nais na payagan ang mga tao upang gawin iyon. Ito ay kung saan ay pagpapatunay in Ang maaari kong pumunta sa aking modelo sa bagay, at ngayon ang maaari kong magdagdag ng bagong pag-andar na tumutukoy ano ang pagpapatotoo ng panuntunan ang dapat kong idagdag sa modelong ito upang matiyak na ito ay may-bisa o upang tukuyin kung ano ang ibig sabihin na maging isang wastong post na ito? At gusto kong sabihin ito ay lamang ng isang wastong post na kung kapwa may-akda at katawan ay hindi blangko, at ito ay kung paano ito gawin sa Kohana. Lumilikha ka ng bagong pag-andar na tinatawag na "Mga Panuntunan," at pagkatapos ay bumalik ka talaga isang nag-uugnay array na tumutukoy sa mga panuntunan ng pagpapatunay para sa bagay na ito. Kami ay pagpunta upang ibalik ang array, at pagkatapos ay kung ano kami ay pagpunta sa gawin ay sabihin ang "may-akda," ito ang papunta sa isang array, kung saan ang papunta sa isa pang array na tinatawag na "hindi walang laman." At pagkatapos ay ako pupunta magsabi ng "katawan." Okay, at ang syntax para sa ito at istraktura para sa maaaring tumingin ng kaunti pahirap at medyo kumplikado. Kung binabasa mo ang dokumentasyon, ito ay medyo tapat upang malaman kung, Ngunit mahalagang ito ay kung ano ang kailangan mong gawin upang tukuyin ilang mga panuntunan sa pagpapatunay, at mayroong maraming iba't ibang mga panuntunan na Kohana ay magbibigay sa iyo ng libre, tulad ng maaari kang magdagdag ng mga panuntunan upang sabihin Dapat ito ay hindi bababa sa ito sa haba. Siguro ito ay dapat na numeric. Siguro ito ay dapat na alpha numeric. Siguro ito ay dapat na hindi hihigit sa haba ito, kaya sa at iba pa. May ng maraming iba't ibang mga panuntunan na nagbibigay Kohana para sa iyo, at maaari kang pumunta sa kanilang website, tingnan ang dokumentasyon, at maaari mong makita ang lahat ng iba't ibang mga bagay na maaari mong gawin. Ngunit ito ay ang lahat ng kailangan kong gawin, at ngayon sabihin makita kung ano ang mangyayari kung magsumite ako ng blangkong post. Ano ang mangyayari? Oh, walang, nakakatanggap ako ng error. Nakakuha ako ng pagbubukod sa pagpapatunay. Well, ito ay mabuti. Sinabi Nag sa akin na ang aking modelo ay hindi wasto, ngunit hindi ko nais upang ipakita ng pagbubukod sa aking mga user kapag sinubukan nila upang magsumite ng di-wastong isang bagay, i-right? Gusto kong bigyan sila ng isang uri ng friendlier mensahe ng error kapag ang isang bagay napupunta mali. Ano kami ay pagpunta sa gawin ay kami ay pagpunta sa balutin ang lahat sa isang try catch loop. Talaga, tingin ko ito ang din ng isang bagay na hindi mo pa natutunan sa CS50, dahil C, ang programming language C, Walang mga pagbubukod, ngunit halos bawat solong iba pang mga wika May mga eksepsiyon, kaya talaga ito, talagang sa madaling sabi, isang pagbubukod ay isang bagay na ang isang piraso ng code maaari magtapon ng pagbubukod kapag ang isang bagay napupunta mali, ngunit pagkatapos ay marahil ilang iba pang mga piraso ng code mas mataas up maaabutan pagbubukod na iyon at gawin ang isang bagay na may ito. Halimbawa, sa kasong ito, ang piraso ng code na sinusubukang i-save ang isang modelo, ito na napatunayan ang modelo, at kung sinasabi nito, "Okay, ang model na ito ay hindi wasto," ito ang nangyayari upang ihagis ng pagbubukod, at ito ay uri ng katumbas ng sa C maaari mong magbalik ng -1 o isang bagay tulad na. At pagkatapos ay para sa akin, ito function, ang aking code sa mas mataas na antas, ang maaari kong subukan at mahuli pagbubukod na at isa lamang sabihing, "Okay, kung mahuli ko ang mga pagbubukod, kung ano ako pagpunta sa gawin?" O maaari ba akong pumili ng hindi upang mahuli ang pagbubukod na iyon at ipaalam sa mas mataas na up sa isang tao sumakay ng pagbubukod, o kung walang saysay na tao catches ito, pagkatapos ay ang buong programa nag-crash at sabi, "May nangyaring mali, at hindi ko maaaring panghawakan ito." Ngunit ano ang ginagawa namin ay mo balutin ng isang piraso ng code sa isang try block, at pagkatapos ay idagdag mo din ng isang bagay na tinatawag na isang catch block, kung saan ay ang uri ng code na subukan at mahuli ang mga pagbubukod na maaaring mangyari. At kaya kung mahuli ko ang partikular na pagbubukod o pagbubukod pagpapawalang-bisa, pagkatapos ay kung ano ako ng pagpunta sa gawin ay Pupunta ako upang itakda ang mga error - sa tingin ko na kung paano ko ito gagawin - at pupuntahan ko upang i-set ang mga error sa ilang mga bagay. At pagkatapos ay kung ano pupuntahan ko lang gawin ay kung ito ay umabot sa pagbubukod na ito, hindi ito pagpunta upang i-redirect, at kung hindi nito redirect, ito ay pagpunta sa dumating out sa kung blog at pindutin ang bagong blog na ito /, na kung saan ay nais gusto kong gawin. Kung mayroong isang error, pagkatapos Gusto kong bumalik sa form na at magpakita ng mga error. Ngayon kung ano ang gusto kong gawin ay gusto kong pumasa sa mga error sa view. Okay, sa tingin ko Mayroon akong view dito mismo, at talaga gusto kong ipakita ang mga error kung umiiral ang mga ito. Bago kong isulat ang HTML para sa na, ako pagpunta sa talagang mabilis ipakita sa iyo kung ano ang istraktura ng mga error na ito nais na variable na tingin, at ito ay isang mahusay na kasanayan sa pangkalahatan. Ang isang pulutong ng beses na makakuha ka ng isang bagay pabalik mula sa ilang mga paraan, ang ilang mga pag-andar sa web framework, at hindi mo alam kung ano ang hitsura ng variable tulad ng, kaya hindi mo alam kung paano gumagana sa mga ito. Pupunta ako sa gumamit ng isang pamamaraan sa pag-print r sa isa lamang i-print ito. At bilang maaari mong makita, sinasabi nito sa akin ito ay isang associate array, at mayroon kang isang susi, may-akda, mga punto upang ang string na ito, may-akda ay hindi dapat walang laman, at isa pang key, katawan, mga punto sa isa pang string, katawan ay hindi dapat walang laman. Ako ay tulad, okay, cool. Pagkatapos ay maaari kong umulit sa pamamagitan ng array at i-print ang bawat solong mensahe. Ito ay isa lamang tulad ng isang nag-uugnay array na may isang bungkos ng mga mensahe. Ano pupuntahan ko lang gawin ay "kung error," at ako pupunta upang lumikha ng isang unordered listahan, at pupuntahan ko umulit sa pamamagitan ng lahat ng mga error. At ito, at ngayon ako pagpunta sa subukan ang pagsusumite ng ito muli, at sabihin makita kung ano ang nakukuha namin. Ngayon makuha namin ito magaling listahan ng mga error, at ito ay pa rin medyo mainit ang ulo, ngunit ito nang walang alinlangan maaaring ma-format upang tumingin maganda, ngunit ang pangunahing ideya ay lamang sa loob ng ilang mga linya ng code, nagawa naming patunayan ang aming mga modelo, tiyakin na ang ilang mga patlang ay hindi walang laman, at kung may nangyaring mali, pagkatapos ay bumalik sa isang uri ng error na mensahe Kaya kong pagkatapos ay ipakita pabalik sa user. Maaari mo ring ipasadya ang iyong pagpapatunay sa gayon ay maaari mong aktwal na magkaroon ng isang mensahe ng error na mas tukoy sa iyong application o isang bagay tulad na. Ang lahat ng iyon ay sa pangkalahatan ay nako-customize na. Sa kasamaang palad, kami ay nauubusan ng oras, kaya pupuntahan ko mayroon upang i-cut-off ang live na coding session dito. Mayroong isang bungkos ng iba pang mga tampok na gusto ko upang ipakita para sa iyo sa halimbawang ito. Halimbawa, maaari kang magdagdag ng mga template sa iyong site, kaya siguro mayroong isang uri ng HTML code na gusto mong ilapat sa bawat solong pahina sa iyong site, at sa halip ng pag-paste na sa bawat solong view ng file na mayroon ka, na kung saan malinaw naman ay magiging isang masamang kaugalian, Maaari mo talaga tukuyin ang mga template na ito, at pagkatapos ay sa iyong controller sabihing, "Okay, ako gamit ang template na ito." "Nakarating na sa lahat ng aking mga tanawin gamitin ang template na ito." At ang isa huling bagay na gusto ko upang ipakita sa iyo pati na rin na hindi kami magkaroon ng panahon para sa ay scripting cross-site, at isa lamang sa tingin ko mo guys na marahil nakikita sa CS50 - Sa tingin ko marahil usapan David Malan tungkol sa kung paano maaari mong karaniwang mag-iniksyon JavaScript code sa - na-usapan mo tungkol dito? Siguro? Siguro hindi? Ngunit ng maraming beses na maaari mong mag-iniksyon ng nakahahamak na JavaScript code sa database ng isang tao, at kung hindi sila makatakas na maayos, pagkatapos ay kapag ipakita nila ang data na iyon pabalik sa gumagamit, pagkatapos ay maaari itong tumakbo ang ilang mga uri ng mga random na JavaScript code ay hindi mo nais na mangyayari, at ako ay pagpunta upang ipakita kung paano mo gusto gawin iyon sa loob Kohana. Ito ay talagang talaga ito, talagang madali. Maaari kong gawin ito sa ngayon sa loob ng 2 segundo literal. Ang kailangan mo lang gawin ay isa lamang balutin mga bagay na ito sa bagay na ito na tinatawag na entity sa HTML. At iyon ay awtomatikong escape nang maayos ang lahat ng mga character at tiyakin na hindi mo makuha ang problemang ito. [Mag-aaral] na-spell mo ang unang pagsubok nang hindi tama. [Brandon Liu] Oh, oops. Okay, na ang lahat ay nagkaroon ako ibahagi sa iyo para sa araw na ito. Ang mga slide ay pagpunta sa-post, ngunit ang mga ito ay sa pangkalahatan ang tanging mapagkukunan ay dapat talagang kailangan mo upang makapagsimula sa Kohana. Maaari kang pumunta sa website. Ang mga ito ay isang gabay sa gumagamit, at sila ay mayroon din ng isang API explorer. Maaari naming galugarin ang lahat ng iba't ibang mga pag-andar at lingkod-andar mayroon sila para sa iyo. Sa pangkalahatan ay mayroon silang sapat na impormasyon sa website na maaari mong gamitin upang makapagsimula at makakuha ng pagpunta sa Kohana. May mga hindi na maraming mga tutorial, sa palagay ko, para sa Kohana, sa labas ng kung ano ang mayroon sila sa website dito, kaya ito ay marahil ang iyong pinakamahusay na mapagpipilian. Ngunit kung gusto mong pumunta sa web framework at hindi mo nais na magkaroon sa pick up ng isang bagong wika, at gusto mo ang isang bagay na medyo magaan ang timbang at may isang madaling kurba sa pagkatuto, Imumungkahi ko talagang Kohana. Iyon ay marahil ang pinakamahusay na nag-aalok para sa iyon. Ang nakakatawa bagay, bagaman, ay kung kami ay gumagamit ng Ruby sa daang-bakal, sana Ginagaya namin kung ano ang ginawa namin lamang at marahil higit pa sa ilalim ng 3 minuto. Walang magbiro, ngunit pag-aaral ng Ruby sa daang-bakal tumatagal ng maraming mas mahaba kaysa sa nais itong tumagal upang matuto nang Kohana. Ito ay isa lamang ang iyong mga pagpipilian sa kung ano ang gusto mong piliin na matuto, ngunit kung nais mong makakuha ng umaandar na mabilis, Kohana ay talagang isang napaka mahusay na pagpili. Anumang huling katanungan bago kami magtapos? Oo. [Mag-aaral] Paano mo ire namin na isama na sa isang CSS framework tulad ng gumagamit ka kapag ikaw ay nagtuturo? Ang tanong ay kung paano nais na isama namin na may CSS framework? Ano ang gusto namin marahil gawin ay gusto marahil kami isama isang bagong folder kung saan nais naming dump lahat ng aming mga CSS file, at pagkatapos ay nais naming ring magdagdag ng isang bagong template. Sa ang template na nais naming isama ang mga CSS file upang matiyak na ito ay naka-reference sa bawat solong pahina, at pagkatapos ay kapag aktwal na iyong isinusulat HTML, mong idagdag lamang ang naaangkop na mga klase at watnat, at halimbawa, kapag gumagamit ka ng isang bagay tulad ng form lingkod ng function, maaari kang magdagdag ng higit pang mga parameter pagkatapos upang tukuyin kung ano ang mga klase na gusto mong i-attach sa iba't-ibang mga bagay kaya maaari nilang ito estilo nang maayos, at iyon ang isa lamang kung paano mo pumunta. Anumang iba pang mga katanungan? Kahanga-hanga. Salamat sa iyo para sa iyong oras, at salamat sa iyo para sa darating na. Hindi ako ay pagpunta sa magdagdag ng Sobra pa man, ngunit 1 talaga mabilis na bagay ay wala kaming isang link upang ang form. Talagang pipi. Sabihin magdagdag ng isang - talagang sa view, blog, index, magdagdag ng link na napupunta sa mga bagong pahina ng sabihin talagang mabilis, sa pahina kung saan maaari naming magpasok ng isang bagong post. Kami ay pagpunta sa gawin ito. Ano ang maganda ay may ito buong grupo ng mga HTML lingkod function na gawin ang iba't ibang bagay na para sa iyo, kaya mayroon ka nang Nakita ang entity gumana dito, ngunit sila ay mayroon ding isang function na tinatawag na "angkla," kung saan maaari mong i-type sa blog / bagong at sabihing, "Mag-post ng isang bagong blog." At ito ay magdudulot na link para sa iyo, at ito ay anyong walang kuwenta talaga ang gagawin, ngunit ito ay maganda, dahil ipagpalagay na ikaw ay ilipat ang iyong website mula sa 1 domain sa isa pang. At kung sumulat si out mo lang ang mga URL sa iyong sarili, pagkatapos ay magkakaroon ka ng upang baguhin ang lahat ng mga URL. O siguro ay inilipat mo ito mula sa 1 subfolder sa isa pang subfolder. Gusto ninyong magpalit ng lahat ng mga URL na iyon sa iyong sarili, at iyon ang hindi masaya. Maaari mong gamitin ang mga anchor dito mismo, at maaari mong baguhin ang domain o ang prefix subfolder sa configuration file nang isang beses, at pagkatapos ay ilapat ito na sa lahat ng dako, at ito ay, muli, isang mahusay na halimbawa ng huwag ulitin ang iyong sarili, drying iyong code out. Saanman ka paulit-ulit ang iyong sarili, subukan at i-extract sa isang uri ng configuration file o sa ibang pag-andar at ito mahawakan na para sa iyo. At ang napaka-huling bagay na nais kong ipakita sa iyo noon ay ipagpalagay na kami ay pabalik sa post na ito, at ako ay binubuo ng ilang mga talagang mahaba sanaysay, ngunit Nakalimutan ko ang upang isama ang aking mga may-akda. Ngayon kapag nag-click ako "Isumite Post," Nawala ko lang ang lahat. Walang! Talagang malungkot. Kaya paano mo haharapin ang mga iyon? Ito ay kung ano ang ginagawa namin. Ano ang ginagawa namin ay dito para sa mga pag-input at text area mga pag-andar, kung isama kami ng isang pangalawang parameter, pagkatapos ay ang halaga ng na pangalawang parameter ay magiging kung ano ang field ay pagpunta sa ma-una populated na may. Ano naming gawin ay sa aming blog controller, maaari kaming panagutin ang isa pang variable. Tumawag ito "halaga" siguro. At pumasa sa post na array, literal. Nangangahulugan iyon na kung Nabigo ang pagpapatunay, pumasa sa akin ang post na array na isinumite ko mula sa huling kahilingan, at na paraan na maari kong gamitin ang mga halaga mula sa aking huling pagsumite sa repopulate ang mga patlang. Ngayon ay maaari kong gawin ang isang bagay tulad na mga halaga sa may-akda at mga halaga katawan, at na paraan ngayon kung gagawin ko ang ilang mga random na mga bagay-bagay at i-click ang "Isumite Post," pagkatapos ito ay mananatili doon. Ngunit kami ay pagpunta upang tumakbo sa isa pang problema. Iyon ay gumagana, ngunit kung pumunta ako sa pahina sa pinakadulo unang pagkakataon, ito ang nangyayari pag-crash, at iyon ay dahil sa napaka-unang pagkakataon pumunta kami sa pahina, ang post na ito variable ay hindi pa tinukoy. Ito ay walang bisa. Hindi ito umiiral. At kung ano ang gusto naming sabihin ay kung umiiral ang key na ito, pagkatapos ay ibalik ang value ng array, ngunit kung ang key na ay hindi umiiral, pagkatapos ay bumalik ng blangkong string. Iyan ang pag-andar gusto namin dito. Gusto naming suriin kung ang key ay naroroon bago sinusubukang i-access ang array, at sa kabutihang-palad sapat, Binibigyan din Kohana sa amin ng isang lingkod-andar para sa mga iyon. Ang mga ito ay ang buong suite ng mga function sa ilalim ng pangalang ARR, maikli para sa array, at mayroon silang 1 function na tinatawag na "makakuha ng," at maaari mong pumasa sa array, at maaari mong pumasa sa pangalan ng key. Pagkatapos talaga kung ano ito ay gawin ay ito ay subukan upang makakuha ng na key, ngunit kung na key ay hindi umiiral sa array, pagkatapos ay ibalik ito blangko, o maaari naming ring tukuyin ang isang default, naniniwala ako, na kung saan ay magaling. Ngayon kung gagawin naming muli ang parehong bagay, pagkatapos ay makita mo na ngayon gumagana ito sa unang pagkakataon sa paligid, at muli, kung nag-type namin sa ilang mga random na mga bagay-bagay at subukan at isumite, pagkatapos ito ay mananatili doon. At hulaan ko ang maaari kong ring ipakita sa iyo kung paano magdagdag ng isang template talagang mabilis. Ano ang maaari naming gawin muna ay kung maaari naming magdagdag ng bagong pagtingin na tinatawag na "template.php" sa loob ng Views folder, at kung ano pupuntahan ko lang gawin ay pupuntahan ko i-print ang isang bagay na tinatawag na "nilalaman," na kung saan ay pagpunta sa maging ang aking mga pangunahing nilalaman. At siguro sa pinakailalim pupuntahan ko idagdag, sabihin nating, copyright. [Hindi marinig tanong mag-aaral] [Brandon Liu] Marahil, ito ay isang napakabilis basic template na nais ko bang gamitin ang. Gusto kong magkaroon ng isang folder sa aking karapatang-kopya sa bawat solong pahina, at ngayon kung ano pupuntahan ko gawin sa loob ng aking controller ay ngayon sa halip na nagsasabi, "ay umaabot Controller" Pupunta ako sa sabihing, "ay umaabot Controller_Template," at ngayon sa halip na nagsasabi, "tugon ng katawan ay katumbas ng view na ito," Pupunta ako sa sabihing, "ang nilalamang ito template ay -" at sa tingin ko - ko ilalagay ng patas na pag-sign? Nakalimutan ko. Oo, naisip ko na kaya. At ngayon ko ise-set na variable na nilalaman upang pumatas sa view. Ang maaari kong gawin ang parehong dito. At ngayon kung i-refresh ko, maaari mong makita ngayon ang copyright ay idinagdag doon, at gumawa lamang ng ilang mga random post, at pagkatapos ay, muli, dapat mong makita na ang copyright ay sa pinakadulo ibaba ng pahina. Mahusay. Iyon lang ang nais kong ipakita sa iyo guys. [Palakpakan] Ang anumang mga katanungan? [CS50.TV]