[音乐播放] ERIC欧阳:嘿,大家好。 欢迎。 这是构建动态 Web应用程序与Laravel。 我的名字是埃里克·欧阳。 我是一名大二的学生学习社会研究 在计算机科学的辅助, 我住在亚当斯 这里的房子在哈佛。 所以Laravel,其最核心的, 是一个MVC Web应用程序框架。 所以喜欢你们有 一直在做与CS50金融, Laravel是一个框架,允许 你建立动态Web应用程序。 所以,你可以认为它在某种意义上 作为填充的类型的延伸 你一直在做CS50 财政部,而是一个系统的 很多更强大的,很多 在某种意义上更优雅, 并提供了大量的 为你的功能 建立相当复杂 Web应用程序。 所以,让我们通过一些 的主要特点, 然后我们将深入到 例如建立一个博客的 应用程序Laravel。 所以第一件事情之一是 从MVC类型的工作,它的区别 你一直在做与CS50 是它包括一个ORM引擎。 所以ORM代表对象 关系映射。 因此,这可以让你打造 一个抽象层 数据库之间 和你的控制器。 因此,在CS50财务不像的地方 您可以直接进行查询, ORM层可以让你 抽象的路程,创造 模型是比更强大的 您可以直接用SQL查询。 另一件事是真的 乐于助人是可继承模板。 所以,你会发现在CS50金融, 你最终改写了很多东西, 其中,地方你可能 重复使用的东西,你不能够。 所以,在这里Laravel,你可以使用什么 被称为刀片模板引擎 创建一个总纲。 从那里,你可以继承 这样子的模板其实可以 包括内的元素 这更大的基础模板。 迁移。 因此,这是一个相当标准的特点 大多数现代Web应用程序框架。 因此,这可以让你代表 代码数据库模式的变化。 因此,没有会说,phpMyAdmin的, 实际上你可以创建这些迁移 在那里你代表数据库 架构在代码中直接改变。 这可以让你to--特别是 如果你有多个工作的人 在同一个网络application-- 跟踪这些变化, 说,在GitHub上,或者一些其他存储库。 所以这是非常有帮助 并减轻需要 ,比方说,通过身边的很多SQL转储。 最后,作曲是 东西真的,真的有用 这使您可以使用其他 人的代码做的真棒事情。 所以Laravel的结构如下 一些作曲家的包。 所以说,如果你想带 在身份验证程序包 或者,如果你想带来一些 排序生成脚本或管理员的 接口,可以即插即用 这些组件与作曲。 因此,让我们开始吧。 你的任何问题 我们之前的家伙开始了吗? 没问题吗? 酷。 所以,第一步是 安装作曲家。 所以作曲家可以让你 管理这些依赖关系, 无论是在Laravel框架 或一些其它第三方延伸。 第一个命令允许 您下载作曲家, 第二个命令可以让你 移动到你的本地bin文件夹 这样您就可以运行作曲 直接通过端子。 在此之后,继续前进, 创建一个新的Laravel项目。 我们究竟要 使用一些示例代码 我已经把 创建这个博客。 但如果你从开始 从头开始,你可以使用这个命令 在这里,作曲家创建项目, laravel斜线laravel,然后 你的项目的名称。 而这将包括 所有的分销代码 用于启动一个新的Laravel项目。 因此,对于你CS50最后的项目,你会 可能需要使用该命令。 但是,我们要开始了。 所以,一旦你做到 这一点,你会得到 一个相当广泛的数 在blog50文件。 因此,让我们刚刚经历 其中的一些组件。 你会发现,在这条线路 目录中,有一个应用程序的文件夹。 里面的应用程序文件夹中,有 一对夫妇有用的文件夹。 注意,开始与 是这样的config文件夹。 所以这个设置是如何 你的web应用程序是 去,比方说,验证人们或 现金事物或连接到数据库。 什么是真正 乐于助人是Laravel 允许您设置不同 开发环境。 因此,我们在这里所做的是,如果 我们走在了本地文件夹, 有一个为database.php文件。 你会发现在这里,我们 建立一个MySQL连接的 允许个人连接 到MySQL服务器的 直接在CS50器具。 我们正在连接到数据库 我成立了一个名为Blog50。 因此,让我们真正去前进, 运行的这个工作版本, 只是为了得到一个什么样的感 应用程序,我们正在建设 看起来像。 所以我有一个副本 这Blog50完成。 居然如此Laravel 已建成的一台服务器 您可以直接运行 在命令行。 因此,这是类似于 前PSET实际上,当你 打造C.你自己的服务器 因此,他们有一个内置的等 你可以运行你的应用程序Laravel 直接在命令行。 因此,如果我们做的PHP工匠服务,这 将推出开发服务器 在端口8000。 因此,如果我们去本地主机 8000,你会发现,哎。 我们有我们的博客和运行。 所以Laravel这里产生 我们的博客的头版。 非常简单的应用程序。 但有一对夫妇 真正漂亮的功能 它提供的罩的下方。 因此,博客的应用程序的 简单。 如果我们想创造一个帖子, 我们可以点击该按钮。 我们可以说,“嗨,大家好。 这是一个非常有趣的 研讨会上,“例如。 写下来的东西在这里。 这里文本。 如果我们点击提交,你会 请注意,我们的新博客 交的已被添加到该 博客的头版。 如果我们回到这里,你会发现, 出现了一些评论已经 在博客上。 因此,如果我们向下滚动,你会 请注意,乔纳森说谭 他是非常受这一职位感兴趣。 因此,我们将进入怎样的对象 关系映射允许 你在做这些关系 一个相当无缝的方式为好。 酷。 有关功能的任何问题 什么我们要打造? 酷。 因此,让我们开始与实际 创建数据库表。 所以,记得在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,哪 我们要创造一点点。 你会发现这里六号线的 我们指定这个变量,布局。 如果我们看一看 在浏览文件夹, 有一种版式文件夹,里面 包括一个非常基本的HTML文件。 值得注意的同时,你会发现 我们有这个容器 在这里,产生的内容。 所以,我们的模板里面 我们将做什么 正在创造什么将是 这种布局内直接取代。 因此,我们说,我们要呈现 所谓的模板blog.new。 但博客里面,有 没有这种新的模板。 因此,我们要创建一个 所谓的文件new.blade.php。 这告诉Laravel了 这个PHP文件应该 将与所绘制的 刀模板引擎。 因此,这是一个相当 简单的文件。 这将是由形式 我们实际上添加的博客文章。 所以,这里的魔法从 继承是,哎。 我们要指定 部分,所述内容部分 在这里,这是划定 通过@section和@stop。 那么,什么是介于两者之间这里将 代入的总体布局。 在这里,我们想要做的是 很简单的创建一个新的HTML文件。 让我们只需添加一个快速称号。 添加一个博客帖子。 并在其中,我们 要创建一个表单。 这种形式将会有一个动作。 这将是什么 我们后来的替代, 我们将看到如何 路由适合这里。 但我们只是要确定现在 这去的URL与路线 从createPost。 然后这将 有方法后。 在这里,我们要 有两个字段。 DIV CLASS =“形组”。 我们使用的引导CSS库 由Twitter提供的慷慨。 因此,我们要创建两个这样的。 所以这第一个输入 将是标题。 因此,输入名称=“称号”。 类=“formcontrol”。 类型=“文本”。 我要添加一个占位符=“标题”。 然后,第二个是 将是一个文本区域。 NAME =“内容”。 类=“formcontrol”。 和占位符=“写到这里”。 在那里,我们走了。 最后,我们要 添加快速提交按钮。 类型=“提交”级=“BTN BTN-小学”。 所以这些都是 引导的功能,所以 这可敷设 出的方式,是 猎物的用户, 而不是赤裸裸的HTML。 所以,我们在这里所定义的控制器。 我们定义了一个非常简单的看法。 但缺少的是 结缔组织。 所以在这一点上, Laravel不知道如何 我们要以实际 访问该控制器。 因此,这是在一个确定的 所谓的文件routes.php。 而现在,我们有一个路线。 这是当我们去 家路径这个网站, 它会呈现 该指数控制器。 所以在这里我们需要做的是落实 我们的一个新的途径创造一个职位。 因此,我们使用这种方法 得到的,其中规定 当用户尝试该 得到这个page--专 后斜线新page-- 我们将做什么 是使用名为控制器 BlogController新的岗位。 我们刚刚创建的。 然后我们要去 别名它作为newPost。 我们将创造另一个 功能一点点。 但是,什么是在这里下 关键“为”是什么 我们可以在替代 我们的刀片模板。 所以现在,让我们 居然还说路线。 因此,我们也将 创建一个控制器 这样我们就可以创建这些职位。 所以,如果一个用户帖子的网页后 新的削减,我们要做的 是使用一个控制器 我们将在短期内创造 所谓BlogController在createPost。 我们要去的别名 这与作为createPost。 酷。 有问题吗? 酷。 因此,让我们运行我们所拥有的这么远。 因此,如果我们做的PHP工匠服务, 我们会看到很多的错误。 所以看起来我们有一个 航线语法错误行27。 啊。 缺少一个分号。 因此,如果我们去到8000, 你会看到什么在这里呢。 因此,这是默认的主页。 但是,如果我们去张贴大幅削减新的,嘿嘿。 这将是我们刚刚创建的窗体。 现在,我们还没有 实现的功能 当我们按​​下的提交按钮。 因此,如果我们点击提交 按钮,它会运行一个错误。 但是,我们将代码 现在,正是我们 想要做的,当用户 提交此表。 因此,让我们做到这一点。 回到控制器文件。 我们现在要做的是 实施这一新功能 这使我们能够创建一个职位。 申报新功能。 公共职能createPost。 并且这个功能将是一个 点点比更复杂的是什么 我们以前有。 但是你会看到这里,我们是不是 要真正写任何SQL。 在ORM,雄辩 ORM,会允许 我们为此在一些 如何更优雅的方式。 因此,我们要创建一个新的职位。 在这里,我们 实例化一个新的对象 从模型,我们只是 创建后的模型。 而我们要做的是什么设置 这种使用的东西的title属性 我们从服务器获取。 因此,这是类似于 我们在CS50财务以前有 我们会做,使用超级 全球邮政寻找称号。 所以Laravel提供了一些卫生 和诸如此类的东西使用这个辅助功能。 因此,我们更愿意用这个来代替 从PHP这个非常基本的原始形式。 然后我们要做什么设置 它的输入内容获取内容。 我们究竟要包装 这一个有用的功能 在PHP提供了一种称为nl2br,这 打开新的生产线,NLS,成BRS,休息, 所以我们实际上可以有 在它的不同段落。 最后我们要去 要做的就是保存这个职位。 因此,我们调用函数 保存该模型。 我们要保存的职位。 最后我们要做的 具体重定向用户 这是我们要去的路线 通过viewPost创建不久,别名。 而且我们要传递的参数 ID,是这一新职位的ID。 大。 所以现在,如果我们真的去并运行此。 我们将增加一个新的岗位。 比方说,这是研讨会50。 并说,一定。 ASDL。 随你。 某种形式的内容。 并提交。 我们会发现, 哎。路线不限定。 但是,如果我们看看phpMyAdmin的,并 看看我们是否不起作用 做了什么事情。 看Blog50岗位。 我们会发现,哎。 事实上,我们也刚刚创建的博客 按规定带有时间戳发布。 所以,现在,让我们回过头来实际创建 在我们这个控制器等功能, 特别是viewPost控制器。 所以,公共职能viewPost。 所以在这里我们会做的,而不是 有空括号, 我们要传递的ID 我们所创造的岗位。 从这里,我们打算怎么做 实际上是在数据库中查询它。 所以,如果我们不发布, 有一个调用的函数 发现允许我们通过ID进行查询。 具体来说,其实,我们要 使用这种替代版本,称为 查找或失败,这使我们 退出了这一功能, 引发异常如果ID 我们通过在不存在。 然后我们要做的事 类似于我们以前所做的那样 在这里我们设置内容 这个页的要 这一新观点的渲染的版本 我们要去创造,blog.view。 而且我们要传递到 它 - 就像在CS50渲染 function--变量的字典。 这个关联数组的键 成为模板内的变量。 所以,我们要交的岗位做。 所以通过间接的职位, 我们已经从数据库中查询。 。 现在我们要去 要做的就是创建这个视图 所以我们实际上可以查看 我们已经建立了博客文章。 因此,我们要创建一个 所谓的文件view.blade.php。 所以该模板的内部, 我们将做什么 是把一个简单的页面 允许我们显示内容。 所以我们做一节,这是内容之前。 停止。 而我们要去 在做的,是 写一些HTML显示此页面。 所以,我们要以一个奇特的把它包 新的HTML5元素称为条。 而在这里,我们要 有一个头,其中 我们将简单地拥有H1, 其中包括文章标题。 所以在这里,如果我们看看这个 双大括号标记, 这将基本上做 PHP呼应文章标题。 所以这是一个有用的速记 这Laravel为我们提供。 因此,我们将使用 这个符号代替。 在这里,我们要还 打印出来的内容。 而在这里,我们要 做帖子内容。 上下底部我们是 要做的是创建一个页脚。 而在页脚,我们要 当这种被张贴第一个显示。 因此,这是张贴在,在创建的。 和Laravel使用一个非常好的 最新的库称为碳。 所以我们实际上可以做一些所谓的 difforHumans,你刚才看到的。 当我们发布。它会说, 像,五秒前。 所以这是一个非常好的 Laravel功能。 最后,我们要 关闭此页脚。 所以现在,如果我们回去 首页我们要去 看到这里没有什么,因为没有 我们还没有编码了主页。 但是,如果我们去后斜线之一, 我们将看到一个例外。 有谁知道为什么 我们看到一个例外? 我们有什么缺失? 任何想法? 所以,我们做了什么 早些时候,我们实际上 定义我们如何获得 特别是控制器? SPEAKER 1:路由? ERIC欧阳:是的。 所以,我们还是要确定路线。 所以,我们回去这里routes.php。 你会发现,我们 实际上没有定义 我们如何会得到 到该控制器。 所以,现在我们要确定这条路线。 这是相当简单的, 类似于我们以前所做的那样。 但是,我们要怎么在这里注意的是 那我们将有一个占位符。 因此,如果我们做route.get斜线后ID。 所以ID现在是什么事情 被传递到控制器。 这将要使用的 控制器,我们只是 创建BlogController在viewPost。 我们要去 别名这是viewPost。 大。 所以,现在我们要创建这条路线。 所以现在,如果我们去这里 并刷新该页面, 我们其实也有我们新的博客文章。 所以,这就是我们前面创建。 很简单的页面,但显示 我们刚刚创建的博客文章。 酷。 如果我们确实经历了整个 创建一个新的博客文章的过程中, 我们会发现,一切 重定向正常。 如果我说:“你好。 我乔纳森谭“。 说,“这是我的博客文章。” 并提交,这将创造 这种新的博客文章ID为2, 该增量从我们不得不 此前,它正确地显示。 真棒。 有问题吗? 是吗? SPEAKER 2:是否Laravel手柄 消毒,并为你的一切? ERIC欧阳:是的。 所以,当我们在前面看到的时候 我们做了结肠输入冒号得到, 这sanitates任何SQL 注射和诸如此类的东西 我们可能想,如果执行 我们的网站的恶意用户。 所以Laravel处理大量 那幕后。 好问题。 因此,让我们来看看主页。 因此,如果我们先回去了 控制器的主页, 你会发现,它 没有做太多在这里。 你会发现,我们不 通过这个控制器 什么特别有帮助。 这只是该索引文件。 因此,让我们通入 这个东西有用。 具体而言,我们 要通过职位。 和Laravel让我们 做一切后,这 让我们把所有的帖子。 现在,如果我们回去 index.php文件,你会看到,嘿嘿。 这里没有什么呢。 但是我们想在这里做 实际上遍历, 做一个foreach循环在帖子说 让我们打印出的职位。 所以的foreach职位 后期,我们想要做的 被打印出来的内容 的博客文章。 但有一件事,你会注意到的是, 我们实际上写的大部分代码 已经在view.blade.php。 还等什么,我们要真正做的是 使用刀片的一个不错的有用的功能 并分解出这个共同的代码。 所以,我们去这里。 我们要利用这个内容 在这里,我们打算怎么做 是创建一个新的文件夹。 让我们只是把它谐音。 而在这里,我们要 创建post.blade.php。 所以在这里,我们分解出来的方式 这是我们要显示这些职位。 在这里,我们会做的,而不是 居然直接具有HTML, 我们将使用这个指令 所谓包括blog.partials.post。 以及我们打算在这里做 是通过在页面中的职务。 所以现在,如果我们回到这里,我们将 注意到该功能仍然 相同。 但是,现在我们有这个 提取出来的代码,这个HTML。 所以我们可以在指数使用它。 所以在这里,这是非常简单的。 我们所要做的是包括 blog.partials.post和阵列。 和某处 之前,我们做岗位职务。 所以现在,如果我们回去 主页,我们将看到,嘿嘿。 我们有所有的列表 博客文章说,我们有过的。 我们可能需要一些“如果”加 条件和“其他”条件 这样,如果我们没有 在博客上什么, 我们要显示什么帮助。 喜欢,嘿嘿。 有没有在博客上还没有的内容。 如果你们确实看 在GitHub上的分布代码, 你会看到我们是如何做到这一点的例子。 酷。 有问题吗? 是。 SPEAKER 2:我想刚才 一个根本的问题。 回路线。 ERIC欧阳:是的。 如果我们看一看路线。 扬声器2:在什么地方 uses.blogcontroller在创建后, 是什么指导我们? ERIC欧阳:是的。 是啊。 SPEAKER 2:或者是什么that-- ERIC欧阳:那么,看一看,说 例如,这条路就在这里。 第一部分是实际的 URL,用户会去。 这阵在这里, 关联数组,定义 我们要如何有 针对它的应用程序的行为。 因此,采用的是控制器, 该功能我们 想打电话时, 用户进入该URL。 所以viewPost这里是一个 我们内部定义的函数 BlogController--的 SPEAKER 2:我明白了。 ERIC欧阳: - 因此,我们 其实可以渲染视图, 进行一些计算, 与SQL数据库交互。 扬声器2:确定。 ERIC欧阳:然后其他 一部分“,因为”这是我们使用的别名。 因此,如果我们注意到,当 我们创建的形式, 你会发现,URL :: routecreatePost。 因此,它可以代替实际 URL,这样我们就不难 在这些编码,所以我们可以改变它 一次,说如果我们想重新命名。 相反,后斜线 新的,我们想要做的像,P 新的削减只是为了清理 我们的网址了一下。 我们将改变它在一个地方,而 比在所有不同的文件。 酷。 非常好。 所以,现在我们有一个非常 基本的博客平台。 我们可能要添加一个按钮, 我们实际上可以创造新的职位。 因此,如果我们看一看 在布局法师, 我们有一个叫做头右侧部分 我们刚刚定义了在顶部。 因此,我们可以添加按钮 头的顶部。 因此,如果我们去index.blade.php,实际上 做的是确定发生的事情在这里里面。 因此,这头右侧部分, 我们将做什么 被添加的按钮进入 由航路新岗位定义的URL。 只是把它清理干净,使 它漂亮,所有的引导, 我们要作 这是一个默认的按钮。 让我们只是让大的乐趣。 和里面,我们可以把一些文字。 但是,自举 提供的是glyphicons。 所以,我们实际上可以添加在 我们前面看到的漂亮的铅笔。 Glyphicon。 Glyphicon铅笔。 因此,这将使我们能够把 在图标代替文本。 现在,如果我们不停止,这 将定义此节。 而且,嘿嘿。 我们有一个很好的按钮链接我们 直接添加一个博客文章页面。 因此,我们有一个非常简单的博客。 我们可以添加的东西给它。 但是,我们普遍预期 从博客的评论。 所以这是非常重要的,我们有, 说,如果别人访问网站 真正喜欢的职位, 就可以搞的讨论 与其他人谁访问的页面。 所以我们要去创造一个 新的数据库表和新模式 这样我们就可以联想 与岗位评论。 因此,第一个步骤,就像之前, 是,我们需要运行迁移。 所以,像以前一样,我们做 PHP的工匠迁移:制作。 而且我们要创建一个 所谓create_comments_table。 这将创建一个文件 有我们的新移民。 我们要去,像 之前,定义一个新表。 因此,架构::创建 表称为意见。 此功能在这里。 而这个表里面是什么 我们要做的首先, 像以前一样,分配一个ID。 递增ID。 我们将允许用户关联 他们的名字与一个特定的注释。 我们将有一些内容 随着此,文本内容的推移。 在这里,我们要去 做的是不同的东西。 我们要创建一个整数 这就是所谓的post_id其中 是要表示什么交 一个特别的评论与去。 此外,我们究竟要 设置这样的外键约束。 所以MySQL将强制执行。 我们不是要 分配数量评论 5发布5000如果我们不 有5000个职位就可以了。 所以我们在这里做的, 我们做外贸的post_id 将要与相关联 从表中的帖子ID字段。 我们会做一些事情 别人有帮助的,是onDelete。 如果我们删除一些使 从数据库后, 我们要级联 删除征求意见为好。 因为它不是非常有帮助 我们要对帖子评论 不存在。 最后,像以前一样,我们 打算在这个设定的时间戳记。 和以前一样,我们要 有相反的迁移是 丢弃的意见表。 所以现在,如果我们回去 在这里,我们要 运行此迁移,迁移工匠。 现在它的应用这个 我们刚刚创建的迁移。 因此,如果我们看看phpMyAdmin的, 我们这样做,事实上,现在 有意见表,该表有 我们刚才指定的结构。 所以,像以前一样,我们 要创建一个新模式 抽象的SQL表 我们刚刚创建的。 因此,让我们添加一个新的文件。 我们打​​算把它comment.php。 这实际上是将是相当 直截了当有轻微的变化 从我们面前了。 因此类注释扩展侃侃而谈。 而我们要去 在这里做的就是定义 一个函数,它是 与其它车型的关系。 因此,我们将有一个职位功能 在这里,返回此关系。 所以我们指定 这属于发布, 说是有一个职位 这个评论是属于。 这实际上已经是 资本P表示该模型。 现在只是在其他翻盖 方面,我们不得不说,哎。 帖子有意见。 所以,我们要做的是什么 界定公共职能的意见。 这里返回 这有很多评论。 所以,现在神奇,当我们有一个帖子, 我们可以得到的属性评论 它会用它填充 从数据库中的信息。 因此,让我们其实经历和 添加一个新功能,我们认为文件 这样我们既可以显示 创造意见。 所以,我们要定义一个新的部分。 就让我们分开吧 一个水平线。 第ID =“意见”。 我们现在要做的 这里,像以前一样, 遍历所有的评论。 所以实际上我们如何做到这一点, 正如我所说,相当神奇​​。 我们发表评论。 然后我们就可以做到这一点对每个 遍历各的意见。 什么我们要 做的是DIV类注释, 而且我们要实际 打印此评论。 使显示哎, 评论名称 - 人 谁张贴了这个comment-- 说,点点点。 我们打​​算把这个块 报价,只是为了使它看起来不错。 然后评论内容块的报价。 和foreach。 所以,现在这是怎么回事循环 通过所有的评论 该关联 与每个职位 并显示每个这些意见。 我要下来再添一节 在这里,这使我们能够添加注释。 因此H3类。 把标题在这里。 添加评论。 而且我们要定义一个新形式。 所以,像以前一样,我们 要做到形式的行动。 在这里,新的动作我们 要定义一个新的控制器,其 使我们能够应对发布 要求创建意见。 所以,URL ::路线createComment。 我要传递的参数在这里。 帖子的ID是 我们正在创建的注释。 与此则方法 形式将是后期。 现在,我们要加入 一两个字段,表格组。 这将是一个输入与 命名“名”和class =“表单控制” 类型=“文本”,并且与 占位符=“你的名字。” 我们也将确定 另一种形式的领域,这 将是一个文本 区正如我们前面了。 就像之前,把它的内容。 类=“的形式控制。” 占位符=“写在这里。” 而只是让我们 实际上可以提交, 提交类型和类=“BTN BTN-小学”。 关闭窗体。 关闭这个动作。 所以,现在如果我们刷新这个页面, 我们有,比如说,某一职位。 我们必须重新启动服务器。 PHP工匠服务。 重新启动了。 我们必须定义的路由。 但现在,就让我们借此 出来,让我们实际上可以告诉你 什么样的页面的样子,然后 我们实际上创建路线。 所以,嘿嘿。 我们有这种新形式这儿 这样我们就可以创建注释。 因此,让我们真正定义 在控制器内的功能 这样我们就可以添加注释。 让我们回去。 并在blogcontroller.php, 我们将做什么 正在创建一个新的功能, 所谓创建注释。 公共职能createComment。 这将有一个单一的 参数,该帖子的ID 我们正在评论。 和以前一样,我们 要首先获得该职位。 所以发帖,findOrfail ID。 随后,我们将 创建一个新的注释。 因此,评论=新评论。 评论名称=输入::拿到的名字。 评论内容=相同的新行 到输入的休息::获取内容。 最后,我们将不得不 此评论与岗位相关联。 因此,我们将使用 此功能,评论, 这使我们能够拯救 这种关系。 所以,现在这条评论将有 自动后ID。 我们也可以将其设置 手动,但这是 更容易尽量阅读 作为函数的推移。 我们执行后, 这,就是我们想要做的 是将用户重定向到该 通过viewPost指定路线 与该数组 帖子ID参数。 现在让这其实 功能,我们需要定义这条路线。 路线::岗位。 现在我们要调用这个 后斜线ID斜线注释。 阵列使用了新的功能, 我们刚刚创建的。 BlogController。 CreateComment为createComment。 大。 所以,现在有希望,如果我们刷新这个页面 并添加注释,比如,大卫·马兰。 “希望这个工程。” 提交。 我们呢,其实,有一个 在这个博客上发表评论。 酷。 所以,现在我们有一个相当 功能的博客文章。 我们只是要 添加几个这样的调整 我们有一些比较有用 在这些职位信息。 因此,如果我们回到 头版,我们有没有意义 有多少评论是 在这些职位。 所以我们实际上是将 做的是,我们的模型里面, 定义一个辅助功能,可以让 我们指定的评论的数量 是去一个特定的职位。 因此,我们要创建 一个辅助功能。 公共职能。 GetNumCommentsStr。 因此,一个字符串,指定数量 的评论指出,与它一起去。 而我们要做的是说, 这NUM =对此有何评论数。 所以,我们要算 评论的数量。 如果这个数字等于1,我们 只是要回1条评论。 再不然,我们要返回 NUM和评论的串联, 所以我们得到的多元化是正确的。 只是让这一个单引号。 一个评论。 现在我们可以使用这个功能 直接在我们的观点。 因此,如果我们回到 我们创建了部分职位, 现在我们要真正 显示的评论的数量。 所以我们所能做的就是 后,使用此功能 我们刚刚创建 显示的评论的数量。 所以,如果我们现在刷新,它 确实,实际上,显示 数量评论 与它一起去。 如果我们想成为看中,如果你 其实看一下分布代码, 我们实际上可以链接 这评论。 如果你还记得,我们在定义 查看这有部分ID的意见。 因此,如果我们真正想要的链接 直接向评论部分,有什么 我们这里做的是A HREF 路线viewPost的URL。 通过在后ID阵列ID。 然后我们要去 特别是评论部分。 在这里,让我们关闭的标记。 所以,现在如果我们刷新这个 页面,我们点击这个。 我们将直接进入 评论部分。 如果我们有一个较长的帖子,你可以 其实看到这个反弹下来。 但你会发现,它的 未在页面的顶部。 酷。 大。 所以这是一个相当简单的 例如简单的东西 你可以使用Laravel做。 但你可以在这里看到, 我们已经做了很多的事情 与代码非常少量。 Laravel使我们能够做的 幕后SQL查询。 它的卫生 我们在幕后。 使我们能够做这些关系 很容易,而不需要我们 做任何SQL语句加入到 结合注释什么职位。 使我们能够做到这一点 模板继承 这样我们就可以定义这些嵌套 文件,所以我们不会重复自己, 当我们有这样就像 的博客文章显示 我们不必 复制和粘贴代码。 从这里,你可以建立 日益复杂的应用程序。 你可以想象,如果我们 要实现登录, 我们可以说,引入第三方 框架,使我们能够做到这一点。 有一群人 这是真的,真的 大,可以这样做, 密码恢复。 它会送你一个 重置密码的电子邮件。 我们可以实现权限 这样我可以创造一个帖子, 但别人不能编辑它。 我们可以实现 功能删帖。 但你可以在这里看到,我们有相当 多所有的基本组成部分 建立一些真的,真的, 充满活力和令人激动的网络应用程序。 因此,与这一点,我认为我们是很好的。 难道你们有什么问题吗? 是吗? 扬声器3:你怎么了 获得静态内容? ERIC欧阳:静态内容。 所以,你在这之前看到的,当我们有 这里这个权利,这个布局的内容, 鉴于时许,我们有这个 没有这个数组之后。 Blog.index,我们有这个 如刚刚静态文件。 因此,如果我们不通过 沿途任何东西, 它会只需要直接渲染HTML。 但是,如果我们通过这个关联 阵列的职位,这是动态 从数据库中抽取,我们 可以使页面动态。 酷。 还有没有其他问题? 扬声器3:你会如何比较 Laravel来也许一些其他的选择吗? ERIC欧阳:当然。 是啊。 所以Laravel is--这 一个伟大的question-- 一个多种选择web框架。 因此,Ruby on Rails是一个流行的。 我相信Twitter的使​​用是 使用Ruby on Rails的实施。 我认为他们已经从切换。 还有另外一个叫FuelPHP。 因此,Ruby on Rails的使用Ruby语言 并实现了大量的MVC的东西 我们在这里看到。 FuelPHP是另一种PHP框架。 Django是我的最爱之一。 这是一个Web框架为Python。 所以,你可以用Python语言编写的Web应用程序。 因此,有一吨的这些选项。 Laravel,我认为,通过与 大的是我最喜欢的右 现在PHP只是因为 各组分的 我们前面谈到。 它的作曲启用。 它包括一个真的,真的 表现ORM系统。 也有真正真棒模板 语言,一些其他 只是不提供。 和迁移。 迁移是真棒为好。 很酷吧? 真棒。 好了,非常感谢 看着这个研讨会上, 和好运气在你最终的项目。