[Грає музика] ЕРІК Оуян: Гей, все. Ласкаво просимо. Ця будівля Dynamic Веб-додатки з Laravel. Мене звуть Ерік Оуян. Я студент-другокурсник вивчення соціальних досліджень з вторинним з інформатики, і я живу в Адамс Будинок тут, в Гарварді. Так Laravel, на його більшості основних, це фреймворк для веб-додаток MVC. Так подобається, що ви, хлопці, є робили з CS50 фінансів, Laravel є основою, яка дозволяє створювати динамічні веб-додатки. Таким чином, ви можете думати про це в якомусь сенсі як розширення типу матеріалу Ви робили в CS50 Фінанси, але система, що є багато надійнішими, багато більш елегантний в деякому розумінні, і надає багато Функціональність для вас побудувати досить складний веб-додатків. Так що давайте пройти через деякі з ключових особливостей, і тоді ми будемо занурюватися в Приклад побудови блог Додаток з Laravel. Таким чином, одна з перших речей, які відрізняє його від MVC виду робіт що ви робили з CS50 це включає в себе двигун ОРЗ. Так ORM розшифровується об'єкта реляційного відображення. Так що це дозволяє будувати шар абстракції між базою даних і контролери. Так, на відміну від CS50 фінансів, на якому Ви безпосередньо виконувати запити, ORM шар дозволяє абстрактний, що далеко і створити моделі, які є більш потужними, ніж Ви можете прямо із запитами SQL. Інша справа, що насправді корисної успадковані шаблони. Таким чином, ви побачите, в CS50 фінансів, ви в кінцевому підсумку переписування багато речей, де місця, які ви могли б потенційно використовувати речі, ви не в змозі. Так ось в Laravel, ви можете використовувати те, що Відомо, як лезо шаблону двигуна створити майстер-план. І звідти, ви можете успадковувати так що на південь шаблони можуть насправді включають в себе елементи, що входять в що більшою базового шаблону. Міграція. Так що це досить стандартні особливості на більшість сучасні рамки веб-додатків. Так що це дозволяє представляти зміни схеми бази даних в коді. Так що без збирався сказати, PhpMyAdmin, Ви можете фактично створити ці міграції де ви уявляєте бази даних Зміни схеми в код. І це дозволяє to-- особливо Якщо у вас є кілька людей, які працюють на тому ж веб application-- відслідковувати ці зміни, кажуть у GitHub, або який-небудь інший репозиторій. Так що це дуже корисно і знижує необхідність щоб, скажімо, пройти навколо багато SQL звалищ. І, нарешті, Композитор є то дуже, дуже корисно що дозволяє використовувати інші Код народний зробити дивовижні речі. Так Laravel структурований як кілька композитор пакети. Так сказати, якщо ви хочете, щоб принести в пакет перевірки автентичності або якщо ви хочете, щоб принести в деяких Сортувати скрипта генератора або адміністратором інтерфейс, ви можете підключити і грати ці компоненти з композитором. Так що давайте почнемо. Будь-які питання від вас Хлопці перш ніж ми почнемо? Ніяких питань? Круто. Таким чином, перший крок установка Composer. Так Композитор дозволяє управляти цими залежностями, будь то база Laravel або який-небудь інший додатковий третя особа. Перша команда дозволяє Ви можете завантажити композитора, і друга команда дозволяє перемістити його у вашій локальній теці бін так що ви можете запускати Composer безпосередньо через термінал. Після цього, йти вперед і створити новий проект Laravel. Ми насправді відбувається в використовувати деякі приклад коду що я зібрав створити цей блог. Але якщо ви починаєте з подряпина, ви повинні використовувати цю команду тут, композитор створити-проект, Laravel скоротити Laravel, а потім Назва Вашого проекту. І що буде включати в себе всі код розподілу для початку новий проект Laravel. Таким чином, для ваших CS50 закінчених проектів, ви будете ймовірно, захочете використовувати цю команду. Але ми збираємося почати з цього. Тому, як тільки ви зробили що ви збираєтеся отримати досить обширна номер файлів в blog50. Так що давайте просто пройти деякі з цих компонентів. Ви помітите, на цьому маршруті Каталог, є папка програми. Всередині папки програми, є пару корисних папки. Слід зазначити, щоб почати з це папка Config. Так це створює як веб-додаток буде, скажімо, аутентифікації користувачів або грошові речі або підключитися до бази даних. І те, що насправді корисно в тому, що Laravel дозволяє налаштувати різні середовищах розробки. Отже, що ми зробили тут, якщо ми йдемо під локальною папці, є файл database.php. І ви помітите, тут ми встановити з'єднання MySQL, що дозволяє людям з'єднатися до сервера MySQL, що це безпосередньо на приладі CS50. І ми підключенні до бази даних що я створив називається Blog50. Отже, давайте насправді йти вперед і запустити робочу версію цього, тільки, щоб отримати відчуття того, що додаток, який ми будуємо виглядає. Так що у мене копію це Blog50 завершена. Так Laravel насправді має вбудований сервер що ви можете запустити безпосередньо з командного рядка. Так що це схоже на PSet раніше, коли ви насправді побудувати свій власний сервер в С. Таким чином, вони мають одну побудований в так що ви можете запустити ваші програми Laravel безпосередньо з командного рядка. Так що, якщо ми робимо PHP ремісника служити, це почне сервер розробки порт 8000. Так що, якщо ми йдемо в локальному хості 8000, ви помітите, що, гей. У нас є блог і працює. Так Laravel тут генерації Головна сторінка нашого блогу. Дуже простий додаток. Але є пара дійсно корисних функцій що вона забезпечує під капотом. Так застосування блогу просто. Якби ми хотіли створити пост, ми можемо натиснути на цю кнопку. Ми можемо сказати: "Ей, все. Це дуже весело Семінар ", наприклад. І написати щось тут. Текст тут. Якщо тиснемо Submit, ви будете зверніть увагу, що наш новий блог Повідомлення було додано Головна сторінка блогу. Якщо ми повернемося сюди, ви помітите, що були деякі зауваження, вже на блозі. Так що, якщо ми прокручуємо вниз, ви будете зверніть увагу, що Джонатан Тан каже що він був дуже заінтригований цієї посади. Таким чином, ми підемо в те, як об'єкт реляційного відображення дозволяє Ви, щоб зробити ці відносини в досить плавний спосіб, як добре. Круто. Будь-які питання про функціональність що ми збираємося будувати? Круто. Отже, давайте почнемо з дійсно створення таблиць бази даних. Так Нагадаємо, що в CS50 фінансів, вам зібрати стіл для користувачів а також для акції у вашому портфелі. Так як ми вже згадували раніше, що ми використовуємо в Laravel щось відомо, як міграцій. Так що, якщо ми повернемося до Розподіл код тут, Перша команда, яка корисно, що Laravel надає вам це команда міграції. Таким чином, ми можемо зробити PHP, мігрують майстрових: зробити. Так що це дозволяє нам створити міграції. І тоді ми захочемо створити міграції називається create_posts_table, яка збирається щоб бути там, де ми збираємося бути зберігання нашому блозі. І ви помітите, тут, що він працює через код, який насправді генерує файл з штамп часу на це. Так що, якщо ми підемо і подивимося на бази даних, ми помітили при міграції що він створений Порожній файл для нас, які має шаблонний код з назвою що ми вказали, створювати повідомлення стіл. І воно має дві функції в ній. До чого ми хочемо працювати, коли міграція застосовується до бази даних. І вниз, що ми збираємося робити коли ми хочемо повернути назад міграцію. Так от давайте почнемо написання цієї міграції. Так що корисно клас в Laravel називається схеми. Отже, ми збираємося запустити схеми :: створити. І ми збираємося створити таблиця з ім'ям повідомлення. І тут ми застосовуємо це, використовуючи функцію. І в тут, ми йдемо насправді визначити зміст нашій таблиці. Ми збираємося створити ID, що автоінкрементне. Крім того, ми збираємося щоб створити поле, що представляє заголовок нашого блогу. Ми також збираємося створити поле для зберігання текст нашого блогу. І, нарешті, ми збираємося зберігати деякі мітки коли наш пост був створений і коли він був оновлений. І вниз, це досить просто. Все, що ми хочемо зробити, це падіння таблиця, яку ми створили. Відмінно. Є питання? Так що тепер, якщо ми йдемо вперед і-- Насправді, локальний хост, дозвольте мені видалити, що було раніше. Перейти до баз даних. Я збираюся видалити, що було раніше. Залиште це і створити Нова база даних Blog50. Так що тепер чарівний частина тут, що ми може застосовувати ці міграції безпосередньо до бази даних за допомогою командного рядка інструмент. Так що, якщо ми робимо PHP майстрових, мігрують, Ви помітите, що, гей. Він створений таблицю міграції, які ми поглянемо на в небагато, і він застосовується цей перший міграції. Так ми дивимося на Blog50, ви помітите, що він створений дві таблиці для нас. По-перше це таблиця міграції. Так що, якщо ми переглянути це, ви помітите, що Ця таблиця є досить простий. Це просто сказав, що, гей. Ми застосували цей міграції. Ми повернемося і подивимося на посаді. Ви помітите, що структура саме те, що ми просили його. У нас є автоінкрементний ID. У нас є рядок для зберігання Назва і текстове поле для зберігання контенту. Відмінно. Круто. Будь-які питання про міграцію робота, як ми можемо застосовувати їх? Ні? Круто. Так що тепер ми збираємося, щоб йти вперед а насправді створити модель. Тому ми хочемо, щоб створити повідомлення модель, яка зберігає абстракції бази даних. Таким чином, замість того, щоб робити запити MySQL безпосередньо, ми збираємося створити. Таким чином, ми повинні створити Папка тут званих моделей. І тут всередині, ми збираємося створіть файл з назвою post.php. У цьому файлі PHP, ми збираємося створити клас піст, який триває красномовний. Красномовним є ім'я ORM двигун, який забезпечує Laravel. І тут, ми могли б очікувати, що Ви насправді потрібно написати код. Ми збираємося написати кілька допоміжні функції пізнішої версії. Але з коробки, це вже буде визнають, що в базі даних і ми можемо отримати доступ, скажімо, текст нашій блозі або назви, і створити матеріал безпосередньо з не дуже багато немає коду взагалі. Так що це одна з магічних компонентів. І вітер відразу цього класу більш повноцінної, ми будемо включати інформацію про те, що це пов'язано з так коментарях. Крім того, створення функцію тому ми можемо насправді безпосередньо отримати URL сторінки в повідомлення в блозі. Круто. Є запитання з цього приводу? Ні. Круто. Так що тепер, коли ми маємо модель, ми хочу створити контролер, що це можливість взаємодіяти з цими моделями, а потім бази даних. Так що, якщо ми поглянемо на BlogController, ви зауважити, що це не багато тут і зараз. Все там є функція індекс що створює домашню сторінку, але без чого-небудь Тобто для відображення ще. Так в першому функції що ми збираємося створити це той, який дозволяє створити пост в блозі. Отже, ми збираємося оголосити Нова функція називається newPost. І тут всередині просто, ми збираємося щоб встановити цю сторіночку Можливо зробити версію, якщо ви пам'ятаєте з CS50, цього шаблону під назвою blog.new, який ми збираємося створити в небагато. Ви помітите, тут, на шостому рядку, що ми визначили цю змінну, макет. І якщо ми поглянемо в папці Views, є Макети папки, яка включає в себе дуже простий файл HTML. І слід зазначити, ви помітите, що у нас є цей контейнер ось що дає зміст. Так всередині нашого шаблону те, що ми збираємося зробити це створити те, що буде заміщених безпосередньо в цьому макеті. Тому ми сказали, що ми хочемо зробити шаблон називається blog.new. Але всередині Блог, є поки це не новий шаблон. Отже, ми збираємося створити файл з ім'ям new.blade.php. Це говорить Laravel, що Цей файл PHP повинен бути винесена з Лезо двигун шаблон. Так що це досить просто файл. Це буде форма, за допомогою яких ми насправді додати в блозі. Так магії сюди з Спадкування є те, що, гей. Ми хочемо, щоб вказати, що розділ, розділ зміст тут, який окреслений поsection іstop. Так що між тут збирається повинні бути підставлені у майстер-макета. А ось те, що ми хочемо зробити, це дуже просто створити новий HTML файл. Давайте просто додати швидкий титул. Додати запис у блозі. І в ньому, ми збирається створити форму. Ця форма буде мати дію. І це буде щось що ми підставимо в подальшому, і ми побачимо, як маршрутизації вписується в тут. Але ми просто збираємося визначити зараз що це йде в URL з маршрутом від createPost. І тоді це буде мати метод пост. В тут, ми збираємося щоб мати два поля. Div клас = "форм-група". Ми використовуємо бібліотеку Bootstrap CSS люб'язно надані Twitter. Отже, ми збираємося створити два з них. Таким чином, це перший вхід буде назва. Так Введіть ім'я = "Назва". Клас = "FormControl". Тип = "текст". Я збираюся додати замінник = "Title". І потім друга є буде текстова область. Name = "зміст". Клас = "FormControl". І заповнювач = "Напишіть тут". Там ми йдемо. Нарешті, ми збираємося додати кнопку швидкого уявити. Type = "уявити" клас = "БТН БТН-основний". Таким чином, ці всі особливості завантажувачі що це може бути покладена в способі, яким це здобиччю для користувача, а не голий HTML. Таким чином, ми визначили контролер тут. Ми визначили дуже просту точку зору. Але те, що вистачає сполучної тканини. Тому на даному етапі, Laravel не має ні найменшого уявлення як ми збираємося насправді цей контролер. Так це визначено в файл з ім'ям routes.php. І зараз, у нас є один маршрут. Який є, коли ми йдемо в Головна шлях для цього сайту, це буде надавати Контролер індекс. Так ось, що нам потрібно зробити, це реалізувати Новий маршрут для нас, щоб створити повідомлення. Тому ми використовуємо цей метод отримати, який визначає що, коли користувач намагається отримати це page-- спеціально Повідомлення скоротити новий page-- те, що ми збираємося зробити це використовувати контролер під назвою BlogController нове повідомлення. Той, який ми тільки що створили. А потім ми збираємося псевдонім як newPost. Ми збираємося створити ще функція небагато. Але те, що тут, під ключ "як" є що ми можемо замінити в Наші шаблони лезо. Так що зараз, давайте насправді також сказати маршрут. Таким чином, ми також збираємося створити контролер так що ми можемо створити ці повідомлення. Таким чином, якщо користувач публікує на сторінку з поста скоротити нове, те, що ми збираємося зробити це використовує контролер, який ми збираємося створити найближчим часом називається BlogController на createPost. І ми збираємося створити псевдонім це з як createPost. Круто. Є питання? Круто. Так що давайте працювати, що ми маємо до цих пір. Так що, якщо ми робимо PHP ремісника служити, ми побачимо багато помилок. Так це виглядає, як у нас Синтаксична помилка на маршрутах лінії 27. Ах. Відсутня крапка з комою. Так що, якщо ми йдемо в 8000, Ви нічого не побачите тут ще. Так що це домашня сторінка за замовчуванням. Але якщо ми підемо на повідомлення слеш новий, гей. Це буде вигляд, що ми тільки що створили. Прямо зараз, ми не маємо реалізована функціональність про те, коли ми натискаємо кнопку Надіслати. Так що, якщо ми натиснемо на Відправити Кнопка, він збирається бігти помилку. Але ми збираємося код, який Прямо зараз, саме те, що ми хочу зробити, коли користувач представляє цю форму. Так давайте зробимо це. Перейти назад в файл контролерів. Те, що ми збираємося зробити, це здійснити цю нову функцію що дозволяє створити повідомлення. Оголосити нову функцію. Суспільна функція createPost. І ця функція буде трохи більш складним, ніж те, що у нас було раніше. Але ви побачите тут, що ми не відбувається насправді писати SQL. ORM, Красномовним ORM, збирається дозволити нам це зробити в деяких способи більш елегантний спосіб. Отже, ми збираємося створити нову посаду. І тут ми примірника нового об'єкта від моделі, що ми просто створений, після модель. І те, що ми збираємося зробити, це встановити Назва атрибутом цього використовувати щось що ми отримуємо від сервера. Таким чином, це схоже на те, що що було раніше в CS50 фінансів де ми хотіли б зробити, використовуючи Супер Глобальний Повідомлення дивлячись на титул. Так Laravel забезпечує деяку санітарії і ще багато чого, використовуючи цю допоміжну функцію. Таким чином, ми воліли б використовувати це замість того, цієї дуже простий сирому вигляді з PHP. І тоді те, що ми збираємося зробити, це встановити Зміст до входу отримати зміст. Ми насправді відбувається, щоб обернути це корисний функції що PHP забезпечує називають nl2br, що Виявляється нових ліній NLS, в БРС перерви, так що ми можемо насправді є різні пункти в ньому. І, нарешті, те, що ми збираємося зробити, це зберегти цей пост. Так ми називаємо функцію заощадити на цій моделі. Ми збираємося, щоб зберегти свій пост. І, нарешті, те, що ми збираємося зробити це перенаправлення користувача спеціально на маршрут, який ми збираємося створити найближчим часом, Псевдонім, viewPost. І ми збираємося пройти в аргументах ID, будучи ідентифікатор цієї нової посади. Відмінно. Отже, якщо ми насправді піти і запустити цю. Ми збираємося додати новий запис. Давайте сказати, що це семінар 50. І сказати, звичайно. ASDL. Неважливо. Якась зміст. І уявити його. І ми помітили, що, агов. маршрути не визначені. Але якщо ми поглянемо на PhpMyAdmin і шукати чи ні нашої функції нічого не робив. Подивіться на посадах Blog50. Ми помітили, що, гей. Насправді, у нас просто створити що блог пост з тимчасовими мітками, як зазначено. Отже, тепер давайте повернемося і фактично створити це інша функція в нашому контролері, зокрема, контролер viewPost. Функція viewPost Так громадськості. Так ось що ми будемо робити, замість того, щоб мати порожні дужки, ми хочемо пройти за ідентифікатором пост, який ми створюємо. А звідси, що ми збираємося робити насправді запит до бази даних для нього. Так що, якщо ми в темах, є функція, звана Знайти що дозволяє запитати його ID. Зокрема, насправді, ми збираємося використовувати альтернативну версію цього називається Знайти або ні, що дозволяє нам кинути з цієї функції, кинути виняток, якщо ID ми передаємо не існує. І тоді ми будемо щось робити схоже на те, що ми робили раніше де ми встановлюємо зміст цій сторінці, щоб бути надана версія цього нового погляду який ми збираємося створити, blog.view. І ми збираємося перейти в it-- так само, як в CS50 зробити function-- словник змінних. Ключі цього асоціативного масиву стати змінних в шаблоні. Так що ми збираємося робити після посту. Так проходять побічно пост, ми запитується з бази даних. , Тепер те, що ми збираємося створити цей вид так що ми можемо насправді дивитися Повідомлення в блозі, що ми побудували. Отже, ми збираємося створити файл з ім'ям view.blade.php. Так всередині цього шаблону, те, що ми збираємося зробити разом узяті просто сторінка, дозволяє відображати вміст. Так ми робимо розділ, що, перш ніж утримання. Стоп. І те, що ми збираємося зробити в тут написати який-небудь HTML для відображення цієї сторінки. Отже, ми збираємося, щоб обернути його з фантазії Новий елемент HTML5 під назвою статті. І тут ми йдемо мати заголовка, в якому ми збираємося просто мати h1, який включає в себе заголовок запису. Так от, якщо ми подивимося на це подвійні фігурні позначення дужки, це буде робити по суті PHP відлуння заголовок поста. Так що це корисно скорочення що Laravel дає нам. Отже, ми збираємося використовувати це позначення замість цього. І ось, ми збираємося також роздрукувати зміст його. І тут ми йдемо зробити пост зміст. І на дні, що ми збираюся зробити, це створити колонтитул. І в підвалі, ми збираємося Перший показ, коли це була розміщена. Так що це була розміщена на, створений в. І Laravel використовує дуже приємно Дата бібліотеки під назвою Carbon. Так що ми можемо зробити щось під назвою difforHumans, що ви бачили раніше. Коли ми в курсі. це скажу, як, п'ять секунд тому. Так що це дуже приємно Функціональність Laravel. І, нарешті, ми збираємося щоб закрити цей підвал. Отже, якщо ми повернемося до Головна сторінка ми збираємося не бачу нічого тут ще й тому, ми не кодується до домашню сторінку. Але якщо ми підемо на повідомлення слеш один, ми збираємося, щоб побачити виняток. Хто-небудь знає, чому ми бачимо виняток? Що нам не вистачає? Будь-які ідеї? Отже, що ж ми робимо раніше для нас насправді щоб визначити, як ми доберемося до конкретні контролери? SPEAKER 1: маршрут? ЕРІК Оуян: Так. Таким чином, ми як і раніше повинні визначити маршрут. Таким чином, ми повернемося сюди, щоб routes.php. Ви помітите, що ми фактично не визначений як ми збираємося, щоб отримати для цього контролера. Так що тепер ми будемо визначати цей маршрут. Це досить просто, схоже на те, що ми робили раніше. Але те, що ми збираємося відзначити тут що ми будемо мати заповнювач. Так що, якщо ми робимо route.get слеш ідентифікатор поста. Так ID тепер, що буде бути передані в контролер. Це збирається використовувати контролер, який ми тільки що створений, BlogController на viewPost. І ми збираємося Псевдонім це як viewPost. Відмінно. Отже, тепер ми збираємося створити цей маршрут. Так що тепер, якщо ми йдемо тут та оновити цю сторінку, ми насправді дійсно є наш новий пост в блозі. Так що це те, що ми створили раніше. Дуже проста сторінка, але відображає повідомлення в блозі, що ми тільки що створили. Круто. І якщо ми насправді йти через весь Процес створення нового запису в блог, ми помітили, що всі перенаправляє правильно. Якщо я кажу "Привіт. Я Джонатан Тан ". Скажімо, "Це мій блог." І уявити його, це створить Цей новий пост в блозі з ID 2, яка збільшує від того, що ми мали раніше і відображає його правильно. Високий. Є питання? Так? SPEAKER 2: Чи Laravel ручку санітарна обробка та все для вас? ЕРІК Оуян: Так. Тому, коли ми бачили раніше, коли ми зробили вхід товстої кишки товстої кишки отримати, що сануючої будь SQL ін'єкції і ще багато чого який ми могли б виконати, якщо ми зловмисник сайту. Так Laravel обробляє багато того, що за лаштунками. Хороше питання. Отже, давайте поглянемо на головній сторінці. Так що, якщо ми спочатку повернутися до контролер для домашньої сторінці, Ви помітите, що він не робити тут. Ви помітите, що ми не переходячи в цьому контролері нічого особливо корисним. Це тільки в цьому індексний файл. Отже, давайте переходити в це щось корисне. І, зокрема, ми збирається пройти на посаді. І Laravel дозволяє зробити запис усього, що дозволить нам отримати всі повідомлення. Тепер, якщо ми повернемося до index.php, ви побачите, гей. Нічого ще немає. Але те, що ми хочемо зробити тут насправді перебору, зробити цикл по кожному елементу над посад, які дозволяє роздруковувати повідомлення. Так Foreach повідомлень як посада, що ми хочемо зробити, це роздрукувати вміст з повідомлення в блозі. Але одна річ, ви помітите, що ми насправді написав велику частину цього коду вже в view.blade.php. Так що ми збираємося насправді зробити це використовувати хороший корисну функцію леза і винести за цей загальний код. Так ми йдемо сюди. Ми збираємося взяти цей контент прямо тут, і те, що ми збираємося робити це створити нову папку. Давайте просто називають його часткових. І тут ми йдемо створити post.blade.php. Так от, ми факторізовать шлях в які ми хочемо відобразити ці повідомлення. І ось що ми будемо робити, а не фактично не маючи, що HTML безпосередньо, ми збираємося використовувати цю директиву називається включають blog.partials.post. І те, що ми збираємося зробити тут це передати на посаді сторінки. Отже, якщо ми повернемося сюди, ми зауважити, що функціональні можливості і раніше такий же. Але тепер у нас є це факторізовать код, на цей HTML. Таким чином, ми можемо використовувати його в індекс. Так от, це дуже просто. Все, що ми робимо, це включити blog.partials.post і масив. І десь в і колись, ми після посту. Отже, якщо ми повернемося до домашня сторінка, ми побачимо, що, гей. У нас є список всіх повідомлення в блозі, які ми мали раніше. Ми, можливо, захочете додати деякі "якщо" умови і "інакше" умови так що якщо у нас немає що-небудь на блозі, ми хочемо показати щось корисне. Мовляв, гей. Там немає змісту, але на блозі. І якщо ви, хлопці, насправді виглядають на Код розподіл на GitHub, ви побачите приклад того, як ми робимо це. Круто. Є питання? Так. SPEAKER 2: Я думаю, просто Основне питання ,. Повернутися на маршруті. ЕРІК Оуян: Так. Якщо ми поглянемо на маршрутах. SPEAKER 2: Де uses.blogcontroller на створення пост, що це спрямовують нас до? ЕРІК Оуян: Так. Так. SPEAKER 2: Або те, що that-- ЕРІК Оуян: Отже, поглянемо, скажімо, Наприклад, цей маршрут прямо тут. Перша частина є фактичним URL, що користувач буде піти. І цей масив тут, Асоціативний масив, визначає як ми хочемо, щоб акт застосування у відповідь на це. Так використовує це контролер, функції, які ми хочете подзвонити, коли користувач переходить до цього URL. Так viewPost тут був функція, яку ми визначається всередині з BlogController-- SPEAKER 2: Я бачу. ЕРІК Оуян: --so, що ми може насправді зробити вигляд, виконати деякі розрахунки, взаємодіяти з базою даних SQL. SPEAKER 2: ОК. ЕРІК Оуян: А потім інші частина, "як" це псевдонім, який ми використовуємо. Так що, якщо ми помічаємо, коли ми створили форму, Ви помітите, що URL :: routecreatePost. Так він замінює у фактичній URL, так що ми не складно кодування їх у так що ми можемо змінити його коли, скажімо, якщо ми хотіли перейменувати. Замість того, щоб після косою риси нове, ми хочемо зробити подібне, р скоротити новий просто очистити до наших адрес бітів. Все змінювалося в одному місці, а ніж у всіх різних файлів. Круто. Це добре. Так що тепер у нас є дуже Основний блог-платформа. Ми, ймовірно, хочете додати кнопки, щоб що ми дійсно можемо створювати нові повідомлення. Так що, якщо ми поглянемо на макет Учителя, у нас є розділ під назвою заголовка правої що ми тільки що визначили на вершині. Отже, ми можемо додати кнопки верхня частина заголовка. Так що, якщо ми йдемо в index.blade.php, насправді зробити, це визначити, що відбувається всередині тут. Так в цьому розділі заголовка праворуч, те, що ми збираємося зробити це додати в кнопку, щоб перейти до URL визначається за маршрутом новому посту. Просто, щоб очистити його і зробити це досить і всі Bootstrap, ми збираємося зробити ця кнопка за замовчуванням. Давайте просто зробити його великим для задоволення. А всередині нього, ми могли б поставити який-небудь текст. Але те, що Bootstrap забезпечує є glyphicons. Так що ми можемо насправді додати, що хороший олівець, який ми бачили раніше. Glyphicon. Glyphicon-олівець. Так що це дозволить нам поставити У значок замість тексту. Тепер, якщо ми зупинити це буде визначати цей розділ. І, гей. У нас є хороший кнопку, яка пов'язує нас безпосередньо додати сторінку блога пост. Таким чином, ми маємо досить простий блог. Ми можемо додати матеріал на нього. Але те, що ми зазвичай чекаємо від блогах коментарів. Так що це дійсно важливо для нас, сказати, якщо хтось відвідує веб-сайт і дійсно любить пост, вони можуть брати участь в обговоренні з іншими людьми, які відвідують сторінку. Отже, ми збираємося піти і створити Нова таблиця бази даних і нова модель так що ми можемо пов'язати коментарі з посад. Отже, перший крок, так само, як і раніше, є те, що нам потрібно запустити міграцію. Так як раніше, ми робимо PHP ремісник мігрують: зробити. І ми збираємося, щоб створити одну називається create_comments_table. Це створить файл що має наш новий міграції. І ми збираємося, як перш, визначити нову таблицю. Так Схема :: створення таблиця з ім'ям коментарі. Ця функція тут. А всередині цієї таблиці, що ми збираємося зробити, це по-перше, як і раніше, привласнити ідентифікатор. Збільшує ID. Ми збираємося, щоб дозволити користувачам спілкуватися їх назви з особливим коментар. Ми збираємося, щоб мати зміст, який йде разом з цим, текстовий зміст. А ось те, що ми збираємося зробити щось інше. Ми збираємося створити ціле що називається post_id, які означатиме яку посаду що специфічний коментар йде с. Крім того, ми насправді відбувається в встановити обмеження зовнішнього ключа з цього питання. Так MySQL буде застосовувати це. Ми не намагаємося призначити Кількість коментарів 5 для розміщення 5000, якщо ми не було 5000 повідомлення про нього. Отже, що ми робимо тут, ми робимо іноземних post_id збирається бути пов'язані з поле ID з посади таблиці. І ми будемо насправді щось зробити ще корисно, це OnDelete. Так що, якщо ми видаляємо деякі Повідомлення з бази даних, що ми хочемо каскадом видаляє коментарів, а також. Тому що це не дуже корисно для нас зауваження за посадою що не існує. І, нарешті, як і раніше, ми збирається встановити тимчасові мітки на цьому. І, як і колись, ми збираємося є зворотна міграція буде видалення таблиці коментарі. Отже, якщо ми повернемося сюди, ми збираємося запустити цю міграцію, майстрових, мігрують. А тепер він застосовується це міграція, що ми тільки що створили. Так що, якщо ми подивимося на PhpMyAdmin, що ми робимо, насправді, в даний час є коментарі таблицю, яка має структура, яку ми тільки що вказано. Так як раніше, ми збирається створити нову модель до абстрактного таблиці SQL що ми тільки що створили. Тому давайте додамо новий файл. Ми збираємося називати його Comment.php. І це насправді буде досить просто з невеликою зміною від чого, що було раніше. Так клас Коментар розширює красномовний. І те, що ми збираємося зробити тут визначити це функція, яка є Відносини з іншими моделями. Таким чином, ми будемо мати після функції ось що повертає цей зв'язок. Таким чином, ми уточнивши, що Це відноситься до повідомлення, кажучи, що є один пост що цей коментар відноситься. Це насправді повинен бути капітал P для даної моделі. А тепер тільки на інший фліп сторона, ми повинні сказати, що, гей. Повідомлень є коментарі. Так що ми збираємося зробити, це визначити коментарі суспільна функція. І ось повертається Це має багато коментар. Так що тепер чарівним, коли у нас є пост, ми можемо отримати коментарі атрибутів і він буде заповнити її Інформація з бази даних. Отже, давайте насправді йти до кінця і додати нову функцію, на наш погляд файлі так що ми можемо і дисплей і створювати коментарі. Отже, ми збираємося, щоб визначити нову секцію. Давайте просто відокремити його з горизонтальної лінії. Розділ ID = "коментарі". Те, що ми збираємося зробити ось, як і колись, перебору всіх коментарів. Тому насправді, як ми робимо це, як я вже говорив, досить магічне. Ми робимо залишати коментарі. І тоді ми можемо зробити це для кожного цикл по кожній з коментарів. І те, що ми збираємося зробити клас DIV коментар, і ми збираємося насправді роздрукувати цей коментар. Так відображення, що агов, коментарі name-- людини , Що розмістив цей comment-- говорить точка точка точка. Ми збираємося зробити це в блоці цитата, просто щоб зробити це добре виглядати. А потім коментувати Блокувати вміст цитату. І Еогеасп. Так що тепер це буде цикл через всі коментарі який пов'язаний з кожним з повідомлень і відображення кожного з цих зауважень. Я збираюся додати ще один розділ вниз тут, який дозволяє додати коментар. Так h3 клас. Покладіть назву тут. Додати коментар. І ми збираємося визначити нову форму. Так як раніше, ми збирається робити вигляд дії. І ось, нова акція ми визначатиме новий контролер, який дозволяє нам реагувати на повідомлення запити для створення коментарів. Так URL :: Маршрут createComment. Я збираюся пройти в параметрі тут. ID поста, що ми створюємо коментар на. І то метод цьому Форма буде після. Тепер ми збираємося додати в два поля, форма група. Це буде вхід з Назва "Ім'я" і класу = "форм-контроль», тип = "текст", а з Прототип = "Ім'я". Ми також збираємося визначити інше поле форми, яка буде текст області, як було раніше. Так само, як і раніше, називати його зміст. Клас = "форма контролю." Заповнювач = "Напишіть тут." І просто так, що ми може насправді представити його, представити тип і клас = "БТН БТН-первинні." Закрийте форму. Закрити цю дію. Так що тепер, якщо ми оновити цю сторінку, де у нас є, скажімо, той чи інший пост. Ми повинні перезавантажити сервер. PHP ремісник служити. Перезавантажте це. Ми повинні визначити маршрут. Але зараз, давайте просто прийняти це так, що ми можемо насправді показати вам, що сторінка виглядає, а потім ми насправді створити цей маршрут. Так, гей. У нас є новий вид сюди так що ми можемо створювати коментарі. Отже, давайте насправді визначити функції в контролері так що ми можемо додавати коментарі. Давайте повернемося. І протягом blogcontroller.php, те, що ми збираємося зробити це створити нову функцію називається створити коментар. Суспільна функція createComment. Це матиме одного Параметр, ID посад що ми коментуючи. І, як і раніше, ми буде спочатку отримати посаду. Так писати findOrfail ID. Після цього, ми збираємося для створення нового коментаря. Так коментар = Новий коментар. Коментар Ім'я = Вхід :: отримати ім'я. Коментар зміст = ж нова лінія в перервах вхідних :: отримати зміст. І, нарешті, ми збираємося мати, щоб пов'язати цей коментар з цієї посади. Отже, ми збираємося використовувати Ця функція, коментарі, що дозволяє нам економити ці відносини. Так що тепер цей коментар буде автоматично після ID. Ми могли б також встановити його вручну, але це більш зручним для читання, наскільки як функція йде. І після того як ми виконати це те, що ми хочемо зробити, це перенаправлення користувача на маршрут, заданий за viewPost з масивом з Параметр поштового ідентифікатора. І зараз, так що це насправді функції, ми повинні визначити цей маршрут. Маршрут :: Post. І тепер ми збираємося назвати це Повідомлення скоротити ID слеш коментар. Масив використовує нову функцію що ми тільки що створили. BlogController. CreateComment як createComment. Відмінно. Так що тепер, сподіваюся, якщо ми оновити цю сторінку і додати в коментар, скажімо, Девід Малан. "Сподіваємося, що це працює." Відправити. Ми, по суті, є коментарі на цій посаді в блозі. Круто. Так що тепер у нас є досить функціональна блозі. Ми тільки збираємося додати пару налаштувань, так що у нас є ще кілька корисних Інформація про ці посад. Так що, якщо ми повернемося до Головна сторінка, у нас немає ніякого сенсу скільки коментарі на кожному з цих посад. Так що ми насправді відбувається зробити це, в нашій моделі, визначити допоміжну функцію, яка дозволяє нам вказати кількість коментарів які йдуть з конкретної посади. Отже, ми збираємося створити допоміжна функція. Суспільна функція. GetNumCommentsStr. Так рядок, який визначає кількість коментарів, які виходять разом з ним. І те, що ми збираємося зробити, це сказати, що Num = це коментарі в рахунок. Отже, ми збираємося, щоб розраховувати Кількість коментарів. І якщо це число дорівнює 1, ми просто хочу, щоб повернутися 1 коментар. А потім в іншому випадку, ми хочемо, щоб повернутися конкатенація піт і коментарі, таким чином ми отримуємо плюралізація правильно. Просто зробити це одинарні лапки. Один коментар. І тепер ми можемо використовувати цю функцію безпосередньо всередині нашого зору. Так що, якщо ми повернемося до часткові повідомлень, які ми створили, тепер ми хочемо насправді відобразити ряд зауважень. Отже, що ми можемо зробити, це Повідомлення, використовуйте цю функцію що ми тільки що створили, щоб відобразити ряд зауважень. Отже, якщо нам оновлення, він робить, насправді, дисплей цифрові коментарі які йдуть разом з нею. Якби ми хотіли бути вишуканою, якщо вас реально поглянути на код розподілу, ми можемо насправді посилаються це коментарях. Якщо ви пам'ятаєте, ми визначили в дивитися, що це має розділ ID коментарі. Так що, якщо ми насправді хотіли зв'язати безпосередньо розділі коментарів, що ми будемо робити тут HREF Адреса маршрутом viewPost. Перейдіть в масиві ID пост ID. А потім ми хочемо поїхати в зокрема, розділ коментарів. Ось давайте закрити тегом. Так що тепер, якщо ми оновити цю сторінка, натискаємо з цього питання. Ми підемо прямо до розділ коментарі. Якби ми мали довшу пошту, ви можете Побачити цей відскік вниз. Але ви помітите, що це не в верхній частині сторінки. Круто. Відмінно. Так ось досить проста приклад чогось простого що ви можете зробити з Laravel. Але ви можете помітити тут, що ми зробили багато речей, з досить невеликою кількістю коду. Laravel дозволяє нам робити SQL запити за лаштунками. Це робить санітарії для нас за лаштунками. Дозволяє нам, щоб зробити ці відносини дуже легко і без нас необхідності робити будь-які SQL приєднатися заяви об'єднати коментарі з тим, що посади. Дозволяє нам робити це спадкування шаблонів так що ми можемо визначити ці вкладення файли, так що ми не повторюючи себе, так само, як коли ми були, що відображення повідомлень в блозі що ми не повинні скопіюйте і вставте код. І тут ви можете побудувати більш складні програми. Ви можете собі уявити, якщо ми хотів реалізувати увійти в, ми могли б сказати, приносять у третій партії структура, яка дозволяє нам робити це. Там купа з них що, дійсно, дуже Здорово, що можна зробити, як, відновлення пароля. І це буде надсилати вам Скидання пароля електронної пошти. Ми можемо реалізувати дозвіл так що я можу створити пост, але хтось не можу його відредагувати. Ми можемо реалізувати Функціональність видаляти повідомлення. Але ви можете подивитися тут, що ми маємо досить Багато всього рудиментарні компоненти побудувати деякі дійсно, дійсно, динамічний і захоплюючий веб-додатків. Так з цим, я думаю, що ми добре. Як ви, хлопці, є які-небудь питання? Так? SPEAKER 3: Як вам отримати статичний контент? ЕРІК Оуян: Статичний контент. Таким чином, ви бачили раніше, що, коли ми були це прямо тут, це зміст макета, Подивитися робить, ми мали це без цього масиву після цього. Blog.index, у нас було це як тільки статичний файл. Так що, якщо ми не проходять що-небудь разом з ним, це буде просто надавати HTML безпосередньо. Але якщо ми перейдемо в цьому асоціативному масив повідомлень, які динамічно витягнув з бази даних, ми може зробити сторінку динамічної. Круто. Будь-які інші питання? SPEAKER 3: Як би ви порівняти Laravel, можливо, деяких інших варіантів? ЕРІК Оуян: Звичайно. Так. Так Laravel is-- це великий question-- один з багатьох варіантів для веб-фреймворків. Так Рубін на Rails є той, який популярний. Я вважаю, що Twitter колись здійснюється з Рубіном на Rails. Я думаю, що вони так перемикатися. Там ще один називається FuelPHP. Так Рубін на Rails використовує Ruby, мова і реалізує багато матеріалу MVC що ми бачимо тут. FuelPHP ще один рамки PHP. Django є одним з моїх улюблених. Це веб-фреймворк для Python. Таким чином, ви можете написати веб-додаток в Python. Так що тонна цих варіантів. Laravel, я думаю, що загалом і велика моя улюблена право Тепер для PHP тільки тому, що компонентів про які ми говорили раніше. Це Композитор включений. Вона включає в себе дуже, дуже виразні ORM система. Також має дійсно дивовижний шаблонів Мова, що деякі з інших просто не дають. І міграції. Міграції є дивовижними, а також. Прохолодний? Високий. Ну, спасибі за дивитися цей семінар, і удачі у ваших кінцевих проектів.