[Семинар] [Кохана: Лагана ПХП Фрамеворк] [Брендон Лиу] [Универзитет Харвард] [Ово је ЦС50.] [ЦС50.ТВ] Здраво свима. Моје име је Брендон. Ја сам млађи овде на колеџу ради информатике, а данас ћемо говорити о Кохана, који је ПХП веб развојни оквир. Данас ће бити уживо кодирање семинар, па ја ћу провести у основи 5-10 минута објашњавајући шта је Кохана, а онда сам буквално ће направити супер једноставну блог за тебе овде буквално од нуле. Идемо да преузмете код са сајта кохана, и ми ћемо почети изградњу блог, и надам се да ће то бити врло поучно, јер ћете видети можда ћу можда направити неке грешке, и видећете ме опоравак од њих, или ћете видети мој мисаони процес као ја изгради кроз овај блог, и у међувремену, такође ћете се упознате са самим оквиром. Надам се да ће то бити врло поучно вежба. Прво, шта је тачно оквир? Ако сте узимајући ЦС50 до сада, ви сте стварно радили са било оквири још, и ствар је то. Вероватно сте урадили већ 1 Веб развој псет, и рецимо да наставите да се изгради сајтова и задржати изградњу сајтова. Ви ћете почети да приметити неколико ствари. Прва ствар коју ћете приметити је да сте вероватно радиш исте ствари изнова и изнова све време, ствари као што су чишћење корисничких улазних података, ствари као што су организовање датотеке на одређени начин. Друга ствар ћете такође вероватно приметити је да је ваш број може почети да постане веома, веома неуредан, и можете га оставити у нереду и само имају веома тешко одржавање је, или можете почети да градите Ваш код и чинећи га модуларни на одређени начин да га више одржив. Ово је место где веб оквири у основи ушла унутра Ови људи који су изградили много сајтова, рекли су, "Ми не треба да поновите то сваки пут када направите сајт." "Зашто не бисмо једноставно направити пакет који чини све ове ствари за вас сваки пут када желите да направите сајт? " И тако да када направите нови сајт, само фокусирати на шта тачно овај сајт је о. Не морате да поновите све различите конфигурације и раздвајање кодова и преписивање код да често морате да урадите када правите сајтова. Идеја је да оквир омогућава вам да напишете код вишег нивоа без потребе да бринете о детаљима нижег нивоа. Нижи ниво-детаљ може да буде нешто као баве чишћењем корисничких улазних података. То је нешто што не би требало да стварно треба да се бринете. Требало би да се фокусирају на оно што ваш веб расподела је заправо о. То елиминише много општенаменским кода. То је архитектура за ваш пројекат. Најпопуларнији би Модел-Виев-Цонтроллер, који ћу говорити о у секунди. И много пута ове оквири оличавају скуп поступака, правила, и најбоље праксе за вас да користите тако да када се усвоји веб оквир морате да напишете свој код на одређени начин, и то је углавном договорен скуп принципа од стране заједнице која је генерално прихваћена да буде добар начин писања кода. То чини ваш број више одржив, више употребљив, тако даље и тако даље. И на крају, ствар коју желим да нагласим о оквирима против библиотека је ово идеја о обртању контроле, а ствар је то. Разлика између библиотеке и оквир је да је са библиотеком Ви се и даље писање главног програма, и ти некако позивајући се на библиотеку и позивајући библиотеке да уради нешто за вас. Разлика између библиотеке и оквир је да оквир почиње са контролом, и она позива своју шифру, тако да можете да мислите о томе како - то је разлог зашто се зове оквир - оквир пружа овај оквир и структуру за свој код, и попуните рупе, и то ће постати још очигледније у секунди када видиш да почнем да пишем код у контексту оквира. Видећете да сам у попуњавању празнине, и оквир је врста контролише све покретне делове, и морам да стави комада на правим местима. Данас ћемо говорити о кохана, што је један од многих ПХП оквира. Постоје веб оквири, а постоје и оне у готово сваком језику, и Примам кохана јер Кохана је вероватно и генерално признат као најлакши ПХП оквир да покупи. То је највише лаган. Постоје они други вани који долазе са много, много више функција, али они имају тенденцију да буду теже да покупи. И на крају, Кохана користи МВЦ архитектуре. То је довољно лаган да буквално могу да направе пројекат овде право пред вашим очима, а можете прилично пратите прилично лако. Шта је МВЦ архитектура? То је скраћеница за Модел-Виев-Цонтроллер, а можда, ако мислите о коду си писао до сада за неке од ваших веб развојних псетс можда ћете моћи да видите неке од овога, али обично када почнете са писањем сложенији веб апликација, подела између ова 3 сегмента постаје све више и више евидентно. Ја изложио МВЦ овде некако као стека, и често ћете чути људи говоре о димњацима у веб развоју, а то је да илуструје идеју да сваки слој, свака компонента стварно покушава да само комуницирају између 2 остале компоненте. Неко приступа ваш сајт као клијент или претраживача. Они комуницирају са својим програмом кроз вид код. Поглед код интеракцији са контролером. Контролер интеракцију са моделом, и модел интерагује са СКЛ базом података. И нема Хоппинг између ако правилно писати свој код. Шта ове ствари ураде? Модел је у суштини део кода који се бави вашим подацима. Све што се бави базе података, са објектима које чувате, или преузимање те објекте у бази података, то је све руковати моделу. Можда имате објекте у бази података. Идемо да се створи модел који има везе са поруке, па после могу имати неке атрибуте на њега. Можете имати функције око чувања тих порука или преузимање поруке или филтрирањем поруке и тако даље и тако даље, и то је све код који се управља по моделу. Контролер је врста логике апликације, и много различитих ствари могу да иду у апликацији. Ако говоримо на други АПИ, који могу бити тамо где сте се баве са логиком апликације. Ако покушавате да се донесе у податке из више различитих модела и да их комбинујете на неки начин, да често може да буде вршено од стране контролера. На пример, на Фацебоок-у, ако неко пријатељ, онда можда да чин успостављања тог односа може да се уради од стране контролора. И на крају, поглед је код који се генерише оно што заиста видиш. Много пута мислим на ЦС50 псетс они стварно не ти момци подстичу да одвоје ове 3 ствари. Вероватно ћете имати ову велику, дугачку датотеку где на врху правите неки СКЛ упит и можда учинити неке прерада на подацима које преузето из базе података, а онда имате све ваше ХТМЛ на дну. И можда ћете наћи да док правите више и више страница да ћеш морати мало код понављања, а такође, ствар је ваш фајл добија заиста велики и дуг и постаје гломазан за управљање. Разлог зашто МВЦ је тако добро посматрати је за више разлога. Прва ствар је нешто што се зове одвајање од забринутости која је идеја да када имате - идеално 1 део кода треба да уради 1 ствар и да га стварно добро, а ви не би требало комбиновати делове кода који раде различите ствари. На пример, видели код модела и код, они стварно не морају да буду у вези. Они не морају да буду у истим фајловима, тако да када се, одвојите их тако да је лако за одржавање. Друга ствар је код поновну употребу. Можете пронаћи себе писања истог СКЛ упит или раде слични упити који се могу извађених у 1 функције, и то је идеја која стоји иза модела и контролера, имајући то у посебној функцији који можете поново користити у различитим местима у вашем пројекту. И на крају, то је везано за сушење свој код, или не се понављају, не понављам се. Ово је веома разумљиво у развоју. Кад год можете, ви не желите да поновите себи, јер ако се понови,  то је много скупље одржавање. Ако желите да промените 1 ствар, морате да га промените свуда, и то доводи до грешака, и то је страшно. Реду. Сва питања до сада око кохана уопште? Сјајно. Сада ћемо да зароне у живом кодирања седници, и надамо се све иде добро. Ја ћу да се изгради у основи овај сајт на једном од мојих удаљеним серверима, и тај начин ви можете такође погледајте сајт и приступите сајту, и окружење је бољи од мог Цонфигуред удаљену машину, јер је покренут Линук уместо ОС Кс. Ми смо буквално ће почети. КоханаФрамеворк.орг. Идем да преузмете код са сајта. Идем да копирате линк адресе, идите на мом серверу, преузмите, и ја ћу да га извуче. [Студентски] Шта је највећи можете направити текст? [Брендон Лију] Да ли је то боље? [Студентски] Да ли је то изводљиво? [Брендон Лију] Да, то је у реду. Ја скинути ЗИП фајл и да распаковане у директоријум зове Кохана, и ми ћемо да преименује тај ЦС50-кохана, и идемо унутра Страва. Овде можете видети гомилу различитих фајлова. Већина вас може игнорисати - Нећемо да идемо кроз сваки фајл који је у овде због наших временских ограничења, али генерално када инсталирате кохана, прва ствар коју урадите се ви идите у директоријум, и ви у основи ћемо урадити неке тестове и окружења ситница да проверите да ли ваш окружење исправно подешен да ради кохана и уверите се да је све у реду. Можете видети већина ствари прошло, али генерално увек наиђете на овај проблем 1 где се жали да неки директоријум нису подешени за упис, и да је због неких дозвола. Не знам колико сте ви момци научили о дозволама фајл у ЦС50, али ако то урадите веб развој, идете да наиђете на овом питању много. Идем да га уписив и ја мислим исто морам - тамо идемо. Ок, тако да сада можете видети све прошло, а сада ће вам рећи да преименујете датотеку инсталл.пхп. Идем да померите датотеку инсталл.пхп да инсталлед.пхп, и сад ако ја освежите, то ми даје неку грешку, а то је место где отклањање грешака долази унутра Ово је место где можете да видите шта се заправо ће се десити. Ствар је, по дефаулту, Кохана претпоставља да Ваш пројекат је у основном директоријуму вашег домена, тако да очекује да се на демо.брандонклиу.цом. Морамо да га рећи да је заправо у потфасцикли. То је у поддиректоријуму зове ЦС50 Кохана. Ствар је, то је погрешно тумачи ЦС50-кохана као нешто друго, што ћу да вам објасни у секунди. Али морам вам рећи да је то нешто што је и за очекивати. Оно што ћемо урадити је да ћемо ићи у овај фолдер зове боотстрап.пхп, који је фасцикла конфигурација где много различитих ствари су подешени. Ја отворим то горе. Онда можда једна од првих ствари које ћу урадити је да промените временску зону. И онда да видимо. Аха! Управо овде. Постоји гомила различитих конфигурационих изрека овде, али један тражим је ова ствар се зове база УРЛ адреса, и по дефаулту ја да га поставити на кохана, али ја ћу то да променим на ЦС50-кохана, и ја мислим да би требало да га поправи. Да, супер. Подразумевано, да види да је то ради, она каже, "Хелло Ворлд". Одакле је то дошло? Како смо добили до Хелло Ворлд? Где је тачно код који заправо то написао? Да бисте разумели да, ја ћу увести овај концепт назван рутирање. Прилично сви веб оквири имају концепт под називом рутирање, који је део софтвера који ће мап одређени УРЛ на одређени део кода у вашем оквира. На пример, ако имате неку УРЛ адресу и одете на неку УРЛ адресу као фоо.цом / блог / све онда шта оквир ће да уради - или бар оно што Кохана ће да уради - је да ће се наћи класу контролер блога, и то ће покренути функцију именован акцију све. Знам да говорим о класи и функцијама, и знам да ви нисте покривени класе и функције у ЦС50 још, али за сада, можете мислити часова само као групу функција, начин груписања функција заједно. То је заиста све што треба да знате. Сада, ако погледамо наше структури фасцикли, унутар фолдера апликације постоји друга фасцикла зове класе, и остали фолдери се зове контролер и модел. Ако погледате унутар фолдера Цонтроллер, видимо да постоји фајл под називом Добродошли, и можете видети овде је класа зове контролер Добродошли, и ту је функција зове Акција индекс, и оно што ради је она поставља тело свог одговора на Хелло Ворлд. То је место где се пише код. Друго питање је, добро, нисам ишао на бла, бла, бла, / добродошао / индекс. Како сам завршио овде? Па, то је само зато овде у дну наше боотстрап датотеке где смо поставили наше путеве можете видети да су они поставили неке подразумеване за вас. Подразумевана контролер је Добродошли. Подразумевана акција је индекс. Зато када смо ставили у ту ништа што аутоматски отишла у добродошлице контролер и индекс акција. Све би сада смисла? Сада, можете да урадите више него само идите на Цонтроллер и специфичне акције. Такође можете проћи у параметрима на контролеру. Само као пример, Ја ћу додати још једну акцију на овом контролеру да ти покажем. Назовимо ову акцију Ехо, јер то ће вам рећи шта год га дати, и тако ја идем у основи да зграби параметар који ће бити послати преко мене на рутирање програму, и као што можете видети овде, ова линија овде, можете видети да ово у основи значи да имате контролер, а ви имате /, и ви имате акцију, а ви имате још /, и да ће бити параметри, и зато имамо ову име ИД у угластим заградама, то значи да смо именовање овог параметра ИД. Касније у мојој контролер код ако желим да се дочепа тог параметра, Ја могу да користе код сам написао, наћи параметар назван ИД. То је оно што сам урадио овде, а ја ћу да се вратим и кажем, "Рекао си" то. И тако сад ако одем на нашем сајту, Ја идем на цс50-кохана/велцоме/ецхо/Хеллоооо-- Ох, тако је. Има 1 корак сам изоставио. Ово је део живог кодирање идеје. Ево 1 ствар. Хајде да видимо. Дакле, нормално по дефаулту са пуно ових веб апликација морате да укључите ову ствар индек.пхп у УРЛ, јер идеја је индек.пхп је врста тачке уласка Ваше пријаве, али наравно, То је врста досадних да има. Ви не желите да се појави индек.пхп у УРЛ, и скоро сваки веб оквир из кутије има овај проблем индек.пхп, и тако да морате да предузму неке мере како би бити у стању да уклони то. И тако у овом случају, шта ћемо да урадимо је да ћемо користити датотеку под називом. хтаццесс, и то је нешто што је специфично за Апач веб сервер, и то може да уради ствари као прерадити УРЛ и преусмеравање УРЛ адресе и тако даље и тако даље, и Кохана је довољно лепо да се обезбеди шаблон. хтаццесс фајл који можемо да користимо. Као што можете видети, ту је фајл тамо зове екампле.хтаццесс, и ми ћемо да копирате то. хтаццесс. Ја ћу да отворим ово и измените га, и у основи то чини гомилу различитих ствари. Кључна линија можда ћете желети да погледате је у праву овде. Идеја је да ово поставља правило да каже, "У реду, шта год укуцали у, препенд индек.пхп на то." Можете видети да. . * Стоји за било шта, било шта одговара, а онда други део је индек.пхп / $ 0, и $ 0 односи се на све што је претходно упарен. Да ли то смисла? Али заиста кључна ствар коју желите да промените промените ово препише базу, који је УРЛ базе. То некако претпоставља где радите са. Ја ћу додати ЦС50 кохана на то, и тако сад ако сам уклони индек.пхп, то би требало да ради, а ја ћу да додам неке бројеве да вам покажем да је то заиста урадио посао. Звучи добро. Има ли питања до сада? [Студентски] Како је знао да би 123? Да ли је то аргумент? Тачно. Можете да мислите о томе као аргумент. Али чудна ствар, ипак, је да начин на који то ради Кохана се они не то учинити баш као аргумент. Морате да га зграби овако. Морате да ухватите захтев објекат и питати за параметар који се зове ИД, и да име потиче од тог ИД боотстрап датотеке да сам показао раније, а име је у тим ИД угластим заградама, а то је како да зграби те параметре. Страва. Има ли још питања? Као што сам рекао, контролори, они руковати логику апликације, тако да је 1 пример где можете видети то је - то је врло основни, али то је још увек логика апликације, идеја отимања параметар и креирање нове стринг да каже, "рекли сте бла," а онда пљување који назад на вас. И углавном оно што радите је да направите различите контролере. Можете креирати одвојене контролере за различите делове вашег сајта. Данас ћемо да направимо веома једноставан сајт, и то ће бити веома основни блогу. Идемо да направимо нови контролер само за радна места у блогу. Али онда, ако бих такође додати коментаре на блогу, онда ја вероватно бих желео да направи нови контролер за ове коментаре. Да сам хтео да додам корисника, вероватно бих додати нови контролер за те кориснике, и уопште, идеја је да кад год имате нови модел, Нови објекат подаци да имате посла са, имате једног контролора за тај објекат података. Данас смо само ћемо да радимо са 1 објектом података, и то ће бити порука, а такође можете мислити објеката података као одговара табеле. Генерално свака табела одговара 1 тип објекта података, па после сто це имати 1 пост модел, који ће имати 1 пост контролер одговара на то, и исто за коментаре, исти за кориснике, и тако даље и тако даље. И то је опште правило. Ту ће бити посебни случајеви где могу разликовати од тога, али 90% времена то је оно што ћете да радите, и ја ћу вам показати да је оно што ћемо данас да радимо. 1 више концепт пре него што смо се вратили у коду рони, ова идеја објектно релационе мапирања. Ви сте већ урадили развојну псет веб, а видели сте да направите СКЛ упит, и шта год да се враћа за вас су редови. Можете их добити ове редове, а ви индекс по неком имену, Назив колоне и табеле, и то је начин на који радите са њим, и то може бити помало гломазан. Али осим тога, ако имате односе у бази података, као на пример, ако ја имам коментаре и поруке, онда можда ја желим да зграби предачки поруку у коментару. Ако ја користим само редове у СКЛ, онда све што могу добити је ИД од матичног пост а не саму пост. Али када смо кодирање, шта ми заправо желимо је да се заправо зграби  родитељ се постављати понекад. Шта објекат релационе мапирање ради се потребно је резултате упита базе података и ставља га у објекте за вас, које су много лепше да раде са него обичан низова и редова. На пример, сада када имам коментар можда, и ја желим да зграби његов предачки пост, и ја можда не коментаришем арров пост, онда је то заправо ће ми дати објекат пост одговара стварном матичној поруку, не само неки ИД, које бих иначе морати да користе и направити још један СКЛ упит да зграбите пост, који је гломазан и непотребан. И поред тога, по мапирање све ове редове података у објекте, можете да приложите више функција на објектима, тако на пример, ја сам говорио о томе како су часови у суштини груписања функција. Можете мислити о томе тако. На пример, можда ја имам овај пост објекат, и можда бих волео да имам неку врсту функције везан за њега да ми у основи говори је то недавно написана? Да ли је то послали у последњих недељу дана, тачно или нетачно? И то је функција могу прикачити на том објекту, и то је заиста згодно да га има на истом месту, и постоји мноштво различитих функција можете да креирате за ове објекте, и то је заиста лепо бити у могућности да га закачите на класи, објекту, а ако сте имали само редове који долазе из базе података, онда не можете заиста придају никакву функционалност за то. То је буквално само подаци. Сва питања у вези то уопште? ОРМс су веома честе веб развој, и постоји много различитих врста ОРМс, и Кохана има свој ОРМ. Веома је основни, али ћете добити укус онога што изгледа. Хајде да створи модел за наше блогу, и прва ствар коју очигледно треба да урадите је да се створи стварну табелу у оквиру наше базе података за смештање ствари наше податке за те поруке. Прва ствар коју ћу да урадите је да одете на пхпМиАдмин. Јесте ли се користи пхпМиАдмин раније? Ок, супер, па ви већ знате шта је то, и ја ћу да креирате нову табелу под називом кохана Поруке, и то ће бити веома једноставно. Ја ћу морати да се поново ин Све ћемо урадити данас имају аутора и тело, само то буде једноставно. Идем да створи тај сто, а сада имамо само сто представља насе поруке са 2 поља за наш аутор и наше тело. Друга ствар ја ћу сада урадити је конфигуришете своју веб апликацију, тако да зна како да се повежете са базом података, и то, опет, је нешто што ћете морати да урадите са свим веб апликација. Мораш да му кажеш корисничко име и лозинку и име базе података и тако даље и тако даље да схватим како да се заиста повежете са базом података. У кохана, имамо нешто што се зове база података модул, и у фолдеру конфигурациони имамо ову фасциклу зове база, и као што можете видети, постоји гомила подешавања можете да подесите овде да му кажете шта је корисничко име и лозинка за базу података, тако да у ствари могу да се повежем са њим. А пошто не желим да ви заправо знате корисничко име и лозинка моје базе података, Имам фајл где већ сам све подесили, а ја ћу да копирате и налепите га преко. Страва. Ок. Мислим да је то све конфигурација морам да урадим, али хајде да видимо. Ми ћемо наставити да радимо на томе, а ако нешто престане да ради, онда ћемо га поправити. Шта ћу да урадим сада јесте ћу да креирате нови контролер. Или заправо, извини. Прво морам да створи нови модел. Ја ћу створити нови модел под називом Пост.пхп, и шта ћемо да урадимо је да ћемо га назвати класа Модел_Пост. Набавите неки истицање синтаксе на, и тако када кажем, "проширује ОРМ," то је у основи неки више објектно-оријентисано програмирање, који нажалост ви нисте научили у ЦС50 још, али то је прилично лако да покупи. То ми даје сву ову додатну функционалност која долази у овом ОРМ пакета, и тако ја добијем гомилу додатних функција и ситница за бесплатно, који ћете видети мало у секунди. Сада заправо све што је потребно да урадите је да направите ову класу. Ја чак и не треба да се било које функције или било шта, али ја сам створио класу која представља табелу, и зато сам продужио овај ОРМ класу, Ја добијем гомилу ствари за бесплатно, тако да за сада не морате да подесите више ништа горе. И сад шта ћу да урадите је да ћу да креирате нови контролер, које ћу име блог.пхп, и ја ћу да копирате преко Добродошли контролер па ја не морам да куцате неке ствари, и сада морам да преименујете овај. Шта ћу да урадим за тестирање да се уверите све ради сад, Идем да зграби прву поруку из моје базе података и штампање тело поруку на екрану. Да би то урадили оно што ћу да урадим је прво ћу да сачувате поруке променљивој па шта ћемо да урадимо је - у кохана шта ви урадите је да зграбите пост објекат мало је гломазан, али морате да урадите нешто што се зове ОРМ :: фабрике, а онда прође у име модела који желите, и она враћа ОРМ објекат који представља тај модел. И онда, као што сам рекао, када смо продужити ОРМ објекат, добијамо све ове методе за бесплатно, тако на пример, добијамо ово нова функција под називом "наћи све," који се аутоматски враћа сваки пост у бази података, што је прилично згодно. А сада у телу ћу да се вратим први пост и вратити своје тело. И наравно, треба да направите пост, па хајде да убаците нови пост. Ја ћу рећи, "Брандон, мој први пост." Страва. А сада ћемо да идемо на блоговима и ако све ради добро - Ох, то је опет нека друга глупа фајл дозвола ствар. Сачекај 1 секунде. Некако је апсурдно. Тамо идемо. Ок. Поправио сам тај проблем дозволе. Он је покушавао да створи неке датотеке и неку евиденцију, и дозволе, опет, нису правилно постављена, па је направио сам па ти фајлови су били уписив и извршна тако да заправо може да се пријавите на ствари. Сада је ми даје још један изузетак изреку, "класа ОРМ није пронађен," а то је зато што сам заборавио још један корак. То је лоше. У досијеу боотстрап фолдера, постоје ови модули овде, које можете да одаберете да омогућите или онемогућите. Ово су гомила различитих функција које можете да одаберете да користите у кохана, што је некако лепо. На пример, они имају потврду идентитета модул које можете користити за аутентификацију корисника. Они имају кеш модул ако желите да спроведе неки кеширање назад крај да рад апликација брже и шта све не. Ми треба да омогући базу података и ОРМ модул, јер као што сам рекао, ми користимо базу података, очигледно, и ми такође треба да омогући ОРМ модул, јер смо желели да имамо додатну функционалност, што је лепо имати. Све што треба да урадите је Унцоммент те 2 линије, и сад ако ја освежите, то ми је дало још једну грешку. Он каже, "Класа Модел_Пост није пронађен." Сада ово је добро да имате проблем. Хајде да видимо. Нека буде јавно. Но Холд он. Ох, драги. Не знам зашто то није у стању да пронађу. То је заиста чудно. Ја имам ову класу овде. Претпостављам да можда да - ох. Ја сам тако глуп. Заборавио сам да додам ПХП ознаку. Зато. Сада морам да се поништи тај 1 промена сам урадио. Реду. Тамо идемо. То је стварно глупо. Нисам имао почетни ПХП ознаку. Али, као што видите, сада то ради исправно, зар не? Имамо 1 пост. Ми зграбио први пост, а сада смо одштампани своје тело. Сјајно. Фантастично. Има ли питања до сада? Не? Има ли питања? Ок, тако да смо управо креирали мислење модел, врло основни, а ми ћемо додати неке функције касније. Можемо додати валидације и филтрирање. Валидације су једна од ствари да реши оквири за тебе стварно, стварно добро, и ја не мислим да сте морали да урадите за вашу ЦС50 псет, али ако радите веб развој за коначни пројекат, Ви вероватно ћеш желети да урадите неку врсту валидације, као немају бланко корисничка имена, можда има лозинку са најмање опширно, такве ствари. И то је заиста гломазан за спровођење ове ствари сами, и скоро сваки појединачни веб оквир то ради за вас и омогућава вам да то урадите у веома чистом начин. И модел је где сте обично изражавају та правила валидације, зато што је потврђивање да ли модел важи или не. Али за сада, ми ћемо ставити да до касније, и за сада ћемо радити на други део, а ми ћемо покушати и направити нови поглед који излистава све поруке. Кораци који су укључени у израду нове акције за листинг свих постове је да зграби списак свих постова а затим донесе списак свих постова кроз погледом. Баш овде, срећом довољно, ми смо већ зграбио све постове користећи ову прву линију, наћи све функције, и сад шта ћемо да урадимо је да до сада Ја сам директно постављање тело одговора доношењем ниску, али сада желим да користим поглед, а разлика између погледом и само радим ово је са циљем да могу имати лепу, велику ХТМЛ шаблон, и шта ја могу да урадим је да прође одређених променљивих а онда су поглед аутоматски попунити свој шаблон користећи те променљиве. Шта ћу урадити јесте да ћу створити нову поглед, и ја ћу име приказа нешто као "блог / индек," и ја ћу у основи везује ово - Ох, шта пишем? Мој мозак је негде другде. Идем да веже поруке променљиве у приказу, па на тај начин има приступ поглед на овај пост променљиве. И тако сада морам да створи овај став, па овде имамо овај фолдер под називом "Погледи", и прво, ја ћу да направите нови фолдер под тим називом "Блог". То је лепо. На тај начин можемо имати леп хијерархију за наше ставове. А онда ћу да створи још једну датотеку у било под називом "индек.пхп." Страва. Заправо, хајде да их обоје имају овде. Израда Виев филе је вероватно најједноставнији део свега овога, и то су вероватно ствари које већ познајете. Ми ћемо да урадимо нешто заиста једноставно, старт говорећи, "Моја листа блогу." Онда можемо да идемо кроз, и можемо поновити кроз низ поруке, зграби сваки пост и кажу нешто као - можда додати линију а затим одштампате аутор и тело. То би сада смисла? И хајде да видимо да ли ради. Ништа се није десило. Питам се зашто. Ох, пропустио 1 корак. Врло глупо од мене. Креирао сам поглед, али ја нисам поставио поглед као одговор, тако да морате да урадите још 1 ствар. Ви треба да урадите "овај одговор тело" и подесите га да буде поглед. Тамо идемо. Ми имамо заглавље, а онда имамо пост, и само из зезања, хајде да убаците другу стативу тако да можемо да видимо листу. И убаците ове 2 поруке, и сад ако ја освежите страницу, видимо све ове постове овде. Да ли то учинити сада смисла? Да, питање? О, у реду. Као што можете да видите, ми смо били у стању да раздвоје све ове кодове од у различите секције, а онда можете да видите да је већина јасно са погледом кодом. Овај фајл овде да представља поглед, она брине само о представљање података, приказивање података. Она добија прошао неку врсту података, а све то ради се само да ти покажем. У свим осталим деловима кода, нећете морати да бринете о било шта од тога, и слично, ваш поглед код не мора да брине о томе ништа како да приступи бази података и тако даље и тако даље, који је заиста добар и чини ваш код много више одржив. Као што сам рекао, погледа, они су динамични у то то је 1 фајл, али то ће генерисати различите ставове на основу променљивих ви заправо пролазе у, и надаље, постоји много различитих помоћне функције који можете да користите да вам помогне да брже напиши шифру, који ћу вам показати у само секунд. Да. [Студент] Дакле, $ 0 је контролор, зар не? Та друга ствар. Питање је је $ 0 контролер? $ 0 је променљива сам створио овде. Први пут сам створио поглед. Ја га добио неку променљиву. Онда сам га прошао у ову функцију, подесите га као тело одговора. Да ли то смисла? [Студентски] Тако је поглед :: фабрика, је поглед као класе или библиотека [неразумљиво] фабрика функција? Питање је о погледај :: фабрике функције, и у основи то је нешто више објектно-оријентисано програмирање у суштини. Преглед је поглед класа, а она има метод назван "Фабрика" и то је начин да зграби објекат који је под називом "блог / индек." И то је нешто више објектно-оријентисано програмирање ствари да ја не идем у ту превише. Сада очигледно, желимо да створимо нове поруке, али ми не желимо да се то уради кроз базу података, па ћемо да створимо нову акцију за креирање нове поруке, и ту је доста ствари морамо да урадимо. Прва ствар коју ћемо да урадимо - хајде да се позабави овим стварима, један по један. Прва ствар коју ћемо урадити је да морамо да креирате образац за убацивање нови пост, али ја такође идем да прво додате нову радњу, па додајући нову акцију је баш тако лако као додајући нову функцију са контролером, а за сада ћу да урадим нешто врло основне, само зграби овај приказ и поставите га, само га приказали за вас. И онда сада ћу да креирате нову датотеку приказа, и ја ћу да почнем да пишем неке ствари. Шта је лепо у вези кохана је да они дају много различитих помоћних функција за вас да лакше писати приказ кода, и 1 тих помоћничких функција или помоћним модула је око писања форме. За писање облика, ја стварно не морате да директно напише било какав ХТМЛ себе. Ви сте написали ХТМЛ форми. Знате како то може да буде заиста, заиста болно и гломазан да пишу облике. То није забавно, па срећом, ми у основи може да напише образац користећи Кохана је формирају помоћне функције да то уради за нас. Идемо у основи имају поља за сваку ствар коју имамо, па један за ауторе и за један тела. Ми ћемо имати ознаку, а ми ћемо имати улаз. И на крају, да ћемо имати поднесак. И као што видите, ово је много чистији да напише него све то неуредног ХТМЛ, што је лепо. Наравно, постоје и друге веб оквири који имају чак чистији од тога, али барем ово је боље од писања ХТМЛ сами. Страшан, па ово је оно што видите. То је врста неуредан, па ћу да додате ред тамо да да изгледају мало лепше. Па, наравно, још увек изгледа стварно, стварно лоше, али једноставно смо фокусирани о функционалности за сада и не на естетику. Нема времена да ураде све. И као што видите, сада имамо супер основни облик, који је лепо. Овај код Рекао бих да је чистија него покушава да напише ХТМЛ формирају сами, тако да је лепо. Шта је следеће? Сада морамо да радимо ствари са акцијом. Нормално када пишете ХТМЛ форми, морате да му кажете где ће да поднесу образац за. Подразумевано у већини веб оквирима, подноси се тачно истом УРЛ, па ствар је, ако пошаљете захтев гет / блог / нови, то би требало да вам прикаже форму, али ако пошаљете поруку захтев / блог / нови са подацима, то је заправо требало да покуша да спаси тај пост и уради нешто са њим. Шта ћемо да урадимо је да у основи све што треба да урадите да бисте проверили да ли је то порука захтев или ГЕТ захтев је да проверите шта су пост променљиве можете да подесите. А ако је постављен после променљива, онда ћемо покушати и створи нови пост. Опет, ми смо управо то урадили, и да ствара нови пост, а ми смо буквално идемо у сет својих поља као што је овај, а онда ћемо га сачувати. А онда ћу да преусмери на индекс страници тако да могу да виде нашу листу порука поново. Хајде да покушамо да. Ја ћу рећи, "Брандон," а затим поднети пост, а ако све буде у реду, као што видите, она ме је преусмерен на индексној страници, и ако сам дођите до дна, имамо ново убачена пост. Ура! Да, питање. [Студентски] Шта ако сте ушли у исту ствар сте раније ушли? Да ли проверити да се уверите да нисте дуплирају исти подношење? Будите подразумевани, не, јер по дефаулту - Жао ми је, питање је да ли сте унели у потпуно истим подацима у обрасцу и тврде да, то ће вам омогућити да убаците дупликат објекат, дупликат уноса, у суштини? Управо сада, да, то ће вам омогућити да урадите то, јер у базама података је савршено важећа имати потпуно дуплиране редове, али ако је то брига, онда можете додати валидације, на пример, да се уверите да ли је то исто као нешто што већ постоји, онда кажемо да је то неважећи објекат, а онда чак да одредите своју поруку о грешци и кажу, "Погрешна јер то већ постоји", или тако нешто. Али у овом случају, могу само да створе нешто дупликат. Сада хајде да покушамо и додати неке провера. Проблем са овим сада је то Могао буквално поднесе потпуно празан пост. Ја могу да кликнете на ово дугме одмах, а тамо идемо. Ви стварно не могу да видим, али ово екстра линија овде указује на то да сам буквално имам нови пост. Она има само празну аутора и празну тело, и ми не желимо да се омогући људима да раде то. Ово је место где валидација ступа на сцену Ја могу да идем у мом моделу објекта, и сад ја могу додати нову функцију која одређује шта Валидација правила би требало додати да овом моделу да се уверите да је важећи или да прецизира шта значи бити валидан порука? И ја желим да кажем да је то само важи уколико пошта и аутор и тело нису празно, а то је како ви то урадите у кохана. Можете креирати нову функцију која се зове "правила" а онда сте у основи врати асоцијативни низ који дефинише правила за проверу ваљаности за овај објекат. Идемо да се врати низ, а онда шта ћемо да урадимо је да кажу "аутор," иде на низ, који иде у други низ се зове "није празан." А онда ћу да кажем "тело." Ок, а синтакса за ово и структура за ово може изгледати мало гломазан и мало компликовано. Ако сте прочитали документацију, то је прилично једноставно да схватим, Али у суштини то је оно што треба да урадите да наведете нека правила за валидацију, и постоји много различитих правила који ће вам дати Кохана бесплатно, као што можете да додате правила да каже она мора бити бар ово дужине. Можда то има да буде нумерички. Можда то има да буде алфа нумерички. Можда то има да буде у већини ово дужине, тако даље и тако даље. Постоји много различитих правила која Кохана даје за вас, и можете да одете на њиховом сајту, погледајте документацију, и можете видети све различите ствари које можете да урадите. Али то је све што треба да урадим, а сада да видимо шта се дешава ако сам поднесе празан пост. Шта ће се десити? О, не, ја добијам грешку. Добијам валидацију изузетак. Па, то је добро. Он ми је рекао да је мој модел је неважећа, али ја не желим да прикажете изузетак мојим корисницима када покушају да поднесе нешто неважеће, зар не? Желим да им дам неку повољнијих поруке о грешци када нешто крене наопако. Оно што ћемо урадити је да ћемо замотати све у покушај цатцх петљу. Заправо, мислим да је ово такође нешто још нисте научили у ЦС50, јер Ц, програмски језик Ц, нема изузетака, али скоро сваки други језик има изузетака, па стварно, стварно укратко, изузетак је нешто што део кода може баци изузетак када нешто крене наопако, али онда можда неки други део кода више до може да ухвати тај изузетак и уради нешто са њим. На пример, у овом случају, део кода који покушава да спасе модел, то потврђује модел, а ако се каже: "У реду, овај модел је неважећи," то ће бацити изузетак, а то је некако еквивалентно у Ц можда вратити -1 или тако нешто. А онда за мене, ова функција, мој број на вишем нивоу, ја могу пробати и ухвати тај изузетак и у основи рећи, "Добро, ако ја ухватим изузетак, шта ћу ја да радим?" Или бих могао да бирам да не ухвати тај изузетак и нека неко више до ухвати изузетак, или ако нико га ухвати, онда цео програм пада и каже, "Нешто је пошло наопако, а ја нисам могао да поднесем." Али оно што ми радимо јесте ли замотати део кода у три блоку, а онда сте такође додати нешто што се зове улов блок, која је врста код које ће покушати ухватити и изузетке који се могу појавити. И тако, ако ја ухватим наведени изузетак или поништај изузетак, онда шта ћу да урадите је да Идем да подесите грешке - Мислим да је то како ја то радим - и ја ћу поставити грешке у неком објекту. И онда шта ћу да урадите је да ако погоди овај изузетак, то неће да преусмери, а ако то не преусмери, то ће доћи из ако блогу и ударио овај блог / нови, који се желе желим да урадим. Ако постоји грешка, онда ја желим да се вратим у форму и приказати те грешке. Сада оно што ја желим да урадите је да желим да прође у тих грешака на приказ. Ок, мислим да имам поглед овде, и у основи ја желим да прикажете те грешке, ако они постоје. Пре него што сам написати ХТМЛ за то, ја ћу заиста брзо показати вам шта је структура ових грешака променљиве изгледа овако, и ово је добра пракса у целини. Много пута сте добили нешто заузврат од неких метода, неке функције у оквиру веб, а ви не знате шта променљива изгледа, тако да не знам како да радим са њим. Ја ћу користити метод Принт Р у основи је одштампате. И као што видите, она ми каже да је сарадник низ, и ви имате кључ, аутор указује на ниску, аутор не мора да буде празан, а други кључ, тело, указује на још један стринг, тело не мора да буде празан. Ја сам као, у реду, у реду. Онда могу поновити кроз низ и одштампати сваку поруку. То је у основи као асоцијативног низа са гомилом порука. Оно што ћу да урадим је "ако грешке," и ја ћу створити Несређена листа, и ја ћу поновити кроз све грешке. И ово, и сада ћу покушати поново подношења ово, и да видимо шта смо добили. Сада смо добили овај леп списак грешака, а ово је још увек прилично ружан, али то очигледно може бити обликован тако да изгледају лепо, али основна идеја је само у неколико линија кода, ми смо били у могућности да потврдимо наш модел, уверите се да одређена поља нису биле празне, и ако нешто крене наопако, а затим вратите неку врсту поруке о грешци Ја онда могао представити назад до корисника. Такође можете да прилагодите своју валидацију тако да можете заправо имати поруку о грешци да је више специфична за вашу апликацију или тако нешто. Све то је обично прилагодљив. Нажалост, ми понестаје времена, па ћу морати да одсече уживо кодирање седницу овде. Постоји гомила других карактеристика које желим да се покаже за вас у овом примеру. На пример, можете да додате шаблоне на свој сајт, па можда постоји нека врста ХТМЛ код који желите да примените на сваку страницу на вашем сајту, и уместо лепљења да у сваком Виев филе имате, који очигледно ће бити лоша пракса, Ви у основи можете дефинисати ове шаблоне, а затим у вашем контролеру кажу, "У реду, ја користим овај шаблон." "Да ли су сви моји погледи користе овај шаблон." И још једна ствар коју желим да покаже да вас, као и да немамо времена за унакрсно сите сцриптинг, и у основи мислим да сте вероватно видели у ЦС50 - Мислим да Дејвид Малан вероватно говорио о томе како обично можете убризгати ЈаваСцрипт код у - да ли сте разговарали о томе? Можда? Можда не? Али много пута можете убризгати злонамерни ЈаваСцрипт код у нечију базу података, а уколико они не да побегну правилно, онда када они представљају те податке назад до корисника, онда то може покренути неку врсту случајног ЈаваСцрипт кода не желите да се догоди, и ја хтео да покаже како ћеш то урадити у року од кохана. То је заправо стварно лако. Могао бих то да урадим сада у 2 секунде буквално. Све што треба да урадите је да у основи ове ствари преломити у овој ствари зове ХТМЛ ентитете. И то ће аутоматски избећи све знакове правилно и уверите се да не добијете овај проблем. [Студентски] написали сте први тест погрешно. [Брендон Лиу] О, упс. Ок, то је све што сам морао да поделим са вама за данас. Ови слајдови ће бити објављена, али то су углавном једини ресурси требало би да заиста треба да бисте почели са кохана. Можете да одете на сајт. Они имају упутство за употребу, и они такође имају АПИ истраживач. Можемо истражити све различите функције и помоћне функције они имају за вас. Они обично имају довољно информација о сајту који можете да користите да бисте почели и да кренем са кохана. Нема то много туторијала, ја мислим, за кохана, изван оно што имају на сајту овде, па ово је вероватно најбоље. Али, ако желите да идете са веб оквиром а ви не желите да имате да покупи нови језик, и желите нешто што је релативно лаган и има лак криву учења, Ја бих дефинитивно предлажем кохана. То је вероватно најбоља понуда за то. Чудна ствар, мада, ако је смо користећи Руби он Раилс, смо могли да копирају оно што смо управо урадили и вероватно још у под 3 минута. Није шала, али учење Руби он Раилс траје много дуже него што би било потребно да научи кохана. То је у основи је ваш избор о томе шта желите да изаберете да науче, али ако желите да добијете горе и трчање брзо, Кохана је дефинитивно веома добар избор. Било последња питања пре него што завршимо? Да. [Студентски] Како би се интегрисати да у оквиру ЦСС као сте користили када сте упућивали? Питање је како би се интегрисати да са ЦСС оквир? Оно што ће вероватно урадити је да би се вероватно укључити нов фолдер где ћемо бацити све наше ЦСС датотеке, а онда смо такође да додате нови шаблон. У предлошку ћемо укључити оне ЦСС датотеке да би били сигурни да се референцира на свакој страници, и онда када сте заправо пишете ХТМЛ, ви само додајте одговарајуће класе и тако то, и, на пример, када користите нешто као облику помагач функцију, можете да додате касније више параметара да одредите шта желите да настава буде везан за разне ствари како би могли да га правилно стил, а то је у основи како ће ићи. Има ли још питања? Страва. Хвала вам за ваше време, и хвала вам што сте дошли. Нисам хтео да додате много друго, али стварно брзо 1 ствар је што немамо везу обрасцу. Стварно глуп. Хајде да додамо - заправо у приказу, блог, индекс, хајде да заиста брзо додати линк који иде на нову страницу, страна где можемо убацити нови пост. Ми ћемо да урадимо ово. Шта је лепо је ту је цела ова група ХТМЛ помоћним функцијама који раде различите ствари за вас, па сте већ видели ентитете функционишу овде, али они такође имају функцију под називом "сидро", који можете да упишете у блогу / ново и кажу, "Постави нови блог." И то би створило ту везу за вас, и то изгледа заиста тривијално да уради, али то је лепо, зато претпостављам да сте се креће ваш сајт од 1 домена на други. А ако сте само написали сами УРЛ адресе, онда бисте морали да промените све УРЛ адресе. Или можда га преселио из 1. потфасцикли на други потфасцикли. Ви би морали да промените све оне УРЛ адресе себе, и то није забавно. Можете користити ову сидро овде, и можете да промените домен или поддиректоријум префикс у конфигурациони фајл једном, а онда ће се применити да свуда, а то је, опет, одличан пример не понављам себе, сушење свој код напоље. Где год да сте се понављају, покушајте и екстракт у некаквој конфигурациони фајл или на другу функцију и да се рукује да за вас. И последња ствар коју сам желео да вам покажем је претпоставимо да смо се вратили у овај пост, а ја сам компоновао неке заиста дуго есеј, али сам заборавио да укључи своју аутора. Сада када сам кликните "Субмит Пост," Управо сам све изгубио. Не! Заиста тужно. Па како да се носите са тим? То је оно што ми радимо. Оно што ми радимо је овде за ових улазних и текст област функција, ако се укључују други параметар, онда је вредност тог другог параметра Биће шта ће поље бити иницијално попуњен. Шта смо могли да урадимо је да у нашем блогу контролер, могли бисмо да обавеже другу променљиву. Назовите то "вредности" можда. И пролазе у низу пост, буквално. То значи да ако валидација није успела, прође ми је пост који сам поднео низ од последњег захтева, и на тај начин могу да користим вредности од мог последњег подношења да насели поља. Сада ја могу да урадим нешто слично вредности аутору и вредности тела, и на тај начин сада ако ја урадим неке ствари случајни и кликните на "Пошаљи Пост", онда је то тамо остаје. Али ћемо до другог проблема. То ради, али ако ја одем на страницу са веома први пут, да ће да се сруши, а то је зато што по први пут идемо на страницу, овај пост променљива још није дефинисан. То је нула. То не постоји. И оно што желим да кажем је да ако ово кључ постоји, затим вратите вредност овог низа, али ако кључ не постоји, онда се врати празан стринг. То је функционалност ми овде желимо. Желимо да проверите да ли је кључ постоји пре него што покушате да приступите низ, и срећом довољно, Кохана такође нам даје помоћни функцију за то. Имају целу ову палету функција под именом АРР, кратак за низ, и они имају 1 функцију под називом "добити" и можете проћи у низу, и можете проћи у име кључа. Тада у суштини оно што ће урадити је да ће покушати да се тај кључ, али ако то кључ не постоји у низу, онда ће се вратити празно, или такође можете да одредите подразумевани, верујем, што је лепо. Сада ако радимо опет исто, онда сада видите то ради први пут около, и опет, ако откуцате у неким случајним стварима и покушати да поднесе, онда то остаје тамо. И претпостављам да такође могу да вам показати како да додате шаблон заиста брзо. Оно што можемо да урадимо је да прво можемо додати нови поглед под називом "темплате.пхп" у оквиру Прикази фолдер, и шта ћу да урадите је да ћу да одштампате нешто што се зове "садржаја", који ће бити мој главни садржај. А можда на самом дну ћу додати, рецимо, цопиригхт. [Неразумљиво ученик питање] [Брендон Лију] Можда је ово супер основни шаблон желим да користим. Желим да имам фолдер са мојим ауторских права на свакој страници, и сад шта ћу да радим у мојој контролер је сада уместо да кажете, "продужава контролер" Ја ћу рећи, "проширује Цонтроллер_Темплате," и сада уместо да кажете, "тело одговор је једнак овом приказу," Ја ћу рећи, "то је садржај шаблон -" и ја мислим - да је ставио знак једнакости? Заборавио сам. Да, тако сам и мислио. И сада сам кренуо да садржај променљива једнака за приказ. Ја могу да урадим исто овде. И сад ако ја освежите, сада можете видети ауторска права тамо додао, и само направити неке рандом пост, а онда, опет, требало би да видите да је ауторско право на самом дну странице. Велики. То је све што сам хтео да вам покажем. [Аплауз] Има ли питања? [ЦС50.ТВ]