[Семінар] [Кохана: Лёгкі PHP Framework] [Брэндон Лю] [Гарвардскі універсітэт] [Гэта CS50.] [CS50.TV] Прывітанне ўсім. Мяне завуць Брэндон. Я малодшы тут у каледжы рабіць інфарматыкі, і сёння мы будзем казаць пра Кохана, які з'яўляецца асновай вэб-распрацоўкі PHP. Сёння будзе жывы семінар кадавання, так што я ў асноўным збіраюцца выдаткаваць 5-10 хвілін тлумачачы, што Кохана з'яўляецца, а потым я літаральна збіраецца пабудаваць супер просты блог для вас прама тут літаральна з нуля. Мы збіраемся загрузіць код з вэб-сайта Kohana, і мы збіраемся пачаць будаўніцтва блог, і, спадзяюся, гэта будзе вельмі павучальна, таму што вы ўбачыце, можа быць, можа быць, я зраблю некаторыя памылкі, і вы ўбачыце мяне акрыяць ад іх, ці вы ўбачыце мой разумовы працэс, як я будую праз гэты блог, а між тым, вы таксама атрымаеце знаёмыя з самай базы. Спадзяюся, што гэта будзе вельмі павучальна практыкаванні. Па-першае, што ж такое база? Калі вы прымалі CS50 да гэтага часу, як вы на самай справе не працаваў ні з адным рамкі яшчэ і такая справа. Вы, напэўна, зрабіў 1 PSET вэб-распрацоўкі ўжо, і выкажам здагадку, што вы па-ранейшаму ствараць вэб-сайты і трымаць стварэння вэб-сайтаў. Вы пачнеце заўважаць некаторыя рэчы. Першае, што вы заўважыце, што вы, верагодна, рабіць тое ж самае зноў і зноў ўвесь час, рэчы, як ўборка ўваходных дадзеных карыстальніка, рэчы, як арганізацыі файлаў пэўным чынам. Іншая рэч, вы таксама, верагодна, заўважыце, што ваш код можа пачаць, каб стаць вельмі, вельмі брудны, і вы можаце пакінуць яго брудным і проста вельмі нялёгка падтрымліваць яе, ці вы можаце пачаць структураваць ваш код і робіць яго модульная пэўным чынам, каб зрабіць яе больш кіраванай. Гэта дзе вэб-рамкі ў асноўным ўвайшлі Гэтыя людзі, якія пабудавалі шмат вэб-сайтаў, яны сказалі, "Мы не павінны паўтарыць гэта кожны раз мы будуем вэб-сайта." "Чаму б нам проста не зрабіць пакет, які робіць усё гэтыя рэчы для вас кожны раз, калі вы хочаце стварыць свой сайт? " І так, што, калі вы робіце новы вэб-сайт, Вы проста засяродзіцца на тым, што менавіта гэты канкрэтны вэб-сайт пра. Вам не трэба паўтараць усе розныя канфігурацыі і падзел кодаў і перапісвання кода што вам часта даводзіцца рабіць, калі вы робіце вэб-сайтаў. Ідэя складаецца ў тым, што рамачнае дазваляе пісаць код больш высокага ўзроўню не турбуючыся аб дэталях больш нізкага ўзроўню. Дэталь ніжняга ўзроўню можа быць нешта накшталт справу з ачысткі ўваходных дадзеных карыстальніка. Гэта тое, што вы не павінны сапраўды трэба турбавацца аб. Вы павінны засяродзіцца на тым, што ваша размеркаванне вэб самой справе аб. Ён ліквідуе шмат шаблоннага кода. Гэта архітэктура, для вашага праекта. Самы папулярны з іх будзе мадэль-паказ-кантролер, якія я збіраюся казаць у секунду. І шмат разоў гэтыя рамкі ўвасабляюць набор працэдур, правілы і практычныя рэкамендацыі для вас выкарыстоўваць так што, калі вы прыняць вэб-фреймворк вы павінны напісаць свой код у пэўным сэнсе, і гэта, як правіла ўзгоднены набор прынцыпаў супольнасцю, што, як правіла, прымаецца роўным добры спосаб напісання кода. Гэта робіць ваш код больш лёгкім ў абслугоўванні, больш зручным, гэтак далей і таму падобнае. І, нарэшце, што я хачу падкрэсліць, пра рамкі у параўнанні з бібліятэкамі гэтая ідэя аб інверсіі кантролю, і такая справа. Розніца паміж бібліятэкай і рамках, што з бібліятэкай вы ўсё яшчэ пішу асноўнай праграмы, і вы, здаецца, выкліку бібліятэкі і заклікаючы ў бібліятэку, каб зрабіць што-то для вас. Розніца паміж бібліятэкай і рамках з'яўляецца тое, што база пачынаецца з кантролю, і гэта выклікае ваш код, так што вы можаце думаць пра гэта як - вось чаму гэта называецца база - каркас забяспечвае гэты кадр і структуру вашага кода, і вы запоўніце адтуліны, і гэта стане больш відавочным у секунду калі вы бачыце мяне пачынаюць пісаць код у кантэксце рамках. Вы ўбачыце, што я запаўнення прабелаў, і каркас выгляд кантролю ўсіх якія рухаюцца частак, і я павінен пакласці кавалачкі ў патрэбных месцах. Сёння мы будзем казаць пра Кохана, які з'яўляецца адным з многіх фреймворков. Ёсць вэб-рамкі, і ёсць тыя, практычна ў кожнай мове, і я выбіраю Кохана таму Кохана, магчыма і агульнапрызнанымі як самы просты рамках PHP, каб забраць. Гэта самы лёгкі. Ёсць і іншыя іх там, якія прыходзяць з многімі, многія іншыя функцыі, але яны маюць тэндэнцыю быць больш складана падабраць. І, нарэшце, Кохана выкарыстоўвае архітэктуру MVC. Гэта досыць лёгкі, што мы можам літаральна пабудаваць праект прама тут прама перад вашымі вачыма, і вы можаце ў значнай ступені прытрымлівацца даволі лёгка. Што такое архітэктура MVC? Яна выступае за Model-View-Controller, і, магчыма, калі вы думаеце пра код вы пісалі да гэтага часу для некаторых з вашых psets вэб-распрацоўкі Вы можаце быць у стане бачыць некаторыя з гэтага, але, як правіла, калі вы пачынаеце пісаць больш складаны вэб-прыкладанняў, падзел паміж гэтымі 3 сегментаў становіцца ўсё больш і больш відавочным. Я выклаў MVC тут накшталт як стэк, і часта вы будзеце чуць людзі кажуць аб стэкаў ў вэб-распрацоўцы, і гэта, каб праілюстраваць ідэю, што кожны пласт, кожны кампанент на самай справе спрабуе ўзаемадзейнічаць толькі паміж 2 іншымі кампанентамі. Хтосьці звяртаецца свой сайт у якасці кліента або браўзэра. Яны ўзаемадзейнічаюць з вашай праграмай праз выгляд кода. Выгляд код ўзаемадзейнічае з кантролерам. Кантролер ўзаемадзейнічае з мадэллю і мадэль ўзаемадзейнічае з базай дадзеных SQL. І няма скачковы паміж калі вы пішаце код правільна. Што азначаюць гэтыя рэчы рабіць? Мадэль сутнасці з'яўляецца кавалак кода, які мае справу з вашымі дадзенымі. Усё, што мае справу з базай дадзеных, з аб'ектамі, якія вы захоўваеце, або здабывання гэтых аб'ектаў у базе дадзеных, што ўсе апрацоўваецца з дапамогай мадэлі. Можа быць, у вас ёсць аб'екты ў базе дадзеных. Мы збіраемся стварыць мадэль, якая мае адносiны да пасады, так пост можа мець некаторыя атрыбуты да яго. Вы можаце мець функцыі вакол захоўвання гэтых паведамленняў або атрымання паведамлення або фільтрацыі паведамленні і гэтак далей і гэтак далей, і гэта ўвесь код, які апрацоўваецца з дапамогай мадэлі. Кантролер з'яўляецца свайго роду логікі дадатку, і шмат розных рэчаў можа пайсці ў логіцы прыкладання. Калі вы размаўляеце з адным API, , Якія могуць быць там, дзе вы маеце справу з логікай прыкладання. Калі вы спрабуеце павінны прынесці ў дадзеныя з некалькіх розных мадэляў і павінны аб'яднаць іх у пэўным сэнсе, што часта можа быць апрацавана з дапамогай кантролера. Напрыклад, на Facebook, калі вы адзін хтосьці, то, магчыма, што акт ўстанаўлення гэтых адносін можа быць зроблена з дапамогай кантролера. І, нарэшце, выгляд код, які генерацыі, што вы на самай справе бачыце. Шмат разоў я думаю, што ў CS50 psets яны сапраўды не заахвочваць вас, хлопцы, каб аддзяліць гэтыя 3 рэчы. Вы, верагодна, гэты вялікі, доўгі файл, дзе ў верхняй Вы зрабіць некаторыя SQL-запыт і, магчыма, зрабіць некаторую апрацоўку ад дадзеных, здабываюцца з базы дадзеных, а затым вы павінны ўсе вашы HTML у ніжняй часткі. І вы можаце выявіць, што, як вы ствараеце новыя і новыя старонкі што вы збіраецеся мець некаторыя паўтарэння кода, а таксама, Справа ў тым, ваш файл становіцца сапраўды вялікі і доўгі і становіцца грувасткім ў кіраванні. Прычына, чаму MVC настолькі добра лічыць для шэрагу прычын. Першае, што нешта, званае падзел інтарэсаў якая з'яўляецца ідэя, што калі ў вас ёсць - ідэальна 1 кавалак кода павінен рабіць 1, а робяць гэта вельмі добра, і вы не павінны аб'яднаць кавалкі кода, якія робяць разрозненыя рэчы. Напрыклад, код і код мадэлі паглядзець, яны сапраўды не павінны быць звязаныя. Яны не павінны быць у адных і тых жа файлаў, таму, калі вы можаце, падзяліць іх так што лёгка ў абслугоўванні. Іншая справа, паўторнае выкарыстанне кода. Вы можаце знайсці сабе пісаць той жа запыт SQL ці рабіць аналагічныя запыты, якія могуць быць забіраем у 1 функцыі, і гэта ідэя мадэляў і кантролераў, пакласці яго ў асобную функцыю, што вы можаце выкарыстоўваць у розных месцах у праекце. І, нарэшце, што прывязаны да сушкі код, або не паўтараючы сябе, не паўтарыць сябе. Гэта вельмі зразумелай ў развіцці. Кожны раз, калі вы можаце, вы не жадаеце паўтарыць сябе, таму што калі вы паўтарыць сябе,  гэта значна даражэй у абслугоўванні. Калі вы хочаце змяніць 1 рэч, вы павінны змяніць яго ўсюды, і гэта прыводзіць да памылак, і гэта жудасна. Добра. Любыя пытанні да гэтага часу каля Кохана наогул? Вялікі. Цяпер мы збіраемся, каб паглыбіцца ў жывой сесіі кадавання, і, спадзяюся, усё будзе добра. Я збіраюся ў асноўным пабудаваць гэты сайт на адным з маіх выдаленых серверах, і такім чынам вы, хлопцы, можаце таксама гл вэб-сайт і атрымаць доступ да вэб-сайт, а таксама навакольнае асяроддзе лепш выкананы з чым мой выдаленай машыне, таму што гэта працуе Linux замест OS X. Мы літаральна збіраецца пачаць. KohanaFramework.org. Я збіраюся загрузіць код з вэб-сайта. Я збіраюся капіяваць адрас спасылкі, перайсці да майго сервера, загрузіць яго, і я збіраюся атрымаць яго. [Студэнт] Ваш самы вялікі вы можаце зрабіць тэкст? [Брэндон Лю] Так лепш? [Студэнт] Гэта выканальна? [Брэндон Лю] Так, гэта нармальна. Я запампаваў ZIP файл і расшпіліла, што ў каталог пад імем Кохана, і мы збіраемся перайменаваць гэтую CS50-Кохана, і давайце ўваходзіць Ўзрушаюча. Тут вы бачыце кучу розных файлаў. Большасць з вас можа ігнараваць - we're не збіраюся ісці праз кожны файла, які тут з-за нашых часовых абмежаванняў, але ў цэлым пры ўсталёўцы Кохана, першае, што вы робіце гэта вы перайдзіце ў каталог, і вы будзеце ў асноўным, робяць некаторыя тэсты асяроддзя і яшчэ шмат чаго каб пераканацца, што ваша сераду правільна наладжаны для запуску Кохана і пераканайцеся, што ўсё ў парадку. Вы можаце бачыць, большасць рэчаў прайшло, але як правіла, вы заўсёды сутыкнуліся з гэтай праблемай 1 дзе ён скардзіцца, што некаторыя каталог не даступны для запісу, і гэта таму, што з некаторых дазволаў. Я не ведаю, колькі вы, хлопцы даведаліся аб правах доступу да файлаў у CS50, але калі вы робіце вэб-распрацоўкі, вы збіраецеся сутыкнуцца з гэтай праблемай шмат. Я збіраюся зрабіць яго для запісу і я думаю, я таксама павінен - ​​там мы ідзем. Такім чынам, зараз вы можаце бачыць усё прайшло, і цяпер ён раскажа вам, каб перайменаваць файл install.php. Я збіраюся перамясціць файл install.php, каб installed.php, і цяпер, калі я абнавіць, гэта дае мне памылку, і гэта, калі адладка прыходзіць цалі Гэта дзе вы можаце ўбачыць, што на самой справе адбудзецца. Справа ў тым, па змаўчанні, Кохана мяркуе, што ваш праект у каранёвым каталогу вашага дамена, так што гэта чакае, каб вы былі ў demo.brandonkliu.com. Мы павінны сказаць ёй, што гэта на самай справе ў тэчцы. Гэта ў тэчцы пад назвай CS50 Кохана. Справа ў тым, што гэта памылкова растлумачыла CS50-Кохана як нешта яшчэ, што я растлумачу вам у секунду. Але я павінен сказаць вам, гэта тое, што і варта было чакаць. Тое, што мы збіраемся зрабіць, гэта мы збіраемся ісці ў гэтую тэчку пад назвай bootstrap.php, што папка канфігурацыі, дзе шмат розных рэчаў ўсталёўваюцца. Я адкрываю, што да. Тады, магчыма, адным з першых рэчаў, якія я зраблю гэта змяніць гадзінны пояс. А потым паглядзім. Ага! Прама тут. Ёсць куча розных выказванняў канфігурацыі тут, але той, які я гляджу на гэта, што называецца база URL, і па змаўчанні я атрымаць яго ў Кохана, але я збіраюся змяніць, што CS50-Кохана, і я думаю, што павінны гэта выправіць. Так, выдатна. Па змаўчанні, каб убачыць, што ён працуе, ён кажа: "Hello World". Адкуль гэта ўзялося? Як мы дайшлі да Hello World? Дзе менавіта гэта код, які на самай справе напісаў гэта? Каб зразумець гэта, я пазнаёмлю гэтую канцэпцыю пад назвай маршрутызацыі. Практычна ўсе структуры вэб мець канцэпцыю пад назвай маршрутызацыі, які з'яўляецца часткай праграмнага забеспячэння, якое будзе адлюстроўваць пэўную URL у пэўнай часткі кода ў межах вашага рамках. Напрыклад, калі ў вас ёсць URL, і вы пайсці на некаторыя URL, як foo.com / блог / усе тое, што каркас збіраецца рабіць - ці, прынамсі, тое, што Кохана збіраецца рабіць - будзе ён збіраецца знайсці клас з імем кантролера блог, і ён збіраецца запусціць функцыю з імем дзеянні ўсё. Я ведаю, я кажу пра класе і функцый, і я ведаю, вы, хлопцы, не распаўсюджваецца класы і функцыі у CS50 пакуль няма, але на дадзены момант, вы можаце думаць аб класах як проста група функцый, спосаб групоўкі функцыі разам. Гэта сапраўды ўсё, што вам трэба ведаць. Цяпер, калі мы паглядзім на нашу структуру тэчак, ўнутры тэчкі прыкладання ёсць і іншая папка пад назвай класы, і іншыя тэчкі называюцца кантролер і мадэль. Калі вы паглядзіце ў тэчцы Controller, мы бачым, што ёсць файл пад назвай Сардэчна запрашаем, і вы можаце ўбачыць тут з'яўляецца класам называецца кантролер Сардэчна запрашаем, і ёсць функцыя называецца Індэкс Дзеянне, і тое, што яна робіць гэта задае цела вашага адказу на Hello World. Вось дзе код напісаны. Іншае пытанне, ну, я не пайшоў на бла, бла, бла, / Сардэчна запрашаем / індэкс. Як я тут апынуўся? Ну, гэта проста таму, што тут у ніжняй часткі нашага загрузнага файла дзе мы паклалі нашы маршруты Вы можаце бачыць, што яны ўсталёўваюць некаторыя значэнні па змаўчанні для вас. Кантролер па змаўчанні Сардэчна запрашаем. Дзеянне па змаўчанні Індэкс. Вось чаму, калі мы нічога не змесціце ў там, гэта аўтаматычна пайшлі ў жаданую кантролера а індэкс Дзеянне. Усе сэнсу да гэтага часу? Цяпер вы можаце зрабіць больш, чым проста пайсці да кантролер і канкрэтныя дзеянні. Вы таксама можаце перадаваць параметры ў кантролер. Проста ў якасці прыкладу, Я збіраюся дадаць яшчэ меры для гэтага кантролера, каб паказаць вам. Давайце назавем гэта дзеянне Эхо, таму што гэта збіраюся расказаць вам усё, што вы даеце яму, і таму я ў асноўным збіраецца захапіць параметр, які збіраецца быць адпраўленыя праз мяне ў праграму маршрутызацыі, і як вы можаце бачыць тут, гэтая лінія прама тут, вы можаце ўбачыць, што гэта ў асноўным азначае, што вы павінны кантролер, і ў вас ёсць /, і ў вас ёсць дзеянні, і ў вас ёсць іншы /, і што будзе параметры, і таму што ў нас гэта назва ID у кутніх дужках, што азначае, што мы назваўшы гэта ідэнтыфікатар параметру. Пазней у сваім кодзе кантролера, калі я хачу ўзяць у рукі гэтага параметру, Я магу выкарыстоўваць код, які я напісаў, знайсці параметр з імем ID. Гэта тое, што я зрабіў тут, і я збіраюся вярнуцца і сказаць, "Вы сказалі," што. І вось цяпер, калі я іду на нашым сайце, Я іду ў cs50-kohana/welcome/echo/Helloooo-- о, гэта так. Існуе 1 крок, які я апушчаны. Гэта з'яўляецца часткай жывой ідэі кадавання. Вось 1 рэч. Давайце паглядзім. Так звычайна па змаўчанні з вялікай колькасцю гэтых вэб-прыкладанняў Вы павінны ўключыць гэты index.php рэч у вашай URL, таму што ідэя index.php з'яўляецца свайго роду кропкай ўваходу вашага прыкладання, але, вядома, гэта накшталт раздражняе прыйдзецца. Вы ж не хочаце, каб мець index.php з'явіцца ў вашым URL, і амаль кожны вэб-фреймворк з скрынкі мае гэтую праблему index.php, і таму вы павінны прыняць некаторыя меры, каб мець магчымасць выдаліць гэта. Такім чынам, у гэтым выпадку што мы збіраемся зрабіць, гэта мы збіраемся выкарыстоўваць файл з імем. Htaccess, і гэта тое, што гэта спецыфічныя для вэб-сервера Apache, і ён можа рабіць рэчы, як перапісванне URL-адрасоў і перанакіраваць URL-адрасы і гэтак далей і гэтак далей, і Кохана дастаткова добры, каб забяспечыць шаблону. файл Htaccess, што мы можам выкарыстоўваць. Як вы можаце бачыць, ёсць файл там называецца example.htaccess, і мы збіраемся, каб скапіяваць, што. Htaccess. Я збіраюся адкрыць гэта і рэдагаваць яго, і ў асноўным гэта робіць кучу розных рэчаў. Ключавым напрамкам вы можаце глядзець на гэта прама тут. Ідэя складаецца ў тым, што гэта настройвае правіла, якое абвяшчае, "Добра, што вы ўводзіце ў, дадайце перад index.php да гэтага." Вы можаце бачыць, што. . * Варта ні за што, усе пакеты, а затым другая частка index.php / $ 0, і $ 0 спасылаецца на тое, што быў падабраны раней. Ці мае гэта сэнс? Але на самай справе ключавая рэч я хачу змяніць гэта змяніць гэтую перазапісу базы, якая з'яўляецца URL базы. Гэта свайго роду мяркуе, дзе вы працуеце з. Я збіраюся дадаць CS50 Кохана да таго, што, і, такім чынам цяпер, калі я выдаліць index.php, ён павінен працаваць, і я збіраюся дадаць некаторыя лічбы каб паказаць вам, што гэта сапраўды не працаваў. Гучыць добра. Ёсць пытанні да гэтага часу? [Студэнт] Як гэта ведаць, каб зрабіць 123? Гэта аргумент? Менавіта так. Вы можаце думаць пра гэта так жа, як аргумент. Але дзіўная рэч, хоць, з'яўляецца тое, што спосаб Кохана робіць гэта , Яны не робяць гэта так жа, як аргумент. У вас ёсць, каб схапіць яго, як гэта. Вы павінны захапіць аб'ект запыту і задаць для параметру, які па імені ID, і што імя ID зыходзіць ад гэтага загрузнага файла што я паказаў раней, і імя ID ў тыя вуглавыя дужкі, і гэта, як вы захапіць гэтыя параметры. Ўзрушаюча. Любыя іншыя пытанні? Як я ўжо сказаў, кантралёры, яны звяртаюцца логіку прыкладання, так вось 1 выпадак, калі вы можаце бачыць that's - гэта вельмі асноўнае, але гэта ўсё яшчэ логіка прыкладання, ідэя захопу параметр і стварэння новага радка што кажа: "Вы сказалі, бла", а затым пляваць, што з вамі. І наогул, што вы робіце гэта вы ствараеце розныя кантралёры. Вы стварыць асобныя кантролеры для розных частак вашага сайта. Сёння мы збіраемся зрабіць вельмі просты вэб-сайт, і гэта будзе вельмі просты блог. Мы збіраемся зрабіць новы кантролер толькі для паведамленняў у блогу. Але тады, калі б я таксама дадаваць каментары да паведамлення ў блогу, то я б, напэўна, хочаце, каб зрабіць новы кантролер для гэтых заўваг. Калі б я хацеў, каб дадаць карыстальнікаў, я б, напэўна дадання новага кантролера для тых карыстальнікаў, і наогул, ідэя ў тым, што кожны раз, калі ў вас ёсць новая мадэль, новы аб'ект дадзеных, вы маеце справу з, ў вас ёсць адзін кантролер для гэтага аб'екта дадзеных. Сёння мы толькі збіраемся працаваць з 1 аб'екта дадзеных, і што будзе паведамленняў, а таксама вы можаце думаць аб аб'ектах дадзеных як адпаведны табліц. Наогул кожная табліца адпавядае 1 тыпу аб'екта дадзеных, таму паведамленне табліца будзе мець 1 паведамленне мадэль, які будзе мець 1 паведамленне кантролер, адпаведны таго, і тое ж самае для каментароў, тое ж самае для карыстальнікаў, і гэтак далей і таму падобнае. І гэта агульнае правіла. Там будуць спецыяльныя выпадкі, калі вы можа адрознівацца ад таго, але 90% часу, гэта тое, што вы збіраецеся рабіць, і я пакажу вам, што тое, што мы збіраемся рабіць сёння. 1 больш паняцце перш чым мы паглыбімся назад у код, гэтая ідэя аб'ектна-рэляцыйнага супастаўлення. Вы, хлопцы ўжо зрабілі PSET вэб-распрацоўкі, і вы бачылі, што вы робіце SQL запыт, і ўсё, што ён вяртае да вас радкоў. Вы атрымліваеце гэтыя радкі, а вы індэксаваць іх нейкім імем, Імя слупка і табліцы, і гэта, як вы з ім працаваць, і гэта можа быць трохі грувасткім. Але акрамя таго, калі ў вас ёсць адносіны ў вашай базе дадзеных, як, напрыклад, калі ў мяне ёсць заўвагі і паведамленні, то, магчыма, я хачу, каб захапіць бацькоўскі пост каментар. Калі я выкарыстоўваю толькі радкі ў SQL, то ўсё, што я магу атрымаць гэта ідэнтыфікатар бацькоўскага паведамлення і не сам пост. Але калі мы кадавання, тое, што мы на самай справе хочам, каб на самой справе захапіць  бацька прымацоўваць сябе часам. Які аб'ект рэляцыйныя адлюстравання робіць, ён прымае вынікі ў звароце да базы дадзеных і змяшчае яго ў аб'екты для вас, якія значна прыемней працаваць з чым просты масіваў і радкоў. Напрыклад, зараз, калі ў мяне ёсць каментар, магчыма, і я хачу, каб захапіць яго бацькоўскі пост, і я, можа быць, каментаваць стрэлкай пост, то ён будзе на самой справе даць мне аб'ект паведамленні што адпавядае фактычнай мацярынскай паведамлення, а не толькі некаторыя ID, які я інакш прыйшлося б выкарыстоўваць і зрабіць яшчэ адзін SQL запыт, каб захапіць пост, якая з'яўляецца грувасткім і непатрэбным. І, акрамя таго, шляхам супастаўлення ўсіх гэтых радкоў дадзеных у аб'екты, Вы можаце таксама прыкласці больш функцый да аб'ектаў, так, напрыклад, я казаў пра тое, як класы, па сутнасці групоўкі функцый. Вы можаце думаць пра яго, як, што. Напрыклад, можа быць, у мяне ёсць гэты аб'ект паведамлення, і можа быць, я хацеў бы мець нейкую функцыю, прыкладаецца да яго , Што ў асноўным кажа мне было гэта нядаўна апублікаваў? Ці было гэта адказваў на працягу апошняга тыдня, дакладна ці няслушна? І гэта функцыя я магу прыкласці на гэтым аб'екце, і гэта сапраўды зручна мець яго ў тым жа месцы, і ёсць мноства розных функцый, якія можна стварыць для гэтых аб'ектаў, і гэта сапраўды прыемна мець магчымасць, каб прымацаваць яе да класа, на аб'ект, у той час як, калі вы толькі што радкі, якія паступаюць з базы дадзеных, то вы не можаце на самой справе надаў гэтаму функцыянальныя магчымасці, што. Гэта літаральна толькі дадзеныя. Любыя пытанні аб тым, што наогул? ORMs вельмі распаўсюджаныя вэб-распрацоўкі, і ёсць шмат розных тыпаў ORMs, і Кохана мае свой уласны ORM. Гэта вельмі асноўнае, але вы атрымаеце густ, як ён выглядае. Давайце створым мадэль для нашых блогах, і першае, што мы, відавочна, трэба зрабіць, гэта стварыць рэальную табліцу у нашай базе на самай справе захоўваць нашы дадзеныя для гэтых пасад. Першае, што я збіраюся зрабіць, гэта зайсці ў PHPMyAdmin. Хлопцы, вы выкарыстоўвалі PHPMyAdmin раней? Добра, дзіўным, каб вы, хлопцы, ужо ведаеце, што гэта такое, і я збіраюся стварыць новую табліцу з імем Kohana Паведамленняў, і гэта будзе вельмі проста. Я павінен буду зноў увайдзіце Усё, што мы збіраемся зрабіць сёння ёсць аўтар і цела, проста трымаць яго проста. Я збіраюся стварыць гэтую табліцу, і зараз мы проста ёсць табліца, якая прадстаўляе нашы паведамленні з 2 палямі для нашага аўтара і нашага цела. Іншая рэч, я збіраюся зрабіць цяпер, гэта наладзіць свой вэб-прыкладанні, так што ведае, як падключыцца да базы дадзеных, і гэта, зноў жа, гэта тое, што вам давядзецца рабіць з усімі вэб-прыкладанняў. Вы павінны сказаць яму імя карыстальніка і пароль і імя базы дадзеных і гэтак далей і таму падобнае каб высветліць, як на самой справе падлучэння да базы дадзеных. У Кохана, у нас ёсць тое, што называецца модуль базы дадзеных, і ў тэчцы канфігурацыі ў нас ёсць гэтая папка пад назвай База дадзеных, і як вы можаце бачыць, ёсць куча налад вы павінны ўсталяваць тут сказаць яму, што імя карыстальніка і пароль для базы дадзеных, каб я мог на самай справе падлучыцца да яго. І так як я не хачу, каб вы, хлопцы, на самай справе ведаем імя карыстальніка і пароль маёй базе дадзеных, У мяне ёсць файл, дзе я ўжо ўстанавіць усё гэта, і я збіраюся скапіяваць і ўставіць яго. Ўзрушаюча. Добра. Я думаю, што гэта ўсё, што канфігурацыя мне трэба зрабіць, але давайце паглядзім. Мы будзем працягваць працаваць у ім, і калі нешта выходзіць з ладу, тады мы будзем гэта выправіць. Цяпер тое, што я збіраюся зрабіць, гэта я збіраюся стварыць новы кантролер. Ці на самай справе, шкада. Спачатку я павінен стварыць новую мадэль. Я ствару новую мадэль пад назвай Post.php, і тое, што мы збіраемся зрабіць, гэта мы збіраемся называць гэта клас Model_Post. Атрымаць некаторыя падсвятленне сінтаксісу на, і таму, калі я кажу: "пашырае ОРМ," гэта ў асноўным яшчэ трохі аб'ектна-арыентаванага праграмавання, якія, на жаль, вы, хлопцы яшчэ не навучыліся ў CS50 яшчэ, але гэта даволі лёгка падабраць. Гэта дае мне ўсю гэтую дадатковую функцыянальнасць, якая пастаўляецца ў гэтай ORM пакета, і таму я атрымліваю кучу дадатковых функцый і яшчэ шмат чаго бясплатна, якія вы ўбачыце трохі ў секунду. Зараз на самай справе ўсё, што трэба зрабіць, гэта стварыць гэты клас. Я нават не трэба рабіць якія-небудзь функцыі або нічога, але я стварыў клас, які прадстаўляе табліцу, і таму, што я падоўжыў гэты клас ORM, Я атрымліваю кучу рэчаў бясплатна, так што цяпер вы не павінны ўсталяваць нічога больш ўверх. А зараз тое, што я збіраюся зрабіць, гэта я збіраюся стварыць новы кантролер, якія я збіраюся назваць blog.php, і я збіраюся скапіяваць прывітання кантролера таму я не прыйдзецца перадрукоўваць некаторыя рэчы, і цяпер я павінен перайменаваць гэты. Цяпер тое, што я збіраюся зрабіць, каб праверыць, каб пераканацца, што ўсе распрацоўкі, Я збіраюся захапіць першы пост з маёй базе дадзеных і раздрукаваць цела паведамленні на экране. Каб зрабіць гэта, што я збіраюся рабіць у першую чаргу гэта я іду, каб выратаваць пасады зменнай так, што мы збіраемся зрабіць, гэта - у Кохана, што вы робіце, каб захапіць аб'ект паведамленні гэта накшталт грувасткай, але вы павінны зрабіць тое, што называецца ORM :: завода, а затым вы праходзіце ў назве мадэлі вы хочаце, і гэта вяртае аб'ект ORM, які прадстаўляе гэтую мадэль. А потым, як я ўжо сказаў, калі мы пашыраем аб'ект ORM, мы атрымліваем ўсе гэтыя метады бясплатна, так, напрыклад, мы атрымліваем гэтая новая функцыя называецца "знайсці ўсе" якая аўтаматычна вяртае кожны пост у базе дадзеных, які даволі зручна. І зараз у целе Я збіраюся вярнуцца першы пост і вяртае яго цела. І, вядома, мне трэба стварыць пост, так што давайце ўставіць новую пасаду. Я скажу: "Брендон, мой самы першы пост." Ўзрушаюча. І зараз мы збіраемся пайсці ў блогах і калі ўсё працуе добра - о, гэта нейкі іншы нямы правоў доступу да файлаў, што зноў. Трымайся 1 секунды. Гэта свайго роду абсурд. Там мы ідзем. Добра. Я ўсталяваў гэтую праблему дазволаў. Гэта спрабаваў стварыць некаторыя файлы і некаторыя часопіс, і дазволаў, зноў жа, не былі належным чынам ўстаноўлены, і я зрабіў гэта так што гэтыя файлы былі даступныя для запісу і выкананы таму ён можа на самай справе ўвайсці на рэчы. Зараз гэта дае мне яшчэ адзін выключэнняў прымаўку: "Клас ORM ня знойдзены," і гэта таму, што я забыўся яшчэ адзін крок. Гэта вельмі дрэнна. У файле тэчкі пачатковай загрузкі, ёсць гэтыя модулі тут, якія вы можаце выбраць для ўключэння або адключэння. Гэта куча розных функцый, якія вы можаце выкарыстоўваць у Кохана, які з'яўляецца свайго роду добрым. Напрыклад, яны маюць модуль аўтэнтыфікацыі , Які можна выкарыстоўваць для аўтэнтыфікацыі карыстальнікаў. У іх ёсць модуль кэшавання, калі вы хочаце рэалізаваць свайго роду кэшаванне таму канец, каб зрабіць працу прыкладання хутчэй і яшчэ шмат чаго. Мы павінны даць базу дадзеных і модуль ORM, таму што, як я ўжо сказаў, мы выкарыстоўваем базу дадзеных, відавочна, і мы таксама павінны ўключыць модуль ORM, , Таму што мы хацелі б мець дадатковую функцыянальнасць, што прыемна мець. Усё, што я павінен зрабіць, гэта раскаментуйце гэтыя 2 радкі, і цяпер, калі я абнавіць, ён даў мне новую памылку. Там сказана: «Клас Model_Post ня знойдзены." Зараз гэта добрая праблема ёсць. Давайце паглядзім. Зрабіць грамадскасці. Кол-Пачакай. О, дарагі. Я не ведаю, чаму гэта не ў стане знайсці, што. Гэта сапраўды дзіўна. У мяне ёсць гэты клас прама тут. Я мяркую, што, магчыма, прыйдзецца - а. Я так па-дурному. Я забыўся дадаць PHP тэг. Вось чаму. Цяпер я павінен адмяніць, што 1 змены, якія я толькі што зрабіў. Добра. Там мы ідзем. Гэта было сапраўды па-дурному. У мяне не было уступнае PHP тэг. Але як вы можаце бачыць, цяпер ён працуе правільна, ці не так? У нас ёсць 1 паведамленне. Мы захапілі першы пост, і зараз мы раздрукавалі яго цела. Вялікі. Фантастыка. Любыя пытанні да гэтага часу? Не-е? Ёсць пытанні? Такім чынам, мы толькі што стварылі паштовае мадэль, вельмі просты, і мы збіраемся дадаць некаторыя функцыі ў далейшым. Мы можам дадаць праверак і фільтрацыя. Праверкі з'яўляюцца адной з рэчаў, што рамкі вырашыць для вас вельмі, вельмі добра, і я не думаю, што вы, хлопцы, павінны былі зрабіць гэта для вашага CS50 PSet, але калі вы робіце вэб-распрацоўкі для вашага канчатковага праекта, вы, верагодна, будзеце жадаць, каб зрабіць свайго роду праверкі, як бы ня мелі пустыя імёны карыстальнікаў, можа быць, маючы пароль, па меншай меры даволі падрабязна, і таму падобнае. І гэта сапраўды грувасткім рэалізаваць гэтыя рэчы самі, і ў значнай ступені кожны вэб-фреймворк зробіць гэта за вас і дазваляе зрабіць гэта ў вельмі чыстым шляху. І мадэль, дзе вы звычайна выказваць гэтыя правілы праверкі, таму што гэта праверка, ці з'яўляецца мадэль справядлівая ці не. Але цяпер, мы збіраемся, каб пакласці, што пазней, і зараз мы збіраемся працаваць на іншай частцы, і мы збіраемся, каб паспрабаваць зрабіць новае ўяўленне , У якім пералічаныя ўсе паведамленні. Этапы стварэння новага дзеянні для ўключэння ў пералік ўсе пасты з'яўляецца, каб захапіць спіс усіх паведамленняў а затым зрабіць спіс усіх паведамленняў праз прадстаўленне. Прама тут, дастаткова, на шчасце, мы ўжо схапіў ўсе паведамленні выкарыстоўваючы гэтую першую лінію, знайсці ўсе функцыі, і зараз, што мы збіраемся зрабіць, гэта да гэтага часу Я непасрэдна усталяваўшы тэкст адказу перадаўшы радок, але цяпер я хачу выкарыстоўваць уяўленне, і розніца паміж мэтай і проста робіць гэта з'яўляецца, з тым я магу мець добры, вялікі шаблон HTML, і што я магу зрабіць, гэта перадаць яго некаторыя зменныя і тады выгляд аўтаматычнае запаўненне яго шаблон выкарыстоўваючы гэтыя зменныя. Што я буду рабіць гэта я ствару новы погляд, і я буду называць выгляд нешта накшталт "блогу / індэкс" і я збіраюся ў асноўным звязваюць гэта - о, што я пішу? Мой мозг дзесьці ў іншым месцы. Я збіраюся звязаць паведамлення зменных да меркавання, так што спосаб выгляд мае доступ да гэтага запісу зменнай. І вось цяпер мне трэба стварыць гэты пункт гледжання, так вось у нас ёсць гэтая папка пад назвай "Праглядаў", і першы, я збіраюся стварыць новую тэчку пад гэтай назвай "Дзённік". Гэта добра. Такім чынам, мы можам мець добры іерархію для нашых поглядаў. А потым я збіраюся стварыць яшчэ адзін файл у там пад назвай "index.php". Ўзрушаюча. На самай справе, давайце іх абодвух тут. Стварэнне файл прадстаўлення, верагодна, самая простая частка ўсяго гэтага, і гэта, верагодна, рэчы, якія вы ўжо знаёмыя з. Мы збіраемся зрабіць нешта сапраўды проста, пачынаюць казаць: «Мой спіс паведамленняў у блогу." Тады мы можам прайсці, і мы можам ітэрацыю масіва паведамленняў, захапіць кожны пост і сказаць нешта накшталт - можа быць, дадаць радок а затым раздрукаваць аўтара і цела. Гэта мае сэнс да гэтага часу? І давайце паглядзім, ці працуе ён. Нічога не адбылося. Я здзіўляюся, чаму. О, я прапусціў адзін крок. Вельмі па-дурному з майго боку. Я стварыў выгляд, але я не ставіў меркаванне як адказ, так што вам трэба зрабіць яшчэ 1 рэч. Вы павінны зрабіць "гэта цела адказу" і ўсталяваць яго, каб быць выгляд. Там мы ідзем. У нас ёсць загаловак, а затым у нас ёсць пост, і толькі для удараў, давайце ўставіць іншую пасаду так што мы можам убачыць спіс. І ўставіць гэтыя 2 паведамленні, і цяпер, калі я абнавіць старонку, мы бачым усе гэтыя паведамленні тут. Ці мае гэта сэнс да гэтага часу? Так, пытанне? О, добра. Як вы можаце бачыць, мы былі ў стане аддзяліць ўсе гэтыя коды з на розныя секцыі, а затым вы можаце бачыць, што гэта найбольш ясна з выглядам кода. Гэты файл тут, які ўяўляе пункт гледжання, яно клапоціцца толькі аб прадстаўленні дадзеных, адлюстравання дадзеных. Гэта перадаецца нейкі дадзеных, і ўсё гэта робіць проста паказаць яго вам. Ва ўсіх іншых частак кода, вам не прыйдзецца турбавацца аб адным з гэтага, і дакладна гэтак жа, на ваш погляд код не прыйдзецца турбавацца нічога пра як атрымаць доступ да базы дадзеных і гэтак далей і гэтак далей, які сапраўды добры і робіць ваш код нашмат больш лёгкім ў абслугоўванні. Як я ўжо сказаў, праглядаў, яны дынамічнымі, гэта 1 файл, але ён будзе генерыраваць розныя прадстаўлення на аснове зменных вы на самой справе праходзяць у, і, акрамя таго, ёсць шмат розных дапаможных функцый што вы можаце выкарыстоўваць, каб дапамагчы вам напісаць свой код хутчэй, якія я пакажу вам, усяго за секунду. Так. [Студэнт] Так $ 0 з'яўляецца кантролерам, ці не так? Гэта другое. Пытанне ў тым, ці будзе $ 0 кантролер? $ 0 з'яўляецца зменнай я стварыў тут. Я стварыў выгляд у першую чаргу. Я прызначаны яго некаторай зменнай. Тады я перадаў яго ў гэтай функцыі, усталяваць яго ў якасці целе адказу. Ці мае гэта сэнс? [Студэнт] Так погляд :: завод, выгляд як клас ці бібліятэка [неразборліва] Завод функцыя? Гаворка ідзе аб функцыі погляд :: завода, і ў асноўным гэта нейкая больш аб'ектна-арыентаванае праграмаванне сутнасці. Паглядзець гэта клас выгляд, і ў яго ёсць метад, званы "Фабрыка" і гэта спосаб, каб захапіць аб'ект, які пад назвай "блог / індэкс". І вось яшчэ трохі аб'ектна-арыентаванае праграмаванне матэрыял што я не буду ўдавацца ў тут занадта шмат. Цяпер відавочна, што мы хочам стварыць новыя паведамленні, але мы не хочам, каб гэта зрабіць праз базу дадзеных, таму мы збіраемся стварыць новае дзеянне для стварэння новай запісу, і ёсць шмат рэчаў, што мы павінны зрабіць. Першае, што мы збіраемся зрабіць - давайце возьмемся гэтыя рэчы адну за іншы. Першае, што мы зробім, гэта мы павінны стварыць форму для ўстаўкі новай запісу, але я таксама збіраюся дадаць новае дзеянне першая, так што даданне новага дзеянні так жа проста, як даданнем новай функцыі з вашым кантролерам, і цяпер я збіраюся зрабіць нешта вельмі просты, проста захапіць гэты пункт гледжання і апублікаваць яго, проста паказаць яго для вас. І то зараз я збіраюся стварыць новы файл прадстаўлення, і я збіраюся пачаць пісаць некаторыя рэчы. Што прыемна аб Кохана, што яны даюць шмат розных дапаможных функцый для вас, каб напісаць выгляд код больш лёгка, і 1 з тых дапаможных функцый або дапаможных модуляў складае каля напісання формы. Для напісання формы, я сапраўды не павінны наўпрост напісаць любы HTML сябе. Вы, хлопцы напісалі HTML формы. Вы ведаеце, як гэта можа быць вельмі, вельмі балюча і грувасткай, каб напісаць формы. Гэта не забава, так, на шчасце, мы можам у асноўным напісаць форму з дапамогай Kohana'S ўтвараюць дапаможныя функцыі, каб зрабіць гэта для нас. Мы збіраемся ў асноўным маюць поля для кожнай рэчы ў нас ёсць, так што для аўтараў і адзін для органаў. Мы збіраемся мець этыкетку, і мы збіраемся мець ўваход. І, нарэшце, мы збіраемся мець уяўленне. І як вы можаце бачыць, гэта нашмат чысцей напісаць чым усё, што брудны HTML, які з'яўляецца збольшага добра. Вядома, ёсць і іншыя вэб-рамкі, якія маюць яго яшчэ чысцей, чым, што, але па меншай меры гэта лепш, чым пісаць HTML-код самастойна. Дзіўны, так гэта тое, што вы бачыце. Гэта збольшага брудны, так што я збіраюся дадаць разрыў радка ёсць зрабіць, якія выглядаюць трохі лепш. Ну, вядома, гэта ўсё яшчэ выглядае вельмі, вельмі дрэнна, але мы проста сканцэнтраваны па сваёй функцыянальнасці на дадзены момант, а не на эстэтыку. Няма часу, каб зрабіць усё. І як вы можаце бачыць, зараз у нас ёсць супер асноўную форму, які збольшага добры. Гэты код я б сказаў, чысцей, чым спрабую напісаць HTML сфармаваць сябе, так што гэта прыемна. Што далей? Цяпер нам трэба зрабіць нешта з дзеяннем. Звычайна, калі вы пішаце HTML формы, вы павінны сказаць яму, дзе ён збіраецца адправіць форму. Па змаўчанні ў большасці вэб-платформамі, ён прадстаўляе ў тую ж самую URL, так што ўся справа ў тым, калі вы адпраўляеце запыт дабрацца да / блог / новы, ён павінен паказаць вам форму, але калі вы пасылаеце запыт паведамлення ў / блог / новы з дадзенымі, ён на самай справе павінны паспрабаваць захаваць гэты пост і нешта з ім зрабіць. Тое, што мы збіраемся зрабіць, гэта ў асноўным усё, што мы павінны зрабіць, каб праверыць, ці з'яўляецца гэта запыт паведамленне або запыт Get , Каб праверыць, якія перадаюцца зменныя, якія можна ўсталяваць. І калі зменная паведамленне усталяваны, тое, што мы збіраемся, каб паспрабаваць стварыць новае паведамленне. Зноў жа, мы проста гэта зрабіць, і гэта стварае новую пасаду, і мы літаральна збіраецца яго поля, як гэта, а затым мы збіраемся захаваць яго. А потым я збіраюся перанакіраваць на старонку-паказальнік, каб яны маглі ўбачыць наш спіс паведамленняў зноў. Давайце паспрабуем гэта. Я скажу: "Брэндон" , А затым прадставіць гэты пост, і калі ўсё пойдзе добра, як вы можаце бачыць, гэта перанакіраваны мяне ў індэкснай старонкі, і калі я пракруціць ўніз, у нас ёсць новай запісу. Ура! Так, пытанне. [Студэнт] Што рабіць, калі вы ўвайшлі ў адно і тое ж Вы ўвялі раней? Ці значыць гэта праверыць, каб пераканацца, што вы не дублююцца тое ж самае ўяўленне? Будзьце змаўчанні, няма, таму што па змаўчанні - шкада, пытанне ў тым, калі вы ўведзяце ў тых жа дадзеных у форме і прадставіць, што, ці будзе ён дазволіць вам ўставіць дублікат аб'екта, дубляваць запіс, па сутнасці? Прама цяпер, так, гэта дазволіць вам зрабіць гэта, таму што ў базах дадзеных гэта цалкам дапушчальна мець цалкам радкі, якія паўтараюцца, але калі гэта мае значэнне, то вы можаце дадаць праверак, напрыклад, каб пераканацца, што, калі гэта сапраўды гэтак жа, як тое, што ўжо існуе, то кажуць, што гэта няправільны аб'ект, а затым вы можаце нават сфармулюйце Вашы паведамленні пра памылку і сказаць: "Няправільны таму што гэта ўжо існуе" ці нешта ў гэтым родзе. Але ў дадзеным выпадку, я мог бы проста стварыць нешта дублікат. Зараз давайце паспрабуем і дадаць некаторыя праверак. Праблема з гэтым прама зараз, што Я мог літаральна прадставіць зусім пусты пост. Я магу націснуць гэтую кнопку прама зараз, і там мы ідзем. Вы не можаце сапраўды бачыць гэта, але гэтая дадатковая лінія тут паказвае, што я літаральна новую пасаду. У яго ёсць толькі пусты аўтара і пусты цела, і мы не хочам, каб людзі маглі зрабіць гэта. Гэта дзе праверка прыходзіць цалі Я магу пайсці ў маёй мадэлі аб'екта, і цяпер я магу дадаць новую функцыю, якая вызначае што правілы праверкі я павінен дадаць да гэтай мадэлі каб пераканацца, што гэта сапраўды або паказаць, што гэта значыць быць дапушчальным паведамленне? І я хачу сказаць, што гэта толькі сапраўдны паведамленне, калі абодва аўтар і цела не пусты, і гэта, як вы робіце гэта ў Кохана. Вы ствараеце новую функцыю пад назвай "Правілы", а затым вы ў асноўным вярнуць асацыятыўны масіў , Які вызначае правілы праверкі для гэтага аб'екта. Мы збіраемся вярнуць масіў, а затым тое, што мы збіраемся зрабіць, гэта сказаць "аўтар", яна ідзе да масіву, які ідзе ў іншы масіў пад назвай "не з'яўляецца пустым." А потым я збіраюся сказаць "цела". Добра, і сінтаксіс для гэтага і структура для гэтага можа выглядаць трохі грувасткім і крыху больш складана. Калі вы прачыталі дакументацыю, гэта даволі проста высветліць, Але па сутнасці гэта тое, што вам трэба зрабіць, каб паказаць некаторыя правілы праверкі, і ёсць шмат розных правілаў што Кохана дасць вам бясплатна, як вы можаце дадаць правілы сказаць ён павінен быць не менш гэтая даўжыня. Можа быць, ён павінен быць лікавым. Можа быць, ён павінен быць літарна-лічбавы. Можа быць, ён павінен быць не больш гэтая даўжыня, гэтак далей і таму падобнае. Ёсць шмат розных правілаў, якія дае Кохана для вас, і вы можаце пайсці на іх сайце, паглядзіце дакументацыю, і вы можаце ўбачыць усе розныя рэчы, якія вы можаце зрабіць. Але гэта ўсё, што я павінен зрабіць, а зараз давайце паглядзім, што адбудзецца калі я ўявіць пусты пост. Што адбудзецца? О, не, я атрымліваю памылку. Я атрымліваю выключэнне праверкі. Ну, гэта добра. Гэта сказаў мне, што мая мадэль з'яўляецца несапраўдным, але я не хачу, каб адлюстраваць выключэнне ў маіх карыстальнікаў, калі яны спрабуюць прадставіць нешта недапушчальнае, ці не так? Я хачу даць ім нейкую дружалюбны паведамленні пра памылку калі нешта пойдзе не так. Тое, што мы збіраемся зрабіць, гэта мы збіраемся абгарнуць ўсё ў спроба злавіць цыклу. На самай справе, я думаю, што гэта таксама тое, што вы яшчэ не навучыліся у CS50, таму што З, мова праграмавання C, не мае выключэнняў, але амаль кожны іншую мову ёсць выключэнні, так на самой справе, сапраўды коратка, Выключэннем з'яўляецца тое, што кавалак кода можна кінуць выключэнне, калі нешта ідзе не так, але тое, магчыма, некаторыя іншыя кавалак кода вышэй можа злавіць гэта выключэнне і нешта з ім зрабіць. Напрыклад, у гэтым выпадку кавалак кода, які спрабуе захаваць мадэль, ён правярае мадэль, і калі ён кажа: "Добра, гэтая мадэль з'яўляецца несапраўдным," ён збіраецца кінуць выключэнне, і гэта свайго роду эквівалент у З вы можаце вярнуцца -1 ці нешта ў гэтым родзе. А потым для мяне, гэтая функцыя, мой код на больш высокім узроўні, я магу паспрабаваць злавіць гэта выключэнне і ў асноўным кажуць: "Добра, калі я злавіць выключэнне, што я буду рабіць?" Ці я мог выбраць, каб не злавіць гэта выключэнне, і хай хтосьці вышэй злавіць выключэнне, або калі ніхто не ловіць яго, то ўся праграма завяршае працу і кажа, "Нешта пайшло не так, і я не мог справіцца з гэтым." Але што мы робім, вы абгарнуць кавалак кода ў блока праверкі, і тады вы таксама дадаць тое, што называецца блок злавіць, якая з'яўляецца свайго роду код, які будзе спрабаваць перахопліваць выключэння, якія могуць паўстаць. І таму, калі я лаўлю гэтую канкрэтную выключэнне або несапраўднымі выключэнне, тое, што я збіраюся зрабіць, гэта Я збіраюся ўсталяваць памылкі - я думаю, што гэта, як я гэта раблю - і я збіраюся ўсталяваць памылкі ў нейкі аб'ект. А потым, што я збіраюся зрабіць, гэта калі яна трапляе гэта выключэнне, ён не збіраецца перанакіраваць, і калі ён не перанакіраваць, ён збіраецца выйсці з, калі блог і ўдарыў гэты блог / новы, які хочаце я хачу зрабіць. Калі ёсць памылка, то я хачу, каб вярнуцца ў форму і адлюстроўваць гэтыя памылкі. Цяпер тое, што я хачу зрабіць, гэта я хачу перадаць у гэтых памылак у прадстаўленне. Добра, я думаю, у мяне меркаванне прама тут, і ў асноўным я хачу, каб адлюстраваць гэтыя памылкі, калі яны існуюць. Перш, чым я пісаць HTML для гэтага, я збіраюся вельмі хутка паказаць вам, што структура гэтай памылкі пераменная выглядае, і гэта з'яўляецца добрай практыкай у цэлым. Шмат разоў вы атрымліваеце нешта ад некаторага метаду, некаторая функцыя ў вэб-базы, і вы не ведаеце, што пераменная выглядае, так што вы не ведаеце, як з ёй працаваць. Я збіраюся выкарыстоўваць метад друку г у асноўным раздрукаваць яго. А як вы можаце бачыць, ён кажа мне, што гэта асацыятыўны масіў, і ў вас ёсць ключ, аўтар, паказвае на гэты радок, Аўтар не павінен быць пустым, а іншы ключ, цела, паказвае на іншы радкі, цела не павінна быць пустым. Я, як, добра, халаднавата. Тады я магу перабору масіва і раздрукаваць кожную паведамленне. Гэта ў асноўным як асацыятыўны масіў з кучай паведамленняў. Тое, што я збіраюся зрабіць, гэта "калі памылкі," і я збіраюся стварыць неўпарадкаваных спіс, і я збіраюся для перабору ўсіх памылак. І гэта, і цяпер я збіраюся паспрабаваць падачы гэта зноў, і давайце паглядзім, што мы атрымліваем. Цяпер мы атрымліваем гэты добры спіс памылак, і гэта ўсё яшчэ даволі выродлівыя, але гэта, відавочна, можа быць адфарматаваны, каб добра выглядаць, але асноўная ідэя як раз праз некалькі радкоў кода, мы змаглі праверыць нашу мадэль, пераканацца, што некаторыя палі не былі пустыя, і калі нешта пайшло не так, а затым вярнуцца нейкую паведамленні пра памылку Тады я мог бы прадставіць назад карыстальніку. Вы таксама можаце наладзіць свой праверку так што вы можаце на самой справе маюць паведамленне пра памылку што больш спецыфічныя для вашага прыкладання ці нешта накшталт гэтага. Усё, што, як правіла, які наладжваецца. На жаль, мы мала часу, так што я буду мець, каб адрэзаць жывую сесію кадавання тут. Ёсць куча іншых функцый, якія я хачу паказаць вам у гэтым прыкладзе. Напрыклад, вы можаце дадаць шаблоны для вашага сайта, так можа быць, ёсць нейкі HTML код, які вы хочаце ўжыць да кожнай асобнай старонцы на вашым сайце, і замест ўстаўкі, што у кожным асобным файле гледжання ў вас ёсць, што, відавочна, было бы дрэнны практыкай, вы можаце ў асноўным вызначаюць гэтыя шаблоны, а затым у кантролеры сказаць: "Добра, я з дапамогай гэтага шаблону." "Ці ўсё мае погляды выкарыстаць гэты шаблон." І той, апошняе, што я хачу паказаць вам, а таксама што ў нас няма часу для крос-сайт скріптінга, і ў асноўным я думаю, вы, хлопцы, напэўна, бачылі ў CS50 - Я думаю, што Дэвід Малан, верагодна, казалі пра тое, як можна, як правіла, ўводзяць JavaScript код у - вы казалі пра гэта? Можа быць? Можа быць, не? Але шмат разоў, вы можаце ўкараніць шкоднасны JavaScript код у базу дадзеных чыёй-то, і калі яны не пазбегнуць, што належным чынам, Затым, калі яны ўяўляюць, што дадзеныя назад карыстачу, то гэта можа запусціць нейкую выпадковага кода JavaScript вы не жадаеце каб гэта адбылося, і я збіраўся прадэманстраваць, як вы маглі б зрабіць, што ў Кохана. Гэта на самай справе вельмі, вельмі лёгка. Я мог зрабіць гэта прама цяпер за 2 секунды літаральна. Усё, што вам трэба зрабіць, гэта ў асноўным абгарнуць гэтыя рэчы у тое, што называецца HTML сутнасці. І гэта аўтаматычна пазбегнуць ўсе знакі правільна і пераканайцеся, што вы не атрымаеце гэтую праблему. [Студэнт] Вы няправільна пішацца першы тэст. [Брэндон Лю] О, ой. Добра, гэта ўсё, што я павінен быў падзяліць з вамі на сённяшні дзень. Гэтыя слайды будуць размешчаны, але яны, як правіла, адзіныя рэсурсы, якія вы павінны сапраўды трэба, каб пачаць з Кохана. Вы можаце перайсці на сайт. У іх ёсць кіраўніцтва карыстальніка, і яны таксама маюць API даследчык. Мы можам вывучыць усе розныя функцыі і дапаможныя функцыі, якія яны маюць для вас. Як правіла, яны маюць дастаткова інфармацыі на вэб-сайце што вы можаце выкарыстоўваць, каб пачаць працу і пачаць працаваць з Кохана. Ёсць не так шмат падручнікаў, я думаю, для Кохана, за межамі тое, што яны маюць на вэб-сайце тут, так што гэта, верагодна, ваш лепшы выбар. Але калі вы хочаце, каб пайсці з вэб рамках і вы не хочаце, каб падабраць новую мову, і вы хочаце нешта, што адносна лёгкі і мае лёгкі крывой навучання, Я вызначана прапанаваў бы Кохана. Гэта, верагодна, лепшы прапаноўваючы за гэта. Самае смешнае, аднак, з'яўляецца калі б мы выкарыстоўвалі Рубін на рэйкі, мы маглі б прайграць тое, што мы толькі што зрабілі і, верагодна, больш ва ўзросце да 3 хвілін. Ці жарт, але, даведаўшыся, Рубін на рэйкі не займае значна больш чым гэта было б зрабіць, каб даведацца Кохана. Гэта ў асноўным ваш выбар таго, што вы хочаце выбраць, каб даведацца, але калі вы хочаце атрымаць і працуе хутчэй, Кохана, безумоўна, вельмі добры выбар. Любыя апошнія пытанні перш чым мы скончым? Так. [Студэнт] Як бы мы інтэгруемся, што у рамках CSS, як вы выкарыстоўвалі, калі вы былі інструктаж? Пытанне ў тым, як бы мы інтэгруемся, што з рамках CSS? Тое, што мы, верагодна, зрабіць, гэта мы, верагодна, ўключаюць новая тэчка, дзе мы б зваліць усе нашы файлы CSS, і тады мы б таксама дадаць новы шаблон. У шаблоне мы ўключыць гэтыя CSS файлы каб пераканацца, што яны спасылаюцца на кожнай старонцы, а затым, калі вы на самой справе пішаце HTML, вы проста дадаць адпаведныя класы і яшчэ шмат чаго, і, напрыклад, калі вы выкарыстоўваеце нешта накшталт форме дапаможная функцыя, вы можаце дадаць больш параметраў пасля паказаць, якія класы вы хочаце быць прымацаваныя да розных рэчаў каб яны маглі ўкладваць яго належным чынам, і гэта ў асноўным, як вы пайшлі б. Любыя іншыя пытанні? Ўзрушаюча. Дзякуй за ваш час, і дзякуй, што прыйшлі. Я не збіраўся дадаць вельмі многае іншае, але 1 вельмі хутка, што з'яўляецца ў нас няма спасылку у форму. Сапраўды нямы. Давайце дадамо - на самай справе, на думку, блог, індэкс, давайце ўжо хутка дадаць спасылку, якая ідзе на новую старонку, старонка, на якой мы можам ўставіць новую пасаду. Мы збіраемся зрабіць гэта. Што прыемна, ёсць уся гэтая група HTML дапаможных функцый якія робяць розныя рэчы для вас, так што вы ўжо бачылі сутнасцяў функцыянаваць тут, але яны таксама маюць функцыю з імем "якар", які вы можаце ўвесці ў блог / новы і сказаць: "Даць новы блог". І было б стварыць гэтую сувязь для вас, і гэта, здаецца даволі простае зрабіць, але гэта прыемна, таму выкажам здагадку, што вы рухаецеся свой сайт з дамена 1 у іншую. І калі вы проста выпісаў URL-адрасы сябе, то вам прыйдзецца змяніць усе URL-адрасы. Або можа быць, вы перамясцілі яго з 1 укладзенай у іншую падтэчку. Вы павінны былі б змяніць усе тыя, URL-адрасы сябе, і гэта не весела. Вы можаце выкарыстоўваць гэты якар прама тут, і вы можаце змяніць дамен або ўкладзеных тэчак прэфікс ў файле канфігурацыі адзін раз, а затым яно будзе ўжываць, што ўсюды, і гэта, зноў жа, выдатны прыклад не паўтараць сябе, сушкі код з. Усюды, дзе вы паўтараючы сябе, паспрабаваць атрымаць у нейкі файл канфігурацыі або на іншую функцыю і яна справіцца з гэтым для вас. А самая апошняя рэч, што я хацеў паказаць вам, быў Выкажам здагадку, мы вярнуліся на гэтай пасадзе, і я напісаў некаторыя сапраўды доўгае эсэ, але я забыўся ўключыць маю аўтар. Цяпер, калі я націскаю "Адправіць паведамленне" Я проста страціў усё. Няма! Сапраўды сумна. Такім чынам, як вы спраўляецеся з гэтым? Гэта тое, што мы робім. Што мы робім тут для гэтых ўваходных і тэкставай вобласці функцый, калі ўключыць другі параметр, тое значэнне гэтага другога параметру будзе тое, што поле будзе першапачаткова запаўняецца. Тое, што мы маглі зрабіць, гэта ў нашым кантролеры блогу, мы маглі звязаць іншую зменную. Назавіце гэта «каштоўнасцяў» можа быць. І прайсці ў паштовай масіва, у літаральным сэнсе. Гэта азначае, што калі пры праверцы адбыўся збой, прайсці да мяне на пошту масіў, я прадставіў ад апошняга запыту, і, такім чынам, я магу выкарыстоўваць значэння з майго апошняга прадстаўлення для паўторнага запаўнення палі. Цяпер я магу зрабіць нешта накшталт значэнняў аўтара і каштоўнасці цела, і такім чынам цяпер, калі я зрабіць некаторыя выпадковыя рэчы і націсніце кнопку "Адправіць паведамленне", то ён застаецца там. Але мы збіраемся сутыкнуцца з іншай праблемай. Гэта працуе, але калі я перайсці на старонку ў самы першы раз, гэта будзе крах, і гэта таму, што ў самы першы раз мы ідзем на старонку, гэты пост пераменная не вызначана. Гэта нуль. Ён не існуе. А тое, што мы хочам сказаць, калі існуе гэты ключ, затым вяртае значэнне гэтага масіва, але калі ключ не існуе, то я атрымаў пустую радок. Гэта функцыянальнасць мы хочам тут. Мы хочам, каб праверыць, ці існуе ключ, перш чым спрабаваць атрымаць доступ да масіву, і досыць на шчасце, Кохана таксама дае нам дапаможную функцыю для гэтага. У іх ёсць ўвесь гэты набор функцый пад назвай ARR, скарачэнне ад масіва, і ў іх ёсць 1 функцыю пад назвай "атрымаць", і вы можаце перадаць у масіве, і вы можаце перадаць у імя ключа. Затым, у асноўным тое, што ён будзе рабіць гэта ён будзе спрабаваць атрымаць гэты ключ, але калі што ключ не існуе ў масіве, затым ён вернецца пустым, ці мы можам таксама пазначыць значэнні па змаўчанні, я лічу, , І гэта прыемна. Цяпер, калі мы робім тое ж самае яшчэ раз, Затым вы бачыце зараз ён працуе ў першы раз вакол, і зноў жа, калі мы набярэм ў некаторых выпадковых рэчаў і паспрабаваць уявіць, то ён застаецца там. І я думаю, я магу таксама паказаць вам, як дадаць шаблон вельмі хутка. Што мы можам зрабіць у першую чаргу, мы можам дадаць новы від пад назвай "template.php" у тэчцы Views, і тое, што я збіраюся зрабіць, гэта я збіраюся раздрукаваць тое, што называецца "Змест" які будзе маім асноўным зместам. А можа быць, у самым нізе я збіраюся дадаць, скажам, Аўтарскія правы. [Неразборліва студэнт пытанне] [Брэндон Лю] Можа быць, гэта супер базавы шаблон я хачу выкарыстоўваць. Я хачу ёсць папка з маім аўтарскім правам на кожнай старонцы, і зараз тое, што я збіраюся зрабіць у маёй кантролера Цяпер замест таго каб сказаць: "пашырае кантролер" Я збіраюся сказаць, "пашырае Controller_Template," і зараз замест таго каб сказаць: "цела адказу роўная гэтага пункту гледжання," Я збіраюся сказаць, "гэта змест шаблон -" і я думаю, - мне паставіць знак роўнасці? Я забываю. Так, я так і думаў. А цяпер я ўсталяваў, што змесціва зменнай роўным выгляд. Я магу зрабіць тое ж самае тут. І цяпер, калі я абнавіць, вы можаце бачыць зараз гэты аўтарскіх дадаецца там, і проста зрабіць некаторыя выпадковыя пост, а затым, зноў жа, вы павінны ўбачыць, што аўтарскае права з'яўляецца ў самым нізе старонкі. Вялікі. Вось усё, што я хацеў паказаць вам, хлопцы. [Апладысменты] Ёсць пытанні? [CS50.TV]