[Семинар] [Kohana: А Лесни PHP Рамковниот] [Брендон Лиу] [Универзитетот Харвард] [Ова е CS50.] [CS50.TV] Здраво на сите. Моето име е Брендон. Јас сум помлад тука во прави колеџ компјутерски науки, и денес ние ќе се зборува за Kohana, што е PHP Веб развој рамка. Денес се случува да биде во живо кодирање семинар, па јас сум во основа ќе поминуваат 5-10 минути објаснувајќи што Kohana е, и тогаш јас сум буквално случува да се изгради супер едноставен блог за вас, токму тука буквално од нула. Ние ќе го симнете го кодот од веб-сајт Kohana, и ние ќе да се започне изградба на блог, и се надевам дека тоа ќе биде многу поучно, бидејќи ќе видите можеби можеби и јас ќе се направи некои грешки, и ќе видите ме закрепне од нив, или ќе видите мојата мисла процес, како јас се изгради преку овој блог, а во меѓувреме, исто така, ќе се запознаат со рамка себе. Се надевам дека тоа ќе биде многу поучно вежба. Прво, она што точно е рамка? Ако сте биле земајќи CS50 досега, не сте навистина работел со било кој уште рамки, и нешто е тоа. Веројатно сте се направи 1 веб развој pset веќе, и да речеме ќе продолжи да се изгради веб-сајтови и да ја задржите зграда веб-сајтови. Ќе почне да се забележи неколку нешта. Првото нешто што ќе забележите е дека сте веројатно се прават истите работи одново и одново цело време, работи како чистење корисникот влезни податоци, работи како организирање на вашите датотеки во одреден начин. Од друга работа што ќе исто така, веројатно забележите е дека вашиот код може да почне да станат многу, многу неуредна, и може да го оставиме неуредна и само имаат многу тешко време одржување на неа, или може да почнат да структура вашиот код и што го прави модуларен на одреден начин да се направи повеќе одржување. Ова е местото каде што веб рамки основа дојде внатре Овие луѓе кои биле изградени голем број на веб-сајтови, велат тие, "Ние не треба да се повтори ова секој пат кога ние се изгради веб-сајт." "Зошто не можеме само да пакет, кој го прави сите овие работи за вас секој пат кога ќе сакате да се изгради веб-сајт? " И така што кога ќе се направи нов веб-сајт, можете само да се фокусира на она што токму тоа особено сајт е за. Вие не треба да се повторува на сите различни конфигурациски и сепарација на кодови и пишуваме код дека често треба да направите кога сте правење веб-сајтови. Идејата е дека рамка ви овозможува да пишувате на повисоко ниво код без да се грижите за пониско ниво детали. А пониско ниво детали може да биде нешто како се занимаваат со чистење корисникот влезни податоци. Тоа е нешто што навистина не треба да треба да се грижите. Треба да се фокусираат на она што вашиот веб-распределба е всушност околу. Што ја елиминира многу boilerplate код. Тоа е архитектура за вашиот проект. Од најпопуларните еден ќе биде Модел-View-Controller, што јас ќе одам да се зборува за една секунда. И многу пати овие рамки отелотворуваат збир на процедури, правила, и најдобрите практики за да ги користите така што кога ќе ги усвојат веб рамка што треба да го напишете вашиот код на одреден начин, и тоа е обично договорен збир на принципи од страна на заедницата која е општо прифатена за да биде добар начин на пишување код. Тоа го прави вашиот код повеќе одржување, уште употребливи, така натаму и така натаму. И, конечно, нешто што сакам да го истакнам за рамки наспроти библиотеки е ова идеја за инверзија на контрола, и работата е тоа. Разликата меѓу библиотеката и рамка е дека со библиотека се уште пишување на главната програма, а ти си вид на повикувајќи се на библиотека и повикување на библиотеката да се направи нешто за вас. Разликата меѓу библиотеката и рамка е дека рамка почнува со контрола, и тоа се повикува вашиот код, па можете да мислам на тоа како - ова е зошто тоа се нарекува рамка - на рамка обезбедува оваа рамка и структура за вашиот код, и ви се пополни во дупките, и ова ќе стане повеќе очигледна во вториот кога ќе ме види почнете да пишувате код во контекст на рамката. Ќе видите дека сум пополнување на празнини, и рамката е вид на контролирање на сите движат парчиња, и јас треба да се стави на парчиња на вистинските места. Денес ние ќе зборуваме за Kohana, кој е еден од многу PHP рамки. Постојат веб рамки, а тука се и оние во речиси секој јазик, и јас сум подигање Kohana бидејќи Kohana е веројатно и општо признати како најлесниот PHP рамка да ги собереш. Тоа е најмногу лесен. Постојат и други оние таму, кои доаѓаат со многу, многу повеќе функции, но тие имаат тенденција да биде многу потешко да ги собереш. И, конечно, Kohana користи MVC архитектура. Тоа е доволно лесни дека ние буквално може да се изгради на проектот токму тука, точно пред твоите очи, и можете да доста следат заедно прилично лесно. Што е MVC архитектура? Таа се залага за модел-View-Controller, а можеби ако мислиш за кодот сте биле пишување досега за некои од вашите веб развој psets може да биде во можност да видите некои од ова, но обично кога ќе почнете да пишување посложени веб апликација, поделбата помеѓу овие 3 сегменти станува се повеќе и повеќе очигледна. Јас изложени на MVC тука вид на како стек, и често ќе слушнете луѓе се зборува за Купишта во веб развој, и ова е за да се илустрира идејата дека секој слој, секоја компонента навистина се обидува да комуницира само помеѓу 2 други компоненти. Некој пристапи вашиот веб-сајт како клиент или прелистувач. Тие комуницираат со вашата програма преку погледот код. Погледот код поврзува со контролорот. Контролорот се поврзува со моделот, и моделот се поврзува со SQL база на податоци. И не постои подрипнувајќи помеѓу ако напишете вашиот код правилно. Што овие работи направам? Моделот суштина е парче од код кој се занимава со вашите податоци. Нешто што се занимава со вашата база на податоци, со објекти кои ќе ги чувате, или прибирањето оние објекти во базата на податоци, Тоа е се постапува од страна на модел. Можеби имаш предмети во вашата база на податоци. Ние ќе се создаде модел и имаат врска со мислењата, па еден пост може да има некои атрибути на тоа. Може да имаат функции во целиот чување на оние мислења и прибирањето мислења или филтрирање на мислења и така натаму и така натаму, и тоа е сите го кодот што е постапува од страна на модел. Контролорот е вид на апликација логика, и многу различни нешта може да тргне во примената логика. Ако зборуваме на различни API-то, кои можат да бидат, каде што си имаш работа со примена логика. Ако се обидуваш да мора да се донесе во податоците од повеќе различни модели и мора да ги комбинирате, на некој начин, што често може да се постапува од страна на контролорот. На пример, на Фејсбук, ако некој пријател, тогаш можеби тоа чин на воспоставување на тој однос може да се направи од страна на контролорот. И, конечно, погледот е код кој е генерирање на она што всушност се види. А многу пати Мислам дека во CS50 psets тие навистина не ве охрабруваме момци да се одвојат овие 3 нешта. Најверојатно ќе ја имаат оваа голема, долга датотеката каде што на врвот ќе се направи некои SQL пребарување и можеби не некои обработка на податоците што извадени од базата на податоци, и тогаш го имате сите ваши HTML на дното. И може да најдете дека како ќе се создаде повеќе и повеќе страници дека си оди за да имаат некоја код повторување, а исто така, она е вашата датотека добива навистина голема и долга и станува тежок за употреба да се справат. Причината зошто MVC е толку добро смета е за голем број на причини. Првата работа е нешто што се нарекува поделба на загриженост што е идејата дека кога имаш - идеално 1 парче код треба да се направи 1 работа и го направи тоа навистина добро, и не треба да се комбинираат парчиња на код кои го прават различни нешта. На пример, погледнете кодот и модел кодот, тие навистина не треба да бидат поврзани. Тие не мора да бидат во иста датотеки, па кога ќе може, одделете ги надвор па тоа е лесно да се одржуваат. Од друга работа е кодот повторна употреба. Може да најдете себеси пишување на истата SQL пребарување или прави слични прашања кои би можеле да бидат апстрахирани во 1 функција, и тоа е идејата зад модели и контролори, имајќи го во посебна функција кои можете да повторна употреба на различни места во вашиот проект. И, конечно, тоа е врзан за сушење вашиот код, или не си се повторува, не се повтори. Ова е многу разбирлива во развој. Секогаш кога ќе може, да не сакате да се повторува, бидејќи ако се повторува,  тоа е многу повеќе скапи за одржување. Ако сакате да го смените 1 работа, ќе мора да го промени насекаде, и дека води до грешки, и тоа е ужасно. Ред. Било какви прашања досега за Kohana на сите? Одлично. Сега ние ќе се нурне во живо кодирање сесија, и се надевам дека се оди добро. Одам да се основа да се изгради овој сајт на еден од моите оддалечени сервери, и на тој начин вие момци можат, исто така, погледнете ја веб страната и да пристапите до веб-сајт, а исто така и на животната средина е подобро конфигуриран од мојот далечински машина, бидејќи тоа е водење Линукс наместо OS X. Ние сме буквално ќе започне. KohanaFramework.org. Одам да го симнете го кодот од веб-сајт. Одам да го копирате линкот адреса, одат на мојот сервер, да го преземете, и јас одам да го извлече. [Студентите] Што е најголемиот можете да направите текстот? [Брендон Лиу] Дали е тоа подобро? [Студентите] Дали е тоа остварливо? [Брендон Лиу] Да, тоа е во ред. Јас ја преземале ZIP датотека и отпакува дека во директориумот наречен Kohana, и ние ќе да се преименува дека CS50-Kohana, и ајде да одиме внатре Страшни. Тука ќе видите еден куп на различни датотеки. Повеќето од вас може да се игнорира - Не сме случува да поминат низ секоја датотека што е тука бидејќи на нашето време ограничувања, но генерално кога ќе го инсталирате Kohana, првото нешто што го правите е да одите до директориумот, и вие во основа ќе направи некои тестови и какво ли не животната средина да бидете сигурни дека вашата околина е правилно поставен да работи Kohana и бидете сигурни дека сè е во ред. Можете да видите повеќето работи поминаа, но генерално секогаш работат во овој проблем 1 каде што се жали дека некои директориум не може да се запишува, и тоа е затоа што на некои дозволи. Не знам колку сте момци го научиле за пермисии во CS50, но ако се направи веб развој, си оди за да се кандидира во ова прашање многу. Одам да се направи тоа запишуваат и мислам дека, исто така, треба да - постои и да одиме. Океј, па сега може да се види сè помина, и сега ќе ви кажам да се преименува install.php датотека. Одам да се преселат на install.php датотека за installed.php, и сега, ако јас се освежи, тоа ми дава некои грешки, и ова е местото каде што дебагирање влегува внатре Ова е местото каде што можете да видите она што е, всушност, ќе се случи. Работата е, по дифолт, Kohana претпоставува дека вашиот проект е во root директориумот на вашиот домен, па тоа се очекува да биде на demo.brandonkliu.com. Ние мора да го кажат дека тоа е всушност е во подпапка. Тоа е во подпапка наречена CS50 Kohana. Работата е, тоа е погрешното толкување CS50-Kohana како нешто друго, за што јас ќе да ви објаснам во секунда. Но јас треба да ти кажам дека е нешто што е да се очекува. Она што ние ќе треба да направите е ние ќе одиме во оваа папка наречена bootstrap.php, кој е конфигурацијата папката каде што многу различни нешта се поставени. Ја отворам дека до. Тогаш можеби една од првите работи што ќе направите е да го промените временската зона. И тогаш ајде да видиме. Аха! Токму тука. Постојат еден куп на различни конфигурација изреки овде, но оној што го барам е ова нешто што се нарекува база рачно, И по дифолт јас да го постави да Kohana, но јас ќе одам да го промени тоа да CS50-Kohana, и мислам дека треба да го поправам. Да, одлично. По дифолт, да се види дека тоа е работа, што се вели, "Здраво светот." Каде што доаѓаат од? Како дојдовме до Здраво светот? Каде точно е кодот кој всушност го напишал тоа? Да се ​​разбере дека, јас ќе се воведе овој концепт наречен рутирање. Доста сите веб рамки имаат концепт наречен рутирање, која е парче од софтвер кој ќе сајтот одредена рачно до одреден дел од кодот во рамките на вашиот рамка. На пример, ако имате некои рачно и одите во некои рачно како foo.com / блог / сите тогаш што рамката се случува да се направи - или барем она што Kohana се случува да се направи - е тоа се случува да се најде класа наречена контролер блог, и тоа се случува да се кандидира на функцијата по име акција сите. Знам дека зборувам за класа и функции, и знам дека вие момци не се опфатени класи и функции во CS50 сеуште, но сега за сега, може да се мисли на часови како само една група на функции, начин на групирање функции заедно. Тоа е навистина сите што треба да знаете. Сега ако гледаме на нашите папка структура, во внатрешноста на апликација папка не постои друга папка наречена класи, и други папки се нарекуваат контролор и модел. Ако се погледне во внатрешноста на контролор папка, ние се види дека постои датотека наречена Добредојдовте, и можете да видите тука е класа наречена контролор Добредојдовте, и таму е функција наречена Акција индекс, и она што го прави тоа е тоа се поставува на телото на вашиот одговор на Hello World. Тоа е каде што кодот се пишува. Од друга прашање е, добро, јас не одат на бла, бла, бла, / добредојден / индекс. Како ми завршуваат тука? Па, тоа е едноставно поради тоа што тука на дното на нашите подигање датотека каде што го постави нашиот правци можете да видите дека тие го поставите на некои стандардно за вас. Стандардно контролер е добредојдена. Стандардното дејство е индекс. Тоа е зошто кога ќе стави ништо таму, автоматски отиде во Добредојдовте контролер а индексот акција. Се направи смисла досега? Сега, може да сторат повеќе отколку само одат на контролор и одредена акција. Можете исто така да се помине во параметри на контролорот. Само како пример, Одам да додадете друга акција на оваа контролер за да ви покаже. Да ја наречеме оваа акција на ехо, бидејќи тоа се случува да ви кажам она што ќе го даде, и така јас сум во основа ќе го дофати параметар кој се случува да бидат испратени преку мене на рутирање на програмата, и како што можете да видите овде, оваа линија токму тука, можете да видите дека ова во основа значи дека имате контролер, и имаш /, и имаш акција, и имаш друг /, и дека ќе биде параметри, и бидејќи имаме ова име проект во аглести загради, тоа значи дека ние сме именување овој параметар проект. Подоцна во моите контролер кодот ако сакам да го дофати со одржи на тоа параметар, Можам да го користам кодот напишав, најдете параметар име проект. Тоа е она што го направив тука, а јас ќе одам да се врати и да каже, "Вие рековте" тоа. Па сега ако одам на нашата веб-страница, Одам да cs50-kohana/welcome/echo/Helloooo-- О, тоа е во право. Постои 1 чекор заминав надвор. Ова е дел од живеат кодирање идеја. Еве 1 работа. Ајде да видиме. Па нормално стандардно со многу од овие веб апликации мора да се вклучи оваа index.php нешто во вашиот URL-то, бидејќи идејата е index.php е вид на влезна точка на вашата апликација, но се разбира, тоа е вид на досадни да го имаат. Вие не сакате да имате index.php се појави во вашиот URL-то, и доста секоја веб рамка надвор од кутијата има оваа index.php проблем, и така треба да се преземат некои мерки за да бидат во можност да ја отстрани таа. И така во овој случај, она што ние ќе треба да направите е да одиме да се користи датотека се нарекува. htaccess, и ова е нешто што е специфична за Apache веб сервер, и тоа може да ги правите нештата како преработи адреси и пренасочување URL-и така натаму и така натаму, и Kohana е фино да се обезбеди дефиниција. Htaccess датотека што можеме да го користиме. Како што можете да видите, постои датотека таму се нарекува example.htaccess, и ние ќе го копирате дека да. htaccess. Одам да ја отворите оваа и уреди, и во основа го прави еден куп на различни нешта. Клучните линија можеби ќе сакате да се погледне е во право тука. Идејата е дека ова се поставува правило кое вели, "Океј, она што ќе напишете, prepend index.php на тоа." Можете да се види тоа. На. * Се залага за ништо, се поклопува ништо, и потоа на вториот дел е index.php / $ 0, и $ 0 однесува на она што беше проследено претходно. Дали тоа има смисла? Но навистина клучот нешто што сакате да го промените е промена на овој преработи база, кое е рачно база. Тоа вид на претпоставува каде си работат од. Одам да додадете CS50 Kohana на тоа, и на тој начин сега ако јас се отстрани index.php, тоа треба да работат, а јас ќе одам да додадете некои броеви да ти докажам дека навистина функционира. Звучи добро. Било какви прашања досега? [Студентите] Како ја знам да се направи 123? Е дека аргумент? Токму така. Можеш да мислиш за тоа како аргумент. Но чудно нешто, сепак, е дека начинот на кој тоа го прави Kohana е тие не го прават тоа токму како аргумент. Што треба да го грабне вака. Што треба да го дофати барање објектот и да побара на параметар кој е именуван проект, и тоа име проект доаѓа од тоа подигање датотека дека јас покажа порано, и името проект беше во овие аглести загради, и тоа како ве приграбуваат оние параметри. Страшни. Било какви други прашања? Како што реков, контролори, тие се справи со примена логика, па тоа е 1 пример, каде што може да се види that's - тоа е многу основни, но тоа е сепак примена логика, идејата за грабање на параметар и создавање на нова низа кој вели: "Ти рече бла", а потоа плукање дека назад кон вас. И, генерално, она што го правите е да се создаде различни контролери. Ќе се создаде посебна контролори за различни делови на вашиот вебсајт. Денес ние ќе да се направи еден многу едноставен веб-сајт, и тоа се случува да биде многу основни блог. Ние ќе се направи нов контролер само за мислења на блог. Но, тогаш, ако јас да, исто така, да додаваат коментари на блог пост, тогаш јас најверојатно ќе сакате да се направи нов контролер за овие коментари. Ако сакав да додавате корисници, јас веројатно ќе додадете нов контролер за оние корисници, и воопшто, идејата е дека секогаш кога ќе имаат нов модел, нови податоци објект кој си имаш работа со, имаш еден контролер за податоците објект. Денес ние сме само оди на работа со 1 на податоци објект, и дека ќе биде мислења, и, исто така, може да се мисли на објекти на податоци, како што одговара маси. Општо земено секоја маса одговара на 1 тип на податоци објект, па пост маса ќе има 1 пост модел, кои ќе имаат 1 пост контролер одговара дека, и истото за коментари, исти за корисниците, и така натаму и така натаму. И тоа е општо правило на палецот. Таму се случува да бидат посебни случаи каде што може да се разликуваат од тоа, но 90% од времето тоа е она што ви се случува да се прави, и јас ќе ви покажам тоа е она што ние ќе треба да се прави и денес. 1 повеќе концепт пред да нурне назад во кодот, оваа идеја на објектно релациона мапирање. Вие момци имаат веќе направено веб развој pset, и сте виделе дека ќе се направи барање SQL, и што ви се враќа редови. Ќе добиете овие редови, а вие индекс на нив од страна на некои име, името на колоната и маса, и тоа е начинот на кој можете да работат со него, и тоа може да биде малку незгодни. Но освен тоа, ако имате односи во рамките на својата база на податоци, како на пример ако имам коментари и мислења, тогаш можеби и јас сакам да го дофати родител пост на коментар. Ако јас го користам само редови во SQL, тогаш сите може да се добие е проект на родителот пост а не на реалните самата пост. Но, кога ние сме кодирање, она што ние всушност сакаат е да се всушност зграби  родителот самата испраќате понекогаш. Што објектот релациона мапирање го прави е што е потребно за резултатите на базата на податоци за пребарување и го става во објекти за вас, кои се многу поубаво да се работи со од обична низи и редови. На пример, сега кога имам коментар можеби, и јас сакам да го зграби својот родител пост, и јас можеби коментира стрелките пост, тогаш тоа навистина ќе ми даде мислење објект одговара на вистинските родител пост, не само некои проект, што јас инаку би требало да се користи и направи уште еден SQL пребарување за да го дофати пост, кој е тежок и непотребни. И освен тоа, со мапирање на сите овие податоци редови во објекти, исто така можете да прикачите повеќе функции предмети, така на пример, јас разговаравме за тоа како класи се во суштина групации на функции. Можете да мислам на неа, како што. На пример, можеби имам овој пост објект, и можеби и јас би сакал да имаат некој вид на функција прикачени на него , која во основа ми кажува беше неодамна испратени? Беше тоа испратени во минатата недела, вистински или лажни? И тоа е функција што може да се закачите врз тој предмет, и тоа е навистина лесен да се има во истото место, и постојат мноштво на различни функции може да се создаде за овие објекти, и тоа е навистина убаво да се биде во можност да го закачите на класа, на објектот, а ако само имаше редови доаѓаат од вашата база на податоци, тогаш навистина не може да се закачите било функционалност за тоа. Тоа е буквално само податоци. Било какви прашања во врска со тоа на сите? ORMS се многу чести веб развој, и постојат многу различни видови на ORMS, и Kohana има свој ОРМ. Тоа е многу основни, но ќе добие вкус на она што изгледа како. Да се ​​создаде модел за нашиот блог постови, и првото нешто што ние очигледно треба да направите е да се создаде вистински маса во нашата база на податоци за да всушност складираат нашите податоци за оние мислења. Првото нешто што ќе одам да направите е да отидете на phpMyAdmin. Дали сте момци користи phpMyAdmin и пред тоа? Океј, страшно, па вие момци веќе знаете што е тоа, и јас одам да се создаде нова табела наречена Kohana мислења, и тоа ќе биде навистина едноставно. Ќе морам да се најавите назад внатре Сите ние ќе треба да се направи денес е да имаат автор и тело, само Нека биде едноставно. Одам да се создаде таа табела, а сега ние само треба маса претставуваше нашата мислења со 2 области за нашиот автор и нашето тело. Од друга работа јас идам да се направи сега е конфигурирате мојот веб апликација, така што знае како да се поврзете со базата на податоци, и ова, повторно, е нешто што треба да направите со сите веб апликации. Што треба да го кажам корисничко име и лозинка и името на базата на податоци и така натаму и така натаму да дознаам како да се навистина се поврзете со вашата база на податоци. Во Kohana, имаме нешто што се нарекува база на податоци модул, и во папката конфигурација имаме оваа папка наречена база на податоци, и како што можете да видите, постојат еден куп на поставувања мора да се постави тука да го кажам она што е корисничко име и лозинка за базата на податоци, така што всушност може да се поврзе со него. И бидејќи не сакам вие момци да всушност знаеме корисничкото име и лозинката на мојата база на податоци, Имам датотеката каде што веќе сите го постави, а јас ќе одам да копирате и залепите над неа. Страшни. Во ред. Мислам дека тоа е сите конфигурациски треба да сторам, но ајде да видиме. Ние ќе продолжиме да работиме во неа, и ако нешто се урна, тогаш ние ќе го поправам. Сега што јас ќе одам да направите е да, ќе одам да се создаде нов контролер. Или, всушност, ми е жал. Прво морам да се создаде нов модел. Ќе се создаде нов модел наречен Post.php, и она што ние ќе треба да направите е да одиме да го наречеме класа Model_Post. Земете некои синтакса за нагласување на, и така кога јас велам, "се протега на ОРМ", тоа е во основа некои повеќе објектно-ориентирано програмирање, кој за жал вие не го научиле во CS50 сепак, но тоа е прилично лесно да ги собереш. Тоа ми дава сето ова дополнителна функционалност која доаѓа во овој ОРМ пакет, и така да се добие еден куп на екстра функции и какво ли не за слободни, кој ќе ја видите малку во секунда. Токму сега, всушност, сè што ми треба да направите е да ја креирате оваа класа. Јас дури и не треба да направите било какви функција или ништо, но јас сум создаде класата која ја претставува масата, и бидејќи јас сум се прошири оваа ОРМ класа, Јас се еден куп работи за слободни, па за сега ќе не мора да се постави ништо повеќе нагоре. И сега што јас ќе одам да направите е да, ќе одам да се создаде нов контролер, што јас ќе одам да го именува blog.php, и јас одам да го копирате во текот на Добредојдовте контролер па јас не мора да Повторете некои работи, и сега морам да ја преименувате оваа. Сега што јас ќе одам да направите за да ги тестира за да бидете сигурни дека сè е работи надвор, Одам да го зграби првата пост од мојата база на податоци и печатење на телото на пост на екранот. Да го стори тоа што јас ќе одам да се направи првата е Одам да се спаси мислења на променлива, така што ние ќе треба да направите е - во Kohana она што го правите е да го зграби пост објект тоа е вид на гломазна, но мора да се направи ова нешто наречено ОРМ :: фабрика, а потоа ќе помине во името на моделот кој го сакате, и го враќа ОРМ објект кој претставува тој модел. А потоа, како што реков, кога ние се прошири ОРМ објект, ние ги добиете сите овие методи за бесплатно, па на пример, добиеме оваа нова функција наречена "ги најдете сите" кој автоматски се враќа секој пост во базата на податоци, што е прилично лесен. И сега во телото, ќе одам да се вратат промена на првото мислење и да се врати неговото тело. И, се разбира, треба да се создаде еден пост, па ајде вметнете нов пост. Јас ќе кажам ", Брендон, мојата прва пост." Страшни. И сега ние ќе треба да одат на блогови и ако сите работи добро - Ох, ова е некоја друга неми пермисии работа повторно. Се одржи на 1 секунда. Тоа е вид на апсурдот. Таму ќе одиме. Во ред. Јас фиксна таа дозвола проблем. Тоа се обидува да создаде некои датотеки и некои најавите, и дозволи, повторно, не беа правилно поставени, па јас ја направив па оние датотеки се запишуваат и извршна па тоа всушност би можеле да се најавите за да работи. Сега тоа е ми дава уште еден исклучок велејќи: "класа ОРМ не е пронајдена" и тоа е затоа што сум заборавил уште еден чекор. Тоа е премногу лошо. Во подигање папка на датотеката, постојат овие модули тука, кои можете да изберете да ја вклучите или исклучите. Овие се еден куп на различни опции кои можете да одберете да го користите во рамките Kohana, кој е вид на убаво. На пример, тие имаат проверка модул кој можете да го користите за автентикација на корисниците. Тие имаат кеширање модул ако сакате да се имплементираат некој вид на кеширање задниот крај да се направи апликација работа побрзо и какво ли не. Ние треба да им овозможат на база на податоци и ОРМ модул, бидејќи како што реков, ние сме со користење на базата на податоци, очигледно, и ние исто така треба да им се овозможи на ОРМ модул, затоа што ние би сакале да имаат дополнителна функционалност, што е убаво да се имаат. Се што треба да направите е да откоментирај оние 2 линии, и сега, ако јас се освежи, тоа ми даде уште една грешка. Таа вели: "Класа Model_Post не е пронајден." Сега ова е добра проблем да се има. Ајде да видиме. Направете го тоа на јавноста. Не Чекај. Ох, драга. Не знам зошто тоа не е во можност да се најде тоа. Тоа е навистина чудно. Имам оваа класа во право тука. Претпоставувам дека можеби ќе мора да - ох. Јас сум толку глупава. Јас заборавив да додадете PHP таг. Тоа е зошто. Сега морам да го вратите дека 1 промена јас само направив. Океј. Таму ќе одиме. Тоа беше навистина глупаво. Јас не имаат отвор PHP таг. Но како што можете да видите, сега тоа е работи правилно, нели? Имаме 1 порака. Ние зграпчи првата пост, и сега ние отпечатени неговото тело. Одлично. Фантастично. Било какви прашања досега? Не бе? Било какви прашања? Океј, па ние само замислен пост модел, многу основни, и ние ќе го додадете некои функции подоцна. Ние можеме да додадете validations и филтрирање. Validations се една од работите дека рамки реши за вас, навистина, навистина добро, и јас не мислам дека вие момци мораше да го направи тоа за вашиот CS50 pset, но ако се направи веб развој на вашиот финалниот проект, ти си најверојатно ќе сакате да направите некои вид на валидација, како што не има празно кориснички имиња, можеби има лозинка со барем некои должина, такви работи. И тоа е навистина тежок за спроведување на овие работи од нас самите, и доста секоја веб рамка го прави за вас и ви овозможува да го направи тоа во многу чиста начин. И моделот е местото каде што генерално изразуваат тие правила валидација, затоа што тоа е оценување дали моделот е валиден или не. Но, за сега, ние ќе треба да се стави дека до подоцна, и сега за сега ние ќе треба да работат на друг дел, и ние ќе се обидеме и да се направи нов поглед кој ги прикажува сите постови. Чекори кои се вклучени во изработка на нова акција за котација сите мислења е да се дофати со листа на сите мислења а потоа ја даде на листа на сите мислења преку гледање. Токму тука, за среќа доволно, ние веќе ја зграпчи сите мислења со користење на овој првата линија, на најдете сите функција, и сега што ние ќе треба да направите е досега Сум бил директно поставување на телото на одговор со полагање на стринг, но сега сакам да го користите поглед, и разликата помеѓу погледот и само го прават тоа е со цел можам да имам убав, голем HTML дефиниција, и она што можам да направам е тоа одредени варијабли помине а потоа имаат поглед автоматски се доверат својата дефиниција користење на овие променливи. Она што јас ќе правам е ќе се создаде нов преглед, и јас ќе го именува погледот нешто како "блог / индекс" и јас одам да се во основа се поврзе ова - О, што сум пишувал? Мојот мозок е некаде на друго место. Одам да се поврзе на мислења променлива погледот, па на тој начин на гледање има пристап до овој пост променлива. И така сега јас треба да се создаде овој поглед, па тука имаме оваа папка наречена "Погледи" и прв, јас ќе одам да создадете нова папка под она што е наречено "Блог". Ова е убаво. На тој начин можеме да имаме убав хиерархија за нашите ставови. А потоа јас ќе одам да се создаде друга датотека таму се нарекува "index.php". Страшни. Всушност, ајде да ги и двете имаат тука. Изработка на изглед датотека е веројатно најпростиот дел од сето ова, и овие се веројатно работите веќе сте запознаени со. Ние ќе се направи нешто навистина едноставно, започне велејќи: "Мојата листа на блог постови." Тогаш можеме да одиме преку, и можеме да iterate преку постовите низа, зграби секој пост и да каже нешто како - можеби додадете линија а потоа печати од авторот и на телото. Кои го прават смисла досега? И да видиме дали тоа функционира. Ништо не се случи. Се прашувам зошто. О, јас гостите од 1 чекор. Многу глупо од мене. Јас создаде мислење, но јас не ги поставив видите како одговор, така што треба да направите 1 уште нешто. Што треба да направите "овој одговор тело" и да го поставите тоа да биде погледот. Таму ќе одиме. Ние имаме насловот, а потоа имаме еден пост, и само за клоци, ајде да се вметне уште еден пост па може да се види листа. И вметнете овие 2 мислења, и сега, ако јас обновите страницата, гледаме сите овие места тука. Дали тоа има смисла досега? Да, едно прашање? Ох, во ред. Како што можете да видите, ние сме во можност да ги раздели на сите овие кодови од во различни делови, а потоа можете да видите дека е најмногу јасно со поглед код. Оваа датотека тука, што претставува поглед, тоа само се грижи за претставување на податоци, прикажување на податоците. Станува помина некој вид на податоци, и сето тоа само е тоа покажам. Во сите други делови на вашиот код, вие не ќе мора да се грижите за некој од тоа, и слично, вашето мислење кодот не мора да се грижите за ништо како да пристапите на база на податоци и така натаму и така натаму, што е навистина добро и го прави вашиот код многу повеќе одржување. Како што реков, ставови, тие се динамични во таа тоа е 1 датотека, но тоа ќе генерира различни ставови врз основа на променливи што всушност помине во, и освен тоа, постојат голем број на различни помошник функции дека можете да го користите да ви помогне да го напишете вашиот код побрзо, кој ќе ви покажам само една секунда. Да. [Студентите] Значи $ 0 е контролор, нели? Дека втората работа. Прашањето е е $ 0 контролор? $ 0 е променлива Јас создаде токму тука. Јас создаде цел во прв план. Јас го доделен на некои променлива. Тогаш јас го помина во оваа функција, ја поставите како телото на одговор. Дали тоа има смисла? [Студентите] Така е поглед :: фабрика, е поглед како класа или библиотека [нечујни] фабрика функција? Прашањето е за гледање :: фабрика функција, и во основа тоа е малку повеќе објектно-ориентираното програмирање суштина. Глетката е погледот класа, и има метод наречен "Фабрика" и тоа е начин за да го дофати објект кој е наречен "блог / индекс." И тоа е малку повеќе објектно-ориентираното програмирање работи дека јас не одам да си во тука премногу. Сега очигледно, ние сакаме да се создаде нови мислења, но ние не сакаме да мора да го направи тоа преку базата на податоци, па ние ќе да се создаде нова акција за создавање на нов пост, и таму е многу нешта што треба да направите. Првото нешто што ние се случува да се направи - да се справи со овие работи еден по еден. Првото нешто што ние ќе направиме е ние мора да се создаде еден вид за вметнување на нов пост, но јас сум исто така, ќе додадете нова акција прво, па додавање на нова акција е само лесно како додавање на нова функција со вашиот контролер, и сега за сега јас ќе одам да направите нешто многу основни, само го имате овој поглед и по тоа, само да го прикаже за вас. И тогаш сега ќе одам да се создаде нов изглед датотека, и јас одам да почнете да пишувате некои работи. Што е убаво за Kohana е тоа што тие обезбедуваат многу различни помошник функции за да се напише поглед кодот полесно, и 1 на оние помошник функции или помошник модули е околу пишување форми. За пишување форми, јас навистина не треба директно да се напише себе сите HTML. Вие момци имаат напишано HTML форми. Знаете како тоа може да биде навистина, навистина болно и тежок да се напише форми. Тоа не е забавно, па за среќа, ние во основа може да напише форма со користење Kohana е формираат помошник функции да го направи тоа за нас. Ние ќе основа имаат полиња за секоја работа што го имаме, па една за автори и еден за тела. Ние ќе имаат етикета, и ние ќе треба да имаат влез. И тогаш, конечно, ние ќе треба да имаат поднесување. И како што можете да видите, ова е многу почиста да се напише од сите што неуредна HTML, која е вид на убаво. Готово, постојат и други веб рамки кои имаат дури и почиста од тоа, но барем тоа е подобро отколку пишување на HTML себе. Прекрасно, така што ова е она што го гледате. Тоа е вид на неуредна, па ќе одам да додадете линија пауза таму да се направи кои изгледаат малку поубаво. Па, се разбира, се уште изгледа навистина, навистина лошо, но ние сме само фокусирана на функционалност за сега, а не на естетиката. Нема време да се направи сè. И како што можете да видите, сега имаме супер основна форма, кој е вид на убаво. Овој код би рекол е почист отколку што се обидува да напише HTML форма себе, па тоа е убаво. Што е следно? Сега ние треба да се прават работите со акција. Нормално, кога ќе пишувате HTML форми, што треба да го каже каде тоа се случува да ги достават форма да. Стандардно во повеќето веб рамки, го доставува до иста рачно, така што нешто е, ако ви испрати добијам барање да / блог / нови, тоа треба да ви се прикаже форма, но ако пратите пост барање до / блог / нови со податоци, тоа всушност треба да се обиде да го спаси пост и направи нешто со неа. Она што ние ќе треба да направите е во основа сите ние треба да направите за да се провери дали тоа е пост барање или GET барањето е да се провери што се пост променливи можете да го поставите. И ако пост променлива е поставено, тогаш ние ќе треба да се обиде да креира нов пост. Повторно, ние само го направите ова, и дека создава нов пост, и ние сме буквално ќе постави полиња вака, а потоа ние ќе го спаси. А потоа јас ќе одам да ги пренасочи на почетната страница, па тие може да се види нашата листа на мислења повторно. Ајде да се обидеме тоа. Јас ќе кажам ", Брендон," а потоа достави мислење, и ако се оди добро, како што можете да видите, тоа ме пренасочени на почетната страница, и ако јас дојдете до дното, имаме ново вметнува пост. Yay! Да, прашање. [Студентите] Што ако влегле иста работа ќе влезе и пред тоа? Дали тоа да се провери да бидете сигурни дека не сте го удвои исто поднесување? Биде стандардно, не, затоа што по дифолт - Жал ми е, прашање е дали ќе влезат во иста податоци во форма и да поднесе тоа, таа ќе ви овозможи да се вметне дупликат објект, дупликат влез, во суштина? Токму сега, да, тоа ќе ви овозможи да го сторат тоа, бидејќи во базите на податоци тоа е совршено валидни да имаат сосема дупликат редови, но ако тоа не е проблем, тогаш можете да го додадете validations, на пример, да бидете сигурни дека ако ова е иста како нешто што веќе постои, тогаш велат дека тоа е невалиден објект, а потоа можете дури и да го одредите вашиот порака за грешка и да каже, "Невалиден бидејќи веќе постои" или нешто слично. Но, во овој случај, јас само може да се создаде нешто дупликат. Сега, ајде да се обидеме и да додадете некои validations. Проблемот со ова право сега е дека Јас буквално може да поднесе целосно празно место. Можам да кликнете на ова копче токму сега, и таму ќе одиме. Вие навистина не може да се види, но ова дополнителна линија тука укажува на тоа дека јас буквално имаат нов пост. Тоа само има празни автор и празно тело, и ние не сакаме да им овозможи на луѓето да го направат тоа. Ова е местото каде валидација влегува внатре Можам да одам на мојот модел објект, и сега можам да додадете нова функција која го одредува што валидација правила треба да додадете во овој модел да бидете сигурни дека тоа е валидна или да се определи што значи да се биде валидна мислење? И јас сакам да кажам тоа е само валиден пост ако двете авторот и тело не се празни, и ова е како да го направи тоа во Kohana. Ќе креираш нова функција наречена "Правила" а потоа ќе се врати во основа асоцијативна низа што ги дефинира правилата за валидација за овој објект. Ние ќе се врати низа, а потоа она што ние ќе треба да направите е да каже "авторот", таа оди на низа, кој оди во друга низа наречен "не е празен." А потоа јас ќе одам да се каже "тело". Океј, и синтакса за овој и структура за ова може да изгледа малку тежок и малку комплицирано. Ако го прочитате документацијата, тоа е прилично јасна да дознаам, Но во суштина тоа е она што треба да направите за да се определи некои валидација правила, и постојат многу различни правила дека Kohana ќе ви даде бесплатно, како можете да додадете правила за да се каже тоа мора да биде барем на оваа должина. Можеби тоа треба да биде нумерички. Можеби тоа треба да биде алфа нумерички. Можеби тоа треба да биде најмногу оваа должина, па натаму и така натаму. Постојат голем број на различни правила што Kohana обезбедува за вас, и можете да одите на нивниот веб-сајт, погледнете во документацијата, и можете да ги видите сите различни работи што можете да направите. Но, ова е сè што ми треба да се направи, и сега да видиме што ќе се случи ако поднесам празно место. Што ќе се случи? О, не, јас добиеш грешка. Јас добие валидација исклучок. Па, тоа е добро. Таа ми кажа дека мојот модел е невалиден, но не сакам да се прикаже исклучок на мојот корисници, кога тие се обидуваат да ја поднесете нешто не е валиден, нели? Сакам да им даде некој вид на поповолна порака за грешка кога нешто ќе тргне наопаку. Она што ние ќе треба да направите е ние ќе заврши што е во обид фати јамка. Всушност, мислам дека ова е исто така нешто што се уште не научил во CS50, бидејќи C, програмски јазик C, нема исклучоци, но речиси секој друг јазик има исклучоци, па навистина, навистина кратко, По исклучок е нешто што дел од кодот да фрли исклучок кога нешто ќе тргне наопаку, но потоа можеби и некои други парче од код повисоко може да се фати тој исклучок и направи нешто со неа. На пример, во овој случај, на дел од кодот кој се обидува да го спаси модел, тоа потврдува модел, и ако тоа вели: "Океј, овој модел не е валиден" тоа се случува да се фрли исклучок, и ова е вид на еквивалентни на во C може да се врати -1 или нешто слично. А потоа за мене, на оваа функција, мојот код на повисоко ниво, можам да се обиде и да се фати тој исклучок и во основа се каже, "Океј, ако јас се фати исклучок, што сум јас ќе правам?" Или би можел да избере да не се фати дека исклучок и нека некој повисоко фати исклучок, или, ако никој не го фаќа, тогаш целата програма се урна и вели: "Нешто не беше во ред, и не можев да се справи со неа." Но, она што го правиме е ќе заврши дел од кодот во обид блок, а потоа можете исто така да додадете нешто што се нарекува фати блок, кој е вид на кодот кој ќе се обиде да фати исклучоци кои може да се случи. И така, ако јас го фати овој особено исклучок или невалидност исклучок, тогаш она што јас ќе одам да направите е да Одам да го поставите на грешки - Мислам дека тоа е како да го сторам - и јас одам да го поставите на грешки на некои објект. А потоа она што јас ќе одам да направите е ако тоа хитови овој исклучок, тоа не се случува да се пренасочи, и ако тоа не се пренасочи, тоа се случува да излезе од ако блог и го погоди овој блог / нови, кои се сакаат Сакам да се направи. Ако има грешка, тогаш сакам да се вратам во форма и прикажување на оние грешки. Сега што сакам да направите е да сакам да се помине во оние грешки на гледање. Океј, мислам дека имаат поглед токму тука, и во основа сакам да прикаже оние грешки, ако тие постојат. Пред да го напишете HTML за тоа, јас ќе одам да се навистина брзо ви покаже што е структурата на ова Грешки променлива изгледа, и ова е добра практика во целина. А многу пати ќе добиете нешто назад од некои метод, некоја функција во веб рамка, а вие не знаете што променлива изгледа, така да не знаат како да се работи со него. Одам да се користи за печатење R метод за да во основа го испечатите. И како што можете да видите, тоа ми кажува дека е соработник низа, и имаш клучот, автор, поени на оваа низа, Авторот не мора да биде празна, а друг клуч, тело, поени на друг стринг, телото не смее да биде празна. Јас сум како, во ред, кул. Тогаш можам да iterate преку низа и печати од секоја порака. Тоа е во основа како асоцијативна низа со еден куп пораки. Она што јас ќе одам да направите е "ако грешки" и јас ќе одам да креирате неподреден список, и јас одам да iterate преку сите грешки. И ова, и сега ќе одам да се обиде поднесување на оваа, повторно, и ајде да видиме што можеме да се добие. Сега ние се добие оваа убава листа на грешки, и ова е сè уште прилично грда, но ова очигледно може да биде форматирана за да изгледаат убаво, но основната идеја е само во неколку линии на код, бевме во можност да се провери со нашиот модел, бидете сигурни дека одредени области не беа празни, и ако нешто не беше во ред, а потоа се врати некој вид на порака за грешка Тогаш би можел да го претстави назад до корисникот. Исто така можете да го прилагодите вашиот валидација така што ќе всушност може да има порака за грешка што е повеќе специфични за вашата апликација или нешто слично. Сето она што е генерално се индивидуализира. За жал, ние сме работи надвор од времето, па јас сум ќе мора да им ја исклучи живо кодирање сесија тука. Постојат еден куп на други функции кои сакам да покажат за вас во овој пример. На пример, можете да додадете шаблони на вашиот сајт, па можеби постои некој вид на HTML код кој сакате да аплицирате до секоја страница на вашиот сајт, и наместо вметнување дека во секој поглед фајл имаш, која очигледно ќе биде лоша пракса, вие во основа може да се дефинира овие шаблони, а потоа во вашиот контролер се каже, "Океј, јас сум со користење на овој шаблон." "Дали сите моите ставови користете го овој шаблон." И едно последно нешто што сакам да покажат да ви како и дека ние немаме време за е крос-сајт скриптирање, и во основа мислам дека вие момци имаат веројатно се гледа во CS50 - Мислам дека Дејвид Malan веројатно зборуваше за тоа како обично може да се инјектираат JavaScript код во - сте разговаравме за тоа? Можеби? Можеби не? Но, многу пати може да се инјектираат малициозни JavaScript код во нечиј база на податоци, и ако тие не избега кои правилно, тогаш кога тие се присутни тие податоци до корисникот, тогаш тоа може да се кандидира на некои вид на случаен JavaScript код да не сакате да се случи, и јас требаше да се покаже како ти би го сторила дека во рамките Kohana. Тоа е, всушност, навистина, навистина лесно. Јас би можеле да го направите токму сега во 2 секунди буквално. Сите што треба да направите е во основа заврши овие работи во оваа работа наречена HTML субјекти. И дека автоматски ќе избега сите ликови правилно и бидете сигурни дека не се на овој проблем. [Студентите] Вие напишани првиот тест погрешно. [Брендон Лиу] О, Упс. Океј, тоа е сè што морав да го споделам со вас за денес. Овие слајдови се случува да бидат испратени, но тие се генерално само ресурси што навистина му треба за да започнете со Kohana. Можете да одат на веб-сајтот. Тие имаат упатство за корисникот, и тие исто така имаат API Explorer. Ние може да се истражуваат сите различни функции и помошник функции тие имаат за вас. Тие обично имаат доволно информации на веб страната дека можете да го користите за да започнете и да се случува со Kohana. Таму не се толку многу вежби, мислам, за Kohana, надвор од она што тие го имаат на веб тука, па ова е веројатно најдобар залог. Но, ако сакате да одите со веб рамка а вие не сакате да мора да ги собереш на странски јазик, и сакате нешто што е релативно лесен и има лесен за учење крива, Јас дефинитивно би препорачуваме Kohana. Тоа е веројатно најдобрата понуда за тоа. На смешно нешто, сепак, е ако бевме користење на Ruby on Rails, би можеле да се повтори она што го направија и веројатно повеќе во под 3 минути. Не е шега, но за учење Ruby on Rails трае многу подолго отколку што ќе биде потребно да се учи Kohana. Тоа е во основа вашиот избор на она што сакате да изберат да учат, но ако сакате да се нагоре и трчање брзо, Kohana е дефинитивно многу добар избор. Секое последните прашања пред да заврши? Да. [Студентите] Како би се интегрираат дека во CSS рамка како сте ја користеле кога сте биле инструкции? Прашањето е како ќе се интегрираме дека со CSS рамка? Она што ние веројатно би направите е да ние најверојатно ќе ги вклучи нова папка каде што ќе шутнат сите наши CSS фајлови, а потоа ние, исто така, би додадете нова дефиниција. Во дефиниција би вклучуваат оние CSS фајлови да бидете сигурни дека тие се референцира на секоја страница, а потоа кога ќе всушност се пишува HTML, само додадете соодветни класи и какво ли не, и на пример, кога користите нешто како форма помошна функција, можете да додадете повеќе параметри потоа да се определи што класи сакате да биде прикачен на различни нешта па тие би можеле да го стил правилно, и тоа е во основа како ќе одат. Други прашања? Страшни. Ви благодариме за вашето време, и ви благодарам што дојдовте. Јас не одам за да додадете многу друго, но 1 навистина брзо работа е ние немаме врска на форма. Навистина неми. Ајде да додадете - всушност во поглед, блог индекс, ајде навистина брзо додадете линк што оди на нова страница, страница каде што може да се вметне нов пост. Ние ќе го направите тоа. Што е убаво е таму е целата оваа група на HTML помошник функции кои прават различни нешта за вас, така што веќе видовме лица функционира тука, но тие исто така имаат функција наречена "сидро" кои можете да напишете во блог / нови и да каже, "Објави нов блог." И тоа ќе се создаде дека врската за вас, и се чини дека ова навистина тривијални да се направи, но тоа е убаво, бидејќи претпоставувам дека ќе се движат вашиот сајт од 1 домен на друг. И ако само напишав од на адресите себе, тогаш ќе мора да се променат сите URL адреси. Или можеби се пресели од 1 подпапка на друг подпапка. Ќе треба да се променат сите оние адреси себе, и тоа не е забавно. Можете да го користите ова сидро токму тука, и можете да го промените домен или подпапка префикс во конфигурациската датотека еднаш, а потоа тој ќе се однесува дека насекаде, а тоа е, повторно, одличен пример за не се повторува, сушење вашиот код надвор. Каде и да сте сами повторува, се обиде да се извлече во некој вид на конфигурациската датотека или да различна функција и да го имаат се справи со тоа за вас. И многу последното нешто што сакав да ти го покажам беше Претпоставувам дека ние сме назад во овој пост, а јас составен некои навистина долг есеј, но јас заборавив да го вклучите мојот авторот. Сега кога ќе кликнете "Submit пост" Јас само изгубил сè. Не! Навистина тажно. Па, како да се справи со тоа? Ова е она што го правиме. Она што го правиме е тука за овие влезни и текст област функции, ако ги вклучиме втор параметар, тогаш вредноста на таа вториот параметар се случува да биде она што на полето се случува да биде на почетокот населени со. Што можеме да направиме е во нашиот блог контролор, ние би можеле да се поврзе друга променлива. Наречи го тоа "вредности" можеби. И да го положат во пост низа, буквално. Тоа значи дека ако неуспешна проверка, помине да ме пост низа што јас поднесени од последната барање, и на тој начин јас да го користите вредностите од мојот последен поднесување да repopulate полиња. Сега можам да направам нешто слично вредности автор и вредности телото, и на тој начин сега ако јас не некои случајни нешта и кликнете "Submit пост", тогаш тоа останува таму. Но ние ќе да се кандидира во еден друг проблем. Која работи, но ако одам на страната прв пат, тоа се случува да се сруши, а тоа е затоа што прв пат ние одиме на страница, овој пост променлива сè уште не е дефинирана. Тоа е нула. Тоа не постои. И она што сакам да кажам е, ако ова копче постои, потоа се врати вредноста на оваа низа, но ако клучот не постои, потоа се врати празен стринг. Тоа е функционалноста сакаме овде. Ние сакаме да се провери ако клучот постои пред да се обиде да пристапи на низата, и за среќа доволно, Kohana, исто така, ни дава помошна функција за тоа. Тие имаат целата оваа пакет на функции под името ARR, кратки за низа, и тие имаат 1 функција наречена "добие" и можете да помине во низа, и може да го положат во името на клучот. Тогаш во основа она што ќе го направите е дека ќе се обиде да добие што клучот, но ако тоа клучот не постои во низа, тогаш ќе се вратат празно, или ние, исто така, може да одредите стандардно, верувам, што е убаво. Сега ако ние го прават истото повторно, тогаш ќе види сега тоа функционира прв пат околу, и повторно, ако ние тип во некои случајни нешта и да се обидат и да го достави, тогаш тоа останува таму. И претпоставувам дека, исто така, може да ви покаже како да додадете образец навистина брзо. Што можеме да се направи првата е дека ние може да додадете нов преглед наречен "template.php" во рамките на погледи папка, и она што јас ќе одам да направите е да одам да се печати нешто што се нарекува "содржина" која се случува да ми биде главната содржина. А можеби и во самото дно Одам да додадете, да речеме, авторски права. [Нечујни студент прашање] [Брендон Лиу] Можеби ова е супер основните дефиниција Сакам да го користите. Сакам да имам една папка со мојот авторските права на секоја страница, и сега што јас ќе одам да направите во рамките на мојот контролер сега наместо да се каже ", се протега контролор" Одам да се каже, "се протега Controller_Template" и сега наместо да се каже, "одговор тело е еднаква на ова гледиште," Одам да се каже, "овој шаблон содржина е -" и мислам - да го ставам знак за еднаквост? Заборавам. Да, јас мислев така. И сега јас во собата дека содржината променлива да се изедначи со поглед. Можам да го стори истото тука. И сега, ако јас се освежи, можете да видите сега овој авторските права е додадена таму, и само направи некои случајни пост, а потоа, повторно, треба да се види дека на авторските права е на самото дно на страната. Велики. Тоа е се што сакав да ти покажам момци. [Аплауз] Било какви прашања? [CS50.TV]