[Възпроизвеждане на музика] ERIC Ouyang: Ей, всички. Добре дошли. Това е изграждането на динамични Web Apps с Laravel. Моето име е Ерик Ouyang. Аз съм второкурсник учи социални проучвания с вторично по компютърни науки, и аз живея в Adams Къща тук в Харвард. Така Laravel, най-много ядрото си, е уеб приложение рамка MVC. Така че харесва това, което вие имате правил с CS50 финансите, Laravel е рамка, която позволява можете да се изгради на динамични уеб приложения. Така че можете да мислите за него в някои сетива като продължение на вида на неща сте правили в CS50 Финансите, но една система, която е много по-здрава, много по-елегантен в някои сетива, и осигурява много функционалност за вас да се изгради доста сложна уеб приложения. Така че нека да мине през някои от ключовите характеристики, и след това ще се потопите в един Пример за изграждане на блог заявление с Laravel. Така че едно от първите неща, които го отличава от MVC вид работа че сте правили с CS50 е тя включва ORM двигателя. Така ORM щандове за обект релационни съответствия. Така че това ви позволява да се изгради слой на абстракция между базата данни и вашите контролери. Така че за разлика от CS50 финансите, където можете директно да заявки, на ORM слой ви позволява да абстрактно, че далеч и да се създаде модели, които са по-мощни от Можете директно с SQL заявки. Друго нещо, което е наистина полезно е наследствени шаблони. Така вие ще забележите в CS50 финансите, ти свърши пренаписване много неща, когато пуска потенциално биха могли да повторно използване на нещата, не сте в състояние да. Така че тук в Laravel, можете да използвате това, което е известен като острие шаблон двигател за създаване на господаря оформление. И от там, можете да наследят така че вторичното шаблони може действително включва елементи в рамките на че по-голяма база шаблон. Миграцията. Така че това е един доста стандартни функции за повечето съвременни рамки уеб приложение. Така че това ви дава възможност да представят схема на база данни промени в кода. Така че, без да каже, PhpMyAdmin, всъщност можете да създадете тези миграции където сте представител на базата данни схема направени промени в Кодекса директно. И това ви позволява to-- особено ако имате няколко души, работещи на една и съща уеб application-- следите тези промени, казват в GitHub, или някакъв друг хранилище. Така че това е наистина полезно и намалява необходимостта от да, да речем, Заобикаля много SQL сметища. И най-накрая, Composer е нещо много, много полезно който ви позволява да използвате други Код на хората да правят страхотни неща. Така Laravel е структуриран като няколко композитор пакети. Да предположим, че ако искаш да донесе в пакет на удостоверяване или ако искате да се въвеждат в някои нещо като генератор скрипт или админ интерфейс, можете да включите и да играе тези компоненти с Composer. Така че нека да започнем. Всички въпроси от вас момчета Преди да започнем? Няма въпроси? Cool. Така че първата стъпка е инсталиране Composer. Така Composer ви позволява да управление на тези зависимости, независимо дали е рамката Laravel или някакъв друг разширение трето лице. Първата команда позволява можете да изтеглите Composer, и втората команда ви позволява да тя се движи в своя локална папка бин така че можете да стартирате Composer директно през терминала. След това отидете напред и да създаване на нов проект Laravel. Ние всъщност ще използвате някои примерен код че съм се съберат за създаване на този блог. Но ако сте се започне от нулата, трябва да използвате тази команда тук, композитор създаде проект, laravel Слаш laravel, и след това Името на вашия проект. И това ще включва Всички кода на разпределение за започване на нов проект Laravel. Така че за окончателните си проекти CS50, ще Вероятно искате да използвате тази команда. Но ние ще започнем с това. Така че след като веднъж сте направили че, ти започваш да се получи доста голяма номер на файлове в blog50. Така че нека просто проверете някои от тези компоненти. Ще забележите, този маршрут директория, има папка ап. Вътре папката ап, има Няколко полезни папки. Трябва да се отбележи, за да започнете с е този довереник папка. Така че това създава как уеб приложението е ще, да речем, удостоверяване на хората или парични неща или да се свържете с базата данни. И това, което е наистина полезно е, че Laravel Позволява Ви да настроите различни среди за разработка. Така че това, което ние сме направили тук е, ако отидем под местна папката, има един файл database.php. И вие ще забележите, че тук ние създаване на MySQL връзка, че позволява на хората да се свързват към MySQL сървъра, че е директно на CS50 уреда. И ние се свързвате към базата данни че съм създаден нарича Blog50. Така че нека всъщност вървим напред и тичам работната версия на тази, само за да се получи усещане за това, което приложение, което ние строим прилича. Така че аз имам копие от тази Blog50 завършена. Така Laravel всъщност е построена през сървъра че може да работи директно от командния ред. Така че това е подобно на PSet преди, когато всъщност изгради свой собствен сървър в C. Така че те са една построена в толкова че можете да изпълните вашите Laravel приложения директно от командния ред. Така че, ако ние направим PHP занаятчия служи, това ще стартира сървъра развитие на порт 8000. Така че ако отидем в локален хост 8000, вие ще забележите, че, ей. Имаме нашия блог и се изпълняват. Така Laravel тук се генерира на първа страница на нашия блог. Много просто приложение. Но има една двойка наистина готин функции че тя осигурява под предния капак. Така на приложението блог ясен. Ако искахме да се създаде поста, ние можем да кликнете върху този бутон. Можем да кажем, "Хей, всички. Това е наистина забавно семинар, "например. И напишете нещо тук. Текст Тук. Ако кликнете върху Изпращане, ще забележите, че нашият нов блог Мнението беше добавен към предната страница на блога. Ако се върнем тук, вие ще забележите, че Вече е имало някои коментари в блога. Така че, ако ние превъртете надолу, ще забележите, че Джонатан Tan казва че той е бил много заинтригуван от този пост. Така че ние ще отидем в колко обекта релационни картографиране позволява можете да направите тези отношения в доста безпроблемно начин, както добре. Cool. Всякакви въпроси за функционалност от това, което ние ще се изгради? Cool. Така че нека да започнем с действително създаване на таблици в базата данни. Така се припомни, че в CS50 финансите, можете взети заедно на маса за потребителите както и за запаси в портфолиото си. Така че, както споменахме по-рано, това, което ние използваме в Laravel е нещо, известно като миграции. Така че, ако се върнем към дистрибуция код тук, първата команда, която е полезно, че Laravel ви осигурява е това мигрират команда. Така че ние можем да направим PHP занаятчия мигрират: направи. Така че това ни позволява да създадете миграцията. И тогава ние ще искате за създаване на миграцията наречено create_posts_table, което се случва да бъде мястото, където отиваме да да съхранявате нашите публикации в блога. И вие ще забележите, че тук той работи чрез някакъв код, който всъщност генерира файл с времеви печат върху него. Така че ако отидем и да разгледаме Database, ние ще забележите по миграции че тя е създала празен файл за нас, които има шаблон код с името че ние определено, създаде мнения маса. И тя има две функции в него. Up е това, което искаме да тече от момента на миграция се прилага към базата данни. И надолу е това, което ние ще направим когато искаме да се обърне на миграцията. Така че тук, нека да започнем от с написването на тази миграция. Така че има полза клас в Laravel нарича Schema. Така че ние ще тече Schema :: създадете. И ние ще създадем таблица, озаглавена мнения. И тук ние прилагаме това с помощта на функцията. И в рамките тук, ние ще действителност определя съдържанието на нашата трапеза. Ние ще създадем ID, който е авто-Нарастваща. В допълнение, ние ще да създаде условия, които представлява заглавието на нашия блог пост. Ние също така ще създаде поле за съхраняване на текста на нашия блог пост. И накрая, ние ще за съхраняване на някои времеви отпечатъци за когато е създаден нашия пост и когато тя е била актуализирана. И за установяване, че е доста проста. Всичко, което искаме да направим, е капка таблицата, която сме създали. Great. Въпроси? Така че сега, ако ние вървим напред and-- всъщност, локален хост, позволете ми да изтриете това, което имахме по-рано. Отидете на бази данни. Отивам да изтриете това, което имахме по-рано. Капка това и да се създаде нова база данни Blog50. Така че сега какво магичното част е тук, че ние може да прилага тези миграции директно до базата данни с използване на командния ред инструмент. Така че, ако ние направим PHP занаятчия мигрират, вие ще забележите, че, ей. Той е създал таблицата на миграцията, които ние ще разгледаме в по малко, и това е приложена тази първа миграция. Така че ние гледаме на Blog50, вие ще забележите, че тя е създадена две маси за нас. Първо е тази таблица миграции. Така че, ако ние разглеждате тази, вие ще забележите, че тази таблица е сравнително лесно. Това е просто каза, че, ей. Ние приложихме тази миграция. Връщаме се обратно и виж мнения. Ще забележите, че структурата е точно това, което го е попитал. В момента има възможност за автоматично увеличаване ID. Ние имаме поредица за съхранение Заглавието и текстово поле за съхранение на съдържанието. Great. Cool. Всякакви въпроси за миграции работа, как можем да ги прилагаме? Не? Cool. Така че сега ние ще вървим напред и всъщност създават модела. Така че ние искаме да създадем модел мнения, че съхранява абстракция на базата данни. Така че, вместо да правиш MySQL заявки директно, ние ще създадем. Така че трябва да се създаде папка тук наречените модели. И вътре тук, ние ще създадете файл, наречен post.php. Вътре в този PHP файл, ние ще създадем клас пост, който се простира красноречив. Впечатляващо постижение е името на ORM двигател, който Laravel предвижда. И тук, можем да очакваме, че вие всъщност трябва да напишете някакъв код. Отиваме да напиша някои помощни функции по-късно. Но от кутията, като това вече признае това, което е в базата данни и ние можем да получите достъп до, да речем, на текста на нашия блог пост или титлата, и да създаде неща директно с почти никакъв код, каквато. Така че това е един от най-магическите съставки. И вятър веднъж този клас е по-пълноценен, ние ще включва информация за това, което това е свързано с, така че коментарите. Също така се създаде функция Така че ние можем действително директно получите URL на блог пост на страницата. Cool. Всякакви въпроси за това? Не. Cool. Така че сега, след като ние имаме свой модел, ние искате да създадете един контролер, който е в състояние да се намесвам с тези модели, и впоследствие на базата данни. Така че, ако се вгледаме в BlogController, ще забележите, че там не е много тук в момента. Всичко там е е функция на индекс който генерира началната страница, но без нищо там, за да се покаже, все още. Така че първата функция че ние ще създадем е тази, която ни позволява за създаване на блог пост. Така че ние ще се обявят нова функция, наречена newPost. И вътре тук просто, отиваме да настроите външния вид на тази страница да бъде направят версия, Ако си спомняте от CS50, на този шаблон, наречена blog.new, които ние ще се създаде след малко. Ще забележите, тук на линия шест че ние определено тази променлива, оформление. И ако можем да разгледаме в папката Прегледи, има Layouts папка, която включва един много основен HTML файл. И бележка, че ще забележите че имаме тази опаковка И ето, че се получава съдържание. Така вътре в нашия шаблон това, което ние ще направим се създаде това, което ще бъде заместен директно в рамките на този план. Така че ние казахме, че искаме да се направи шаблон нарича blog.new. Но вътре в блог, има Все още не този нов шаблон. Така че ние ще създадем файл, наречен new.blade.php. Това казва Laravel че тази PHP файл трябва да бъде направен с острие шаблон двигател. Така че това е един доста обикновена файл. Тя ще бъде под формата, чрез която ние всъщност добавите в своя блог. Така магията тук от наследство е, че, ей. Ние искаме да се уточни, че секция, секция съдържание Оттук която е очертана отsection иstop. Така че това, което е по средата тук ще да бъде заместен в управляващото оформление. И тук това, което искаме да направим, е да Много просто създайте нов HTML файл. Нека просто да добавите бърз заглавието. Добави блог пост. И в него, ние сме Ще се създаде форма. Тази форма ще има жалба. И това ще бъде нещо че заместваме в по-късно, и ще видим как маршрутизация се вписва в тук. Но ние просто ще се определят за предприятието че това отива на URL с маршрута от createPost. И след това ще да има метод пост. В тук, отиваме да има две полета. Div клас = "форма-група". Ние използваме библиотеката Bootstrap CSS любезно предоставена от Twitter. Така че ние ще създадем две от тях. Така че този първи вход е ще бъде титлата. Така вход име = "заглавие". Клас = "formcontrol". Type = "текст". Отивам да добавите контейнер = "Заглавие". И тогава вторият е Ще бъде текстова зона. Име = "съдържание". Клас = "formcontrol". И контейнер = "Напиши тук". Ето. И накрая, ние ще добави бърз бутон представи. Type = "представи" клас = "BTN BTN-първично". Така че това са всички Гостите на Bootstrap така че това може да се предвиди по начин, който е плячка на потребителя, а не голи HTML. Така че ние сме определено контролера тук. Ние определено много прост изглед. Но това, което липсва, е съединителната тъкан. Така че в този момент, Laravel няма представа как ние ще действителност достъп до този контролер. Така че това е дефинирано в файл, наречен routes.php. И точно сега, ние имаме един маршрут. Което е, когато отидем до Начало път за този сайт, това ще направи контролера индекс. Така че тук това, което трябва да направите е изпълнение нов маршрут за нас, за да се създаде поста. Така че ние използваме този метод получите, в който се посочва че когато потребител се опитва да получите този page-- конкретно гредата наклонена черта нов page-- това, което ние ще направим се използва контролер, наречен BlogController нов пост. Тази, която току-що създадена. И тогава ние ще да го Alias ​​като newPost. Ние ще създадем нов функция в малко. Но това, което е тук, под ключ ", както" е това, което ние може да замени в рамките на нашите Blade шаблони. Така че за сега, нека всъщност също казват маршрут. Така че ние също отиваме да се създаде контролер така че ние можем да създадем тези постове. Така че, ако потребител публикува на страницата пункт на Слаш ново, което ние ще направим е използва контролер, който ние ще се създаде скоро наречено BlogController в createPost. И ние ще псевдоним тази с по createPost. Cool. Въпроси? Cool. Така че нека да тичам, което имаме до момента. Така че, ако ние направим PHP занаятчия служи, ще видим много грешки. Така че тя изглежда като имаме синтактична грешка по маршрути линия 27. Ah. Липсва и запетая. Така че ако отидем до 8000, ще видите нищо все още тук. Така че това е началната страница по подразбиране. Но ако отидем да намали нова, хей. Тя ще бъде под формата, че ние току-що създадената. Точно сега, ние не трябва изпълнява функциите от когато натиснете бутона Submit. Така че, ако ние кликнете върху Submit бутон, то се случва да тече грешка. Но ние ще се код, който точно сега, точно това, което ние искам да направя, когато потребител поддържа тази форма. Така че нека да го направя. Върни се в досието на контролери. Това, което ще направя, е прилага тази нова функция която ни позволява да се създаде поста. Декларирам нова функция. Public createPost функция. И тази функция ще бъде по- малко по-сложни от това, което имахме преди. Но ще видите тук, че ние не сме Ще всъщност пиша всеки SQL. The ORM, красноречивите ORM, ще позволи нас, за да направите това в някои начини по-елегантен начин. Така че ние ще се създаде нов пост. И тук ние сме е да създадете нов обект от модела, който ние просто създаден, след модела. И това, което ние ще направим, е да зададете заглавието атрибут на този използвайки нещо че сме се от сървъра. Така че това е подобно на това, имахме преди в CS50 финансите където ние ще направим, използвайки супер Global Post търсите заглавие. Така Laravel предвижда някои канализация и какво ли не с помощта на този помощник функция. Така че ние бихме искали да използваме тази вместо на тази основна суров вид от PHP. И след това, което ние ще направим е зададен съдържанието на това да Input получите съдържание. Ние всъщност ще увийте това в полза функция че PHP предоставя нарича nl2br, които Оказва нови линии, NLS, в ТРИСТАЕН, почивки, така че всъщност можем да имаме различни точки в него. И най-накрая това, което ще да направите, е да запазите този пост. Така ще извикаме функцията запишете на този модел. Отиваме да спаси поста. И най-накрая това, което ние ще направим се пренасочва потребителя конкретно на маршрута, които ние ще създаде скоро, известен още като viewPost. И ние ще премине в аргументите ID, като идентификацията на този пост. Great. Така че сега, ако ние действително отида и да стартирате тази. Отиваме да добавите нов пост. Да кажем, че това е семинар 50. И казват, сигурен. ASDL. Каквато и да е. Някаква съдържание. И да го представи. И ние ще забележите, че, хей. маршрути, които не са определени. Но ако се вгледаме в PhpMyAdmin и за това дали нашата функция изглежда не е правил нищо. Виж Blog50 мнения. Ще забележите, че, ей. В действителност, ние не само, че се създаде блог публикувате с времеви отпечатъци, както е посочено. Така че сега нека се върнем и всъщност създават тази друга функция в нашия контролер, специално контролера viewPost. Така че общественото viewPost функция. Така че тук това, което ние ще направим, вместо да има празни скоби, че ще искаме да премине в идентификацията на гредата, че ние създаваме. И от тук това, което ние ще направим всъщност заявка базата данни за него. Така че, ако ние публикуваме, има функция, наречена Виж, която ни позволява да го задава въпроси по ID. По-конкретно, в действителност, ние ще използвате алтернативен вариант на този, наречен Намерете или Fail, която ни позволява да се откажат от тази функция, хвърли изключение, ако ID минаваме през не съществува. И тогава ние ще направим нещо подобно на това, което направихме по-рано когато ние си поставихме за съдържанието на тази страница да бъде оказаната версия на този нов изглед които ние ще създадем, blog.view. И ние ще премине в it-- Точно като във CS50 направи function-- речник на променливи. Ключовете на тази асоциативен масив стават променливи в рамките на шаблона. Така че ние ще направим публикация. Така минават косвено поста, че ние сме извикан от базата данни. , Сега това, което ние ще направите е да създадете тази гледна така че всъщност можем да видите постовете, които сме построили блог. Така че ние ще създадем файл, наречен view.blade.php. Така че вътре в този шаблон, това, което ние ще направим се съберат проста страница, че ни позволява да се покаже съдържанието. Така че правим точка, това е преди съдържание. Спрете. И това, което ще да се направи в рамките тук е напишете някои HTML за показване на тази страница. Така че ние ще го увийте с фантазия Новият HTML5 елемент наречен член. И тук, отиваме да имат заглавна където отиваме просто да имат h1, който включва заглавието на съобщението. Така че тук, ако погледнем на това двойно фигурна скоба нотация, това ще направи по същество PHP ехо пост заглавие. Така че това е полезно стенограмите че Laravel ни предоставя. Така че ние ще използваме тази бройна система, вместо. И тук, ние ще се отпечатване на съдържанието на това. И тук, отиваме да изпращате съдържания. И надолу към дъното, което ние сме ще направя, е да създаде Footer. И в долния им край, ние ще Първата проява, когато това беше публикуван. Така че това беше публикуван в, създадена в. И Laravel използва една наистина хубава дата библиотека, наречена Carbon. Така че всъщност можем да направим нещо, наречено difforHumans, което си видял по-рано. Когато е публикувал. той ще каже, като, преди пет секунди. Така че това е много хубаво функционалност на Laravel. И накрая, ние ще да затворите този Footer. Така че сега, ако се върнем към Home Page отиваме да видите тук нищо все още, защото ние не са кодирани до началната страница. Но ако отидем да наклонена черта една, ние ще видим едно изключение. Някой знае ли защо ние виждаме едно изключение? Какво ще липсва? Някакви идеи? Така че това, което направихме рано за нас всъщност да определи по какъв начин можем да стигнем до специално ръководителите? SPEAKER 1: Маршрутът? ERIC Ouyang: Да. Така че ние все още трябва да се определи по маршрута. Така че ние се върна тук, за да routes.php. Ще забележите, че ние не са действително дефинирани как ще да получите да този контролер. Така че сега ние ще определи този маршрут. Това е сравнително лесно, подобно на това, което направихме по-рано. Но това, което ние ще забележите, тук е че ние ще имаме запазено място. Така че, ако ние направим route.get наклонена черта пост ID. Така ID сега е какво ще се бъдат вкарани в контролера. Това ще е за употреба контролер, че ние просто създаден, BlogController в viewPost. И ние ще псевдоним това като viewPost. Great. Така че сега ние ще създадем този маршрут. Така че сега, ако отидем тук и да обновите тази страница, ние всъщност нямаме нашия нов блог пост. Така че това е, което ние създадохме по-рано. Много просто страница, но показва на блог пост, че ние току-що създадената. Cool. И ако ние действително мине през цялата Процесът на създаване на нов блог пост, ние ще забележите, че всичко пренасочва правилно. Ако кажа "Здрасти. Аз съм Джонатан Tan. " Кажи: "Това е моят блог пост." И го представя, това ще създаде този нов блог пост с ID 2, която увеличения от това, което сме имали преди това и я показва правилно. Awesome. Въпроси? Да? SPEAKER 2: Има ли Laravel дръжка санитарна обработка и всичко за вас? ERIC Ouyang: Да. Така че, когато се видяхме по-рано, когато направихме вход на колона на дебелото черво се, че sanitates всеки SQL инжекции и какво ли още не че ние може да искате да се изпълнява, ако ние сме един злонамерен потребител на уебсайта. Така Laravel дръжки много на които зад кулисите. Добър въпрос. Така че нека да погледнем в началната страница. Така че, ако ние първо да се върнете в контролер за началната страница, вие ще забележите, че той не направи много тук. Ще забележите, че ние не сме преминаване в този контролер нищо особено полезно. Това е просто този индекс файл. Така че нека да премине в това нещо полезно. И по-специално, ние сме ще премине в пунктове. И Laravel ни позволява да направя пост всичко, което ще ни позволи да получите всички постове. Сега, ако се върнем към index.php, ще видите, хей. Нищо все още тук. Но това, което искаме да направим тук всъщност обхождане чрез, направя foreach цикъл през постовете, че ни позволява да разпечатате постовете. Така foreach мнения като пост, това, което искаме да направим се разпечатва съдържанието на блог пост. Но едно нещо, което ще забележите е, че ние всъщност пише повечето от този код вече, в view.blade.php. Така че това, което ние ще направим, е действително използвате хубава полезна функция на Blade а коефициентът на този общ кодекс. Така че ние отидете тук. Ние ще вземем това съдържание точно тук, и това, което ние ще направим е създаване на нова папка. Нека просто го наричат ​​частични. И тук, отиваме да се създаде post.blade.php. Така че тук, ние отразено от начина, по което искаме да покаже тези постове. И тук това, което ние ще направим вместо всъщност като че HTML директно, ние ще използваме тази директива наречено включва blog.partials.post. И това, което ние ще направим тук е да премине в пост на страницата. Така че сега, ако се върнем тук, ние ще забележите, че функционалността е все още същото. Но сега имаме тази отчетени от код, този HTML. Така че можем да го използваме в Index. Така че тук, това е много прост. Всичко, което правим, е да включва blog.partials.post и масив. И някъде да преди, правим публикация. Така че сега, ако се върнем към начална страница, ще видим, че, ей. Имаме списък на всички публикации в блога, които сме имали преди. Ние може да искате да добавите малко "ако" условия и "Иначе" условия така че, ако ние нямаме нищо в блога, ние искаме да ви покаже нещо полезно. Подобно, хей. Има все още няма съдържание в блога. И ако вие действително гледат кода за разпределение на GitHub, ще видите пример за това как да направим това. Cool. Въпроси? Да. SPEAKER 2: Предполагам, че просто един фундаментален въпрос. Обратно в маршрута. ERIC Ouyang: Да. Ако можем да погледнем маршрути. SPEAKER 2: Къде се намира uses.blogcontroller при създаване на пост, Какво означава, че ни насочи към? ERIC Ouyang: Да. Да. SPEAKER 2: Или какво е that-- ERIC Ouyang: Така че, да погледнем, да речем Например, този път точно тук. Първата част е действителното URL, че потребителят ще отидете. И този масив тук, асоциативен масив, определя как искаме да имаме акт заявление в отговор на това. Така че използва е контролера, функцията, която ние Искам да се обадя, когато потребител отива до този URL. Така viewPost точно тук е функция, която ние определено вътре на BlogController-- SPEAKER 2: Разбирам. ERIC Ouyang: --so че ние всъщност може да направи оглед, изпълнява някои изчисления, взаимодействат с SQL база данни. SPEAKER 2: OK. ERIC Ouyang: И тогава другият част ", като" е псевдоним, който използваме. Така че, ако ние забелязваме, когато ние създадохме формата, вие ще забележите, че URL :: routecreatePost. Така че тя замества в същинския URL, така че ние не сме твърдия кодиране на тези в така че можем да го променим веднъж, казват, ако искахме да преименувате. Вместо пост наклонена черта ново, което искаме да направим подобно, стр Слаш нова просто да почистите до наши URLs малко. Ние ще го променя на едно място, а отколкото през всички различни файлове. Cool. Това е добре. Така че сега имаме много Основният блог платформа. Вероятно искате да добавите в един бутон, така че всъщност ние можем да създадем нови мнения. Така че, ако се вгледаме в Layout Учителя, имаме раздел, наречен Header Right че съвсем наскоро е определено нагоре към върха. Така че ние можем да добавите бутони, за да горната част на заглавието. Така че ако отидем в index.blade.php, всъщност направите, е да се определи какво се случва вътре в тук. Така че този раздел Header Right, това, което ние ще направим се добавят в един бутон, за да отидете на URL определена от маршрута новия пост. Само за да го почисти и да направи то доста и всички Bootstrap, ние ще направим този бутон по подразбиране. Нека просто да го направи голям за забавление. И вътре в нея, можем да се въведе някакъв текст. Но това, което Bootstrap предвижда се glyphicons. Така че всъщност можем да добавим, че в хубаво молив, който видяхме по-рано. Glyphicon. Glyphicon-молив. Така че това ще ни позволи да се сложи в икона вместо текст. Сега, ако искаме да се спре, това ще определи тази секция. И, хей. Имаме хубава бутон, който ни свързва директно към добавите своя блог страница. Така че ние имаме доста проста блог. Можем да добавим неща за него. Но това, което ние обикновено очакваме от блоговете се коментира. Така че това е наистина важно за нас да има, кажа, ако някой друг е на посещение в един сайт и наистина се интересува от поста, че те могат да се включат в дискусията с други хора, които посещават страницата. Така че ние ще отидем и да се създаде нова таблица на база данни и нов модел така че да можем да свържем Коментари с мнения. Така че първата стъпка, точно както преди, е, че ние трябва да изпълните миграцията. Така че, както преди, което правим PHP занаятчия мигрират: направи. И ние ще се създаде една наречено create_comments_table. Това ще създаде файл че има нашата нова миграция. И ние ще, като преди, дефинира нова таблица. Така Schema :: създадете таблица, наречена коментари. Тази функция тук. И вътре в тази таблица, какво ние ще направим, е на първо място, както преди, определи идентификационен номер. Увеличава ID. Ние ще позволи на потребителите да се свързват името им с конкретен коментар. Отиваме да имат някаква съдържание, което върви заедно с тази, текст съдържание. И тук това, което ние ще направите, е нещо по-различно. Отиваме да създаде цяло число това се нарича post_id които ще означава това, което пост конкретен коментар върви с. В допълнение, ние всъщност ще задаване на ключови чужди ограничение за това. Така че MySQL ще се прилага в действие. Не се опитваме да възлага коментар номер 5 да публикувате 5000, ако не ни имаше 5000 мнения за него. Така че това, което правим тук, правим външна post_id ще бъде свързано с областта на ID от стълбовете на таблицата. И ние всъщност ще направи нещо друго полезно, е onDelete. Така че, ако ние изтриете някои Съобщението е от базата данни, че искаме да каскада изтрива за коментари, както добре. Тъй като това не е много полезно за нас да има коментари за мнения че не съществуват. И най-накрая, като преди, ние сме Ще се зададе времето за това. И както и преди, ние ще има обратна миграция е отпадане таблицата на коментари. Така че сега, ако се върнем назад до тук, ние ще да стартирате тази миграция, занаятчия мигрира. И сега тя се прилага тази миграцията, че ние току-що създадената. Така че, ако ние погледнем в PhpMyAdmin, което правим, всъщност сега има таблица коментари, че има структура, която ние просто определено. Така че, както и преди, ние сме ще се създаде нов модел да абстрактна таблицата на SQL че ние току-що създадената. Така че нека да се създава нов файл. Отиваме да го наречем comment.php. И това всъщност ще бъде сравнително прям с лека промяна от това, което сме имали преди. Така клас коментар простира Впечатляващо постижение. И това, което ще да направим тук се дефинира функция, която е най- Връзка с други модели. Така че ние ще имаме един пост функция И ето, че се връща на тази връзка. Така че ние се посочва, че То принадлежи към публикувате, казвайки, че имало един пост че този коментар принадлежи. Това всъщност трябва да бъде капитали P за модела. И сега точно от другата флип страна, трябва да кажем, че, ей. Публикации имат коментари. Така че това, което ние ще направим, е дефинира публичните коментари функция. И тук се връща това е много коментар. Така че сега магически когато имаме длъжност, можем да получим коментарите Умение и тя ще го обсипе с информация от базата данни. Така че нека действително проверете и добави нова функция към нас файл така че ние може едновременно показване и създаване на коментари. Така че ние ще определи нова точка. Нека просто го отдели с хоризонтална линия. Раздел ID = "коментари". Това, което ние ще направим тук е, както преди, превъртите през всички коментари. Така че всъщност как правим това е, както споменах, доста магически. Ние правим коментират. И тогава можем да направим това за всеки линия спрямо всеки един от коментарите. И това, което ние ще направите, е коментар Разделение клас, и ние ще действителност отпечатате този коментар. Така се показва, че хей, коментирам name-- лицето който е публикувал тази comment-- казва точка точка точка. Ще сложа в блок цитат, просто за да изглежда хубаво. И тогава коментирам съдържанието блок цитат. И foreach. Така че сега това ще контур чрез всички коментари която е свързана с всяка от длъжностите и показване на всяка една от тези коментари. Отивам да добавите друга точка надолу тук, което ни позволява да добавите коментар. Така h3 клас. Сложете заглавие тук. Добавяне на коментар. И ние ще определи нова форма. Така че, както и преди, ние сме ще направим форма за действие. И тук, новият иск е, че сме ще дефинираме нов контролер, който ни позволява да отговорим на изкажете искания за създаване на коментари. Така че URL :: маршрут createComment. Отивам да премине в параметъра тук. Идентификацията на поста, че ние създаваме коментар. И тогава методът на настоящото форма ще бъде пост. Сега отиваме да добавите в на две области, форма група. Това ще бъде един вход с име "име" и клас = "-контрол форма", TYPE = "текст", и с контейнер = "Вашето име". Ние също така ще дефинираме друга форма поле, което ще бъде един текст област като имахме преди. Точно както преди, го наричат ​​съдържание. Клас = "форма-контрол." Заместител = "Напиши тук." И просто така, че ние всъщност може да го представя, Вид и клас = представя "BTN BTN-първично." Затваряне на формата. Затворете това действие. Така че сега, ако искаме да обновите тази страница, където имаме, да речем, определен пост. Трябва да рестартирате сървъра. PHP занаятчия служи. Рестартирайте това. Ние трябва да се определи по маршрута. Но за сега, нека просто да се възползвам от тази така, че всъщност можем да ви покажем какво страницата прилича, и след това ние всъщност ще създаде този маршрут. Така че, хей. Ние имаме тази нова форма тук така че ние можем да създадем коментари. Така че нека действително се определи функция в контролера така че ние можем да добавите коментар. Хайде да се върнем. И в рамките blogcontroller.php, това, което ние ще направим се създаде нова функция нарича се създаде коментар. Public createComment функция. Това ще има един-единствен параметър, идентификацията на длъжностите че ние сме коментира. И както и преди, ние сме Ще първо да получи поста. Така публикувате, findOrfail ID. След това отиваме за създаване на нов коментар. Така коментира = нов коментар. Коментар име = Input :: получите име. Съдържание Comment = същото новата линия в почивките на Input :: получите съдържание. И накрая, ние ще трябва да свързваме този коментар с поста. Така че ние ще използваме тази функция, коментари, която ни позволява да запаметите тези отношения. Така че сега този коментар ще има автоматично след ID. Ние също може да го настроите ръчно, но това е по-лесен за четене, доколкото като функция отива. И след като ние извършваме това, което искаме да направим е пренасочва потребителя към маршрут, определен от viewPost с масива с параметър на пост ID. И сега, така че това всъщност функции, от които се нуждаем, за да се определи този маршрут. Route :: пост. И сега ние ще наричаме това Мнение Слаш ID наклонена черта коментар. Array използва новата функция че ние току-що създадената. BlogController. CreateComment като createComment. Great. Така че сега се надяваме, ако искаме да обновите тази страница и добавете в коментар, да речем, David Malan. "Надяваме се това работи." Пуснете. Ние, всъщност, има коментира този блог пост. Cool. Така че сега имаме доста функционална блог пост. Ние просто ще добавете два ощипвам така че имаме някаква по-полезен информация за тези постове. Така че, ако се върнем към предната страница, ние нямаме чувство на колко коментара са на всеки един от тези постове. Така че това, което всъщност се случва да направите, е, вътре в нашия модел, дефинира функция помощник, който позволява нас, за да се посочи броят на коментари които излизат с определен пост. Така че ние ще създадем функция помощник. Публична функция. GetNumCommentsStr. Така низ, което определя броя на коментари, които излизат заедно с нея. И това, което ние ще направим, е да се каже, че Num = Тази коментари броят. Така че ние ще разчитаме броят на коментари. И ако този брой е равен на 1, ние сме Просто ще се върне един коментар. И след това по друг начин, ние искаме да се върне Съединяването на Num и коментари, Така получаваме плурализацията правилно. Просто направи това апостроф. Един коментар. И сега ние можем да използвате тази функция, директно вътре в нас. Така че, ако се върнем към частични съобщения, които създадохме, Сега искаме да всъщност показва броя на коментари. И така, какво можем да направим, е пост, използвайте тази функция че ние току-що създадената за показва броя на коментари. Така че, ако ние сега опресняване, тя прави, всъщност, дисплей коментарите цифри че отиде заедно с него. Ако искахме да се фантазия, ако всъщност разгледаме кода на разпределение, ние всъщност може да се свърже тази на коментарите. Ако си спомняте, ние дефинирано в рамките на видите, че това има раздел за самоличност коментари. Така че, ако ние наистина искахме да се свърже директно към секцията за коментари, какво ние ще направим тук е HREF URL на маршрут viewPost. Премини в ID масив от пост ID. И тогава ние искаме да отидем, за да специално секцията за коментари. Тук нека да затворите маркер. Така че сега, ако искаме да обновите тази страница, ние кликнете върху това. Ще отидем директно до секцията за коментари. Ако имахме по-дълъг пост, можете всъщност виждате това скача надолу. Но вие ще забележите, че това е не в горната част на страницата. Cool. Great. Така че това е един сравнително лесно пример за нещо по-просто които можете да правите с Laravel. Но вие можете да забележите, че тук ние сме направили много неща със сравнително малко количество код. Laravel ни позволява да направим SQL заявки зад кулисите. Той прави санирането за нас зад кулисите. Ни позволява да направим тези отношения много лесно, без да ни се налага да направи всеки SQL присъединят изявления комбинирате коментари с това, което постовете. Ни позволява да направите това наследството на шаблони така че можем да определим тези гнездене файлове, така че ние не сме сами повтарят, точно както когато имахме, че показване на постовете в блога че ние не трябва да се копирате и поставите кода. И от тук може да се изгради все по-сложни приложения. Можете да си представите, ако ние Искаше да приложи влезете в, бихме могли да кажем, въвеждат в трета страна рамка, която ни позволява да направим това. Има един куп от тях че са много, много Чудесно е, че може да направи подобно, възстановяване на паролата. И това ще ви изпратим възстановите паролата имейл. Ние можем да изпълни разрешение така че мога да се създаде поста, но някой друг не може да го редактирате. Ние можем да приложат функционалност да изтриват мнения. Но можете да видите тук, че имаме доста много на всички елементарни компоненти да изградят някои наистина, наистина, динамични и вълнуващи уеб приложения. Така че с това, мисля, че ние сме добри. Смятате ли, момчета имат някакви въпроси? Да? SPEAKER 3: Как да направите получите статично съдържание? ERIC Ouyang: Статично съдържание. Така че си видял преди това, когато трябваше Това право тук, това съдържание оформление, Предвид грим, имахме тази без този масив след това. Blog.index, имахме тази като само статичен файл. Така че, ако не мине всичко заедно с него, тя просто ще направи директно на HTML. Но ако се мине през тази асоциативна спектър от мнения, които е динамично извади от базата данни, ние може да се направи на страницата динамична. Cool. Всякакви други въпроси? SPEAKER 3: Как бихте сравнили Laravel да може би някои други опции? ERIC Ouyang: Разбира се. Да. Така Laravel is-- това е голяма question-- една от многото възможности за уеб рамки. Така че Руби на релси е тази, която е популярна. Вярвам Twitter да бъде използван изпълнена с Руби на релси. Мисля, че те са, тъй като е включен. Има и още една, наречена FuelPHP. Така че Руби на релси използва езика Ruby и изпълнява много от нещата MVC които виждаме тук. FuelPHP е друга рамка PHP. Django е една от любимите ми. Това е уеб рамка за Python. Така че можете да напишете уеб приложението си в Python. Така че има един тон на тези опции. Laravel, мисля, от и голям е любимата ми полето Сега за PHP, само защото на компонентите че ние говорихме по-рано. Това е Composer активиран. Тя включва много, много изразителен система ORM. Също така има наистина страхотно темплейт език, че някои от другите Просто не предоставят. И миграции. Миграции са страхотни, както добре. Cool? Awesome. Добре, благодаря много за гледане на този семинар, и късмет на своите окончателни проекти.