00:00
接下来使用模型。进行实战,完成我们的博客添加的功能。首先把之前学习的代码删一删。不需要的。首先,创建博客表达模型。Make model log。哎,同时加上杠M参数,在创建博客表模型的同时创建迁移。啊,已经创建完成。看APP目录models里面多了一个博客表的模型。同时。Database。每格瑞里面多了一个博客的一个迁移。啊,接着去写。
01:00
我们博客表的一个迁移的字段。首先有一个啊整形的。优色杠ID就是谁发布的这个博客和用户的一个关联。写上备注。接着还会有一个啊整形的。分类ID。就是这个博客属于哪个分类。哎,这两个关联字段我们先写上。然后博客表还要有自己的啊类型的title标题。
02:01
标题。还有一个博客文本的一个内容,因为文章的一个内容它是比较长的,所以这里使用。啊,Tax类型。Content。博客内容。好,接下来。在创建一个博客的一个状态,就是发布,还有未发布的一个状态。使用就可以。States。博客状态啊。零是。未发布。啊,一是发布。啊,这时候我们可以给一个默认值。
03:03
Default给一个默认值,让它是一啊,我们默认让它发布。嗯。这里少个分号。这样的话,我博客表示串联完成了,大概是这么几个啊,比较简单的字段。然后我们运行。迁移给我们创建对应的博客的表,看一下数据库啊,刷新一下。是吧,之前把这个练习的先删掉。现在啊,是没有这个报错表执行迁移。它会根据我们的这个迁移文件去帮我们创建这个表。刷新一下。是不是多了一个薄荷表,这是我们新建的这些字段。啊。
04:00
然后这个是博客对应的一个模型。这时候我们就可以去使用这个模型进行博客相关的一些操作。先去修改一下。添加的页面,让我们的数据能提交到啊控制器。找到添加的页面。首先要修改什么,修改form的一个提交的一个方式啊,改成post。接着提交的一个地址。地址是。啊,我们使用root,然后加。我们的路由别名去生成这个提交地址,Blog点套。啊,如果不清楚这个名字的话,这个别名的话,因为我们这里blog使用的资源路由,你看一下root。对吧,博客这里是使用的资源路由,如果你不清楚资源路由的名字的话,可以去看看手册啊,控制器那一块,资源控制器那一块。
05:03
啊。当然。也可以在这里进行一个查询,比如。呃,P root list,它可以显示所有路由,我们通过管道服务进行筛选,筛选出来blog相关的。那你就可以看到。啊,这有一个。Block这套对吧,它只是用post,然后访问的是这个block这个套方法对吧。这么去查看也行。啊,接着因为我们是POS提交,所以要有一个啊CSR的一个字段。好。接下来把。表单的这个内幕都给上,如果你表单不给内幕,你是提交啊,表单是提交不了的,就是说会忽略这个字段。标题。然后是我们的分类。Name。
06:04
Le的一个ID。接着是。内容。把这些内幕都给上。嗯,接下来呢,去。控制器里面去打印一下我们的数据,看能不能提交过去。找到控制器。Blog controller找到我们的四套方法。这里我们输出request all,看一下所有的提交。啊,刷新一下页面,用于更改了页面的内容,刷新一下我们写一些标题。啊,这个还是邮件类型肯定是不对的。把这个类型改了。改成text。刷新一下。进行提交,可以看到可以拿到这个所有的一个参数,对吧。
07:03
啊,但是我们想一个问题,如果在发布的时候啊,比如说我们没有填内容,或者没有填标题,甚至连分类都没有选,我们就这么去提交了。肯定是不行的,是不是。所以啊,一般我们对于这些添加呀,或者修改啊,都会去啊,加上我们的表单验证。利用我们所学过的表单验证的知识来为这个博客创建一个表单验证。Make。Request。Blog request。创建的表单验证会在request里面啊,之前我们创建了一个user验证是吧,现在创建了一个博客的一个验证。好。接下来在这个博客的表单验证里面去。写我们的验证规则啊,记得要把这个改成出。
08:04
把这个改成处,我们的验证才有效啊。写文的规则。也就是我们要验证的一个字段。首先,Title。啊。开头的话呢。必填。最小值啊,你最少给四个字符,最大值你不能超过32个字符吧。接着写content。Contain的话。必填,然后设置个最小值就可以了,最大值我们不做限制吧。分类。C-ID看一下这个分类的一个提交情况,它有些特殊,它是提交了一个零过来,对吧,也就是。
09:03
看创景。就当我不选的时候,他是提交了一个这个过来。我们为什么要给这个Y6呢?如果你没有这个Y6,它会把它给提交过来,文字的话我们更不好判断了,相反的话,零的话还是可以判断的。这个时候我们使用什么验证呢?可以使用个这个。啊,首先你的分类也是。必填。然后啊,你的这个分类ID。必须要大于零。GT0。要大于零。这个些分类,这些验证的规则。在这个手册里面。啊,技术功能表单验证里面都可以看到啊。比如搜索刚才我用的这个GT。验证字段必须大于给定的这个值。
10:00
是吧?这里我们就让这个分类啊,大于这个零。只要保证这三个就可以了,因为其他的字段像啊这个用户啊,我们从当前登录的用户。里面去获取就可以了,谁登录的。那么他发不了这个博客,这个用户就是他吗。在这个规则写完之后呢,再写一个。啊,Message的。方法来。把消息给。指定一下啊title。他也是数组。title.require。这个我们叫。一点点血了。嗯,标题必填。多复制几个。
11:01
CTRL加D可以快速复制这编写。接着是它的这个最小值。最少四个字。然后是它的max验证规则是最大。标题最多。32个字符。接下来内容的,那这个是内容必填。然后是内容的最小值。不能少于。四个字符。最少吧。好,接下来是我们的分类的。Repair。
12:04
分类必填。复制一下啊。他的这个GT。也是分类必填,它俩是一个意思啊。把这格式拍一下啊。呃,使用啊,快捷键也可以快速去排版这个格式。在这里啊。接下来再进行一下测试。刷新。啊,可以看到并没有生效,那是因为我们没有使用我们的这个表单验证,对不对,要把这个request去换成。啊,博客的这个表单验证。这时候当已经提交的时候,就会进行这个博客的这个表单验证,里面的这些规则的一些验证。一定要记住啊,任何用户有表单提交过来的行为。
13:03
添加也好,编辑也好,我们一定要做好这个表单验证,就是说做好这个数据的格式的一个验证。不要相信前端,不要你认为啊,你在前端这个啊,用GS做了验证就可以了。对吧,前端的都是不安全的,都是可以绕过的,一定要在我们后端做好验证啊,不要相信前端的数据。好,现在我们如果提交为空的话,就会直接给我们返回,对不对,只不过没有显示错误消息,这时候继续去修改添加页面,加上错误消息之前我们封装了啊,错误消息的一个指示图是在common里面的啊,这个error对吧。哪,现在你在提要。在返回的时候就会有错误消息的一个显示。对吧,如果我们的内容符合规格。三四。就可以进行提交,并且拿到了这所有的数据,当我们控制器里面能拿到这些数据的时候,我们就可以进行一个数据库的一个添加操作。
14:01
对不对。继续写我们的这个添加的方法。添加呢,我多写几种,大家去看一下,可以对比一下,我先写第一种啊,方式一,使用DB构造器添加。构造器的话,我们要啊使用这个。DB啊,这个门面函数,然后选择table,使用blocks表。注意你的表明啊,是我们数据库里面这个block表,我们的模型虽然是。啊,这个blog,但它是和它的一个复数形式进行关联的吗。除非你在这里面去设置啊,指明你要用的一个表。然后使用insert方法。添加我们要加入这些数据有title字段对吧。
15:02
是request里面的input。输入的这个title。啊,数组接着我们去复制一下,这样快一些。Content字段。也是输入里面的content。分类。表单提到的这个分类,把这个相关掉。还有一些字段,看看我们的这个博客的这个啊群文件是不是还有用户ID。对不对,还有哦状态,状态我们不用管吗?默认值就可以吗。啊,但是这个用户ID呢,是不是当前登录用户的这个ID,也就是当前登录用户发布的博客嘛,所以ID是他嘛。对吧,所以这个user ID也不能少,要不然你提交不不过去。当前登录用户是不是可以使用这个also辅助函数去获取当前登录用户的信息吸引啊,如果拿信息的话,我们使用这个user方法,但如果仅仅是获取ID的话,可以直接使用ID这个方法。
16:05
最后。啊,我们就完成了一篇博客的添加。最后判断这个。Is嘛,如果添加成功啊,进行一个返回。百吧。With。啊,一些个成功的消息。好,如果失败呢,Return。啊,大。With a。啊,不用with errorra啊,With error也行了,那么写一个添加失败,但是在with error的同时呢,还要with input,把用户的之前的输入给带过去。
17:00
这样的话,防止用户因为一些呃其他原因添加失败,他填写的内容都没了。清楚吗?啊,这样啊。嗯,现在来尝试一下。直接进行刷新。诶,可以看到添加成功了,对吧。嗯,刷新一下我们的。数据库可以看到有了一条记录,对不对?至于为什么没有添加成功的一个提醒,是因为这里我们指引了这个错误的一个提示消息的一个指示图,没有引入成功呢,是不是引下成功呢?诶,这个时候我们再去添加一个。海鲜一样的。是不是填成功了?啊。那这里因为我们在错误的时候返回了错误消息,并且with啊这个input,所以说你可以在这个页面里面。啊,添加页面使用什么呢。
18:00
使用old来获取你之前提交的这个字段的一个数据,这样就假如出错的话,就不用让用户再次去填写东西的,尤其是写博客,你写了好长好长的一个东西,你如果还用一些意外添加失败了,内容又没了,还要重写的话,很麻烦。所以这里我们使用上这个old。哎,包括这个文本框里面也放上。啊,名字就是用表单的名字。分类的话呢,这里要加上判断了啊if。啊,不是直接是判断这个O。里面的。啊,这个分类ID。如果等等于dota ID。就让他选中。否则的话就直接输出就可以了。这样的话,当出错的时候就会,呃,把他之前提交的这些数据啊,之前提交这些数据还给他返回到页面,诶,这样就不会让用户再去重复去填写大量的一个内容。
19:11
做啊项目一定要把这个交互,还有这个体验给做好。这是一种添加方式啊,方式一,我们把这些注释掉。看方12。嗯,有一个事情啊,我这里没给你打印这个结果,是不是把那个打印的结果也给你。看一下。再来执行一条吧。想让你看看各个添加方式的,它的返回的一个结果的一个对比啊。啊,内容少这个字符。好处。所以说啊,我们这里使用insert,它的返回结果是除。
20:01
这个就是这接着我们使用方式二使用什么呢。嗯,使用模型对象添加。那要使用模型对象是不是要先啊,创建一个模型对象等于new block对吧?来创建一个模型对象,然后为它的啊这个空对象,新的一个对象去设置这个属性。User-ID。等于啊。Also里面的ID。好,接着就。快速复制了啊。Title等于表单提交的这个title内容。让它等于。表单提交的这个内容分类ID啊,等于表单提交的这个分类ID。好,最后不要忘了save。
21:02
你如果不进行税的话,是没有保存的,也没有进行提交的。好。这个也有一个is。我们来分别打印一下这个res和这个blog。最后我把结果给你注射到这里。看一下。直接刷新,还用原来的一个提交数据就可以啊,我们又没有设置这个title啊,做唯一键什么的。呃,结果是处blog是。是一个。模型啊,模型对象是添加后的一个模型对象,就是它是一个添加后的一个模型对象,但是我们的这个执行的这个C的结果是一个出。所以说我们这里用。啊,这个if判断是没问题的。把这个给你写上啊。等于啊,模型对象。
22:03
添加厚的。一个模型对象。好,这是方式二。注释掉。看一看方式三。使用。啊,批量赋值。进行添加。批量赋值的话,我们就不用去创建那个对象了,直接使用啊blog这个模型类它的create方法。进行批量复制。当然批量复制的内容啊,其实和我们这个insert的内容是啊。大致是一样的啊。现在来打印这个is。他应该会报错。对吧,因为我们的这些UID啊,就是这些字段都没有配到模型中,也就是说。
23:04
啊,我们不允许这些字段进行像保护怎么办?然后把这个。Model里面的这个博客的模型类啊,去给它加上。允许啊,批量。添加的字段。要加一个受保护的啊。非。啊,它是一个数组,然后是把我们可以就是说批量添加的字段给写进去。那有什么呢?有优色杠ID可以批量赋值的。不是添加,批量复制。有ID。抬头。Create ID啊这四个这样的话,我们再次去执行。
24:03
这个。就可以填成功了,对吧,他的这个结果是。啊,模型的一个对象。使用批量赋值啊,这里有一个注意啊,注意。必须。要在模型。类里面设置允许。批量复制的状态。可以。这个结果也看到了,它是一个添加后的一个模型对象啊。这是方式三。看一下方式四。使用。
25:00
这个。啊,就是对啊。嗯,对一个已存在的一个模型对象啊,使用它进行一个批量的一个,进行一个快速的一个添加。用以存在的。模型对象。使用费进行快速啊添加,那它要这个方法要用到已存在的一个模型对象,没有怎么办?没有是不是先扭一个。对不对。你有一个block吗?然后使用block的这个。啊。里面放上这些字段就可以了,是不是?好,复制一下这些字段。给一个数组。把注释打开。
26:02
啊,使用feel,然后我们也来看一下这个结果啊。再看一下这个blog的一个结果。他执行的结果。啊,是一个。模型对象。对不对。而。这个block呢,也是一个模型对象,但是你们注意啊,他们都没有这个属性看到吗。都没这个水,为什么?因为我们没有save,你没有save的时候它是不提交的,所以你要。啊,进行这个。Block save。就是使用这个方法,你要进行才可以。这个看看C5之后的这个is,它的结果是结果是什么。
27:04
啊是处就是添加成功,然后你看这里就有它了,这个时候就是已经向数据库添加成功了啊,一定要注意,我给你撇到这里啊,注意使用。要。C5才可以。才能添加到数据库啊,这点是要注意的。好,这是方式四啊,当然还有一些啊小技巧,比如还可怎么添加呢?方式。五。啊,使用request。啊,为什么要使用这个呢?因为我们现在。
28:00
你看现在字段比较少,只有三个字段,我们一一的去获取可以了,假如我们一个表单有20多个字段呢,有30个,有50个字段呢,你要一个一个去写的话,是不是很累。对不对,这时候就可以使用request啊,直接拿到所有字段嘛,但是你拿所有字段,你会发现你看一下所有字段来。它会有一些我们不需要的一些字段。对吧,这里是有talking,假如我们是更新的操作,是put来提,提交过来的,是不是还会有一个呃,Method的一个不需要的字段,所以。啊,再使用。啊,Request这个all,我们拿到所有提交的这个数据的时候,要排除我们不需要的一个字段。是什么啊?我们把这个。不需要的给排除掉啊,比如。这个talking就是我们不需要的,看看排除之后剩什么。好,是不是剩这三个字段了,对吧,但是我们添加的话,你看它是需要啊四个字段呢,还有UID对吧,UID没有怎么办。
29:07
它的结果既然是一个数组。你就可以。合并一个数组进去,对对,使用A。墨迹。是吧,把这个数组和什么呢?和这个数组进行合并。获取他的ID。通过这种方式去添加。一些就是说我们原本提交没有的一些字段。看一下。是不是就有这个六色干眼了?好,这是一种方式,还有一种什么方式呢,可以使用。为这个request啊,使用它的这个offset。
30:04
去设置啊,设置这个就算ID。让它等于also。里面的右侧杠ID。ID啊,这个时候。你再去打印。这个啊。它就会有一个优干D,这个方法是向这个request里面,就我们表单提交的这个请求里面去啊,追加一个这个user干D的一个字段。看一下。是不是一样的。你就算不用它,你去,嗯,打印这个哦,看所有的你会发现。啊,比我们原来的表单提交是不是多了一个这个有最大题字段,就是使用这个opposite去啊进行追加的这个字段,这个字段的一个值。这个时候也是可以的。好,这样的话,我们就拿到了我们数据库。
31:01
添加需要的这些字段,是不是可以直接把我们的这个结果。去放到费用里面或者放到里面对不对。来,接着就写我们的方式五。啊,这些。就先注释掉啊,利用我们的方式五。嗯,使用blog。然后。把这个request里面所有的字段,除去我们不需要的字段之后,进行一个添加啊,看一看那个res。这里少个逗号。优色杠ID啊,没有,所以我们这里要追加一下这个优色杠ID啊。把这个打开,这个打开。要不然他丢失这个优色感就字段。
32:01
这时候再来添加。是不成功了。对吧。好,把我们的DDK。就是这样,这样的话,添加成功之后,他还能去返回添加成功。小心。继续添加成功。通过这几种方式,我们可以去进行数据的一个添加。你在使用的时候。啊,可以选择比较适合的一种方式去使用。往上看看代码,之前这个忘了注释了,但是不影响我们下面的这些测试啊,它只是会多增加一些数据而已。这个知识点。再来进行最终的一个。测试。添加个不一样的测试。
33:00
好,也是添加成功去刷新一下数据库。啊,最终添加这条啊。
我来说两句