>> [音乐播放]
>> 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系统。
也有真正真棒模板 语言，一些其他
只是不提供。
和迁移。
迁移是真棒为好。
很酷吧？
真棒。
好了，非常感谢 看着这个研讨会上，
和好运气在你最终的项目。