[Играет музыка] ЭРИК Оуян: Эй, все. Добро пожаловать. Это здание 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 система. Также имеет действительно удивительный шаблонов Язык, что некоторые из других просто не дают. И миграции. Миграции являются удивительными, а также. Прохладный? Высокий. Ну, спасибо за смотреть этот семинар, и удачи в ваших конечных проектов.