00:00
接下来继续完成分类的详情。找到我们的控制器。分类。啊,详情我们在这里去写。分类详情。依赖注入我们的分类。这个依赖猪的这个名字啊,一定要和你的这个路由的这个参数一致啊,要不然它就是帮你注入不进来。好。接下来先return。看一下我们这个分类有没有拿到。呃,详情呢,是秀方法啊,在这个资源控制器里面呢,是我们的啊,这个请求方式啊,就是。加上一个分类的ID啊,就是我们请求这个分类加上一个ID就可以了。来,我们新建一个啊get。
01:00
去复制一个地址。加上一个ID,我们拿第一个分类的一个情况。啊,权限。然后是过期了。找到登录,重新生成一个。把这个替换掉。是吧,拿到了我们的一的这条数据对不对,然后再去拿这个二。也拿到了二这条数据。想象一下啊,一般我们在编辑这个分类的时候,会查一下这个分类的一个详情,对不对,这时候我们不仅需要这个分类的详情,还需要所有的一个分类,然后因为编辑这个分类,我们要这个分类去选择。就是他的新的一个归属是不是。嗯,那我们是不是要在这个详情里面去写这个,再反馈一下所有的分类呢?回答说没有必要,我们的接口API尽可能的做到。啊,独立详情就选择详情,如果说前台就是前端他们使用的时候真的需要一个这个,比如说一个下拉框,去拿所有的一个分类,然后去选择这个分类的一个负极的一个情况,他可以再请求一下我们的。
02:11
列表是不是请一下所有分类的一个列表。但是。啊,我们不管是。添加啊分类也好,或者是这个啊,编辑分类也好,我们都需要一个所有的分的一个啊沙拉框作为列表,去选择这个负极来使用。但是我们不能让那些被禁用的分类显示是吧,但是我们这个列表呢。它是显示所有的一个分类。所以这个列表我们还要继续改造一下,要加一个参数啊。加一什么参数呢?先写下request,加一个tap。啊,也就是我们通过这个类型来去筛选,是显示所有还是显示这个仅仅是正常的,没有被禁用的啊让它等于。Input里面的。
03:00
啊,Tap啊,如果你不传tap我用or啊,下面我就判断就可以了啊if tap。等等于二就是所有的。哎,我就返回所有的,否则的话,我只返回谁呢?返回那些正常的啊,并不包含金庸的。这里再调整一下,不要这个凹了,也就是说。除非你传了这个type等于二,我才给你拿所有的,否则默认啊,默认我就给你返回正常使用的。这样就可以了吧,那当你不管是编辑或者添加你需要所有的分类的就是这个列表的时候啊,你就去啊正常的请求我们这个分类的这个列表就可以什么参数都不用给它,就默认去拿正常对吧?如果比如我们做分类的管理,需要这个所有分类的这个列表,你就可以去传一个type等于all。当然这些所有需要的参数呢,我们一定要在。我们的API文档里面写清楚啊。之前我们已经写了好几个接口,但是每次写完接口不要去补充一下文档。
04:01
好,这样的话,其实详情到这里已经可以了。接着去完成一下。啊,我们的一个更新操作啊。更新分类。更新分类。啊。有一个这个分类的ID,然后我不用ID,我让他依赖注入进来这个分类,那更新分类呢,主要就是更新这个分类的。啊,内蒙。啊,然后那等于。Request里面的。Name。哦,当然,我可以使用这个阿布的方法。好,它里面就是个数组是不是啊,数组我就不写了,我直接从request里面去取我需要的这个字段啊,Only name。PID对吧?啊,当然这么写会有一个问题啊,我们是可以把它的name和PID更新了,但是我们的level没有处理。
05:06
清楚吧,啊,所以这块代码我们就先不写干什么呢,去复制一下。这个添加的啊,因为更新的话呢,它和添加基本上是。呃,差不多啊,一个逻辑。啊,复制一下。然后去改一下这个代码就可以了。比如说啊,这里改成。什么呢?改成update啊,我们从头去改,看有地方需要改的。参数的验证没问题,对不对,你更新肯定要验证它的一个参数,然后包括这个PID啊。我们也要获取它的这个PID。接着这个计算这个level。啊,都是可以的啊。嗯,更新也是啊,需要这个level的。万一你把一个,比如说原来是一个三级的一个分类,然后你选它的负极,你给他选到这个三级分类,你是不是意思你要创建一个四级分类呢?不可能的吧。
06:03
啊,所以这个我们还是要计算一下level啊,包括啊这个变量可以换一换,就不是insert了,是update。啊,然后放到这里面,这些都一样啊,那这里就不是去用这个模型类去创建了,而是用现有的这个模型去进行更新。清楚吗?啊,用现有的这个模型进行更新好。现有的这个模型使用它的R的方法。哎,去更新这个数据。就可以了啊。最后啊,清空缓存,然后我们返回一个。没有内容的一个响应。就可以了。检查一下有什么问题。啊,没有问题啊,唯一有问题的地方就是。
07:03
你看这里啊。和我们上面都一样是不是。然和添加的这边代码都一样,尽可能做到代码不要用于,所以我们可以把它给提取出去。啊,就叫。Check啊,检查我们这个参数,检查这个分类的一个参数。来,我们找个地方去写一下这个方法。写到这里吧。Pro受保护的,也可以只在这个方法里面去用啊,放个写。啊,Check input啊。检查你输入的这个数据,那我要传一个request进来,听懂吗?这样我就能从这个request里面去拿我需要的这些。啊,数据啊,包括这个输入的这个传输的这个数据啊,把这些参数给提交过来。
08:09
啊,把这里放到这。这个验证啊。这里会有返回。这里会有返回。如果就说全部验证通过,那么。我们这里给它返回什么呢?返回这个。一个这个first啊。啊。或者说你腾其他的一个标识符,我们那边判断就可以了,因为这里它抛出的,当它出现问题的时候,它会抛出一个这个响应的一个类啊,响应的一个类的一个实例。就是异常的一个。对象这里呢,也会去返回一个响应的一个对象。嗯,所以。哎,我们这里判断就是。
09:03
If。嗯,那不行啊,这里需要PID和level和计算后的一个level,所以我们不能这么返回啊,我们要返回什么呢?把这个level给返回啊。把这个PID啊,PID还有。这个LEVEL1返回啊。Dota PID。Level等于do level,因为我们那边用到了计算后的这个level啊,所以返回它,那么的话我们就判断,如果我们返回的结果是数组,就认为检验通过了是不是,因为你不管你验证不通过,它会出一个这个异常是吧,我们这么直接返回也会会返回一个错误响应都不是数。都不是数组类型是不是啊,所以我们判断啊,判断什么就判断数组类型就可以了。
10:07
这里要调一下这个方法啊。Do check等于这个方法把我们的request传进去,然后啊要this啊到this。这里去判断它的一个类型啊if。Isray,我们判断它是不是速度。如果。它不是数组,说明就是一个异常是不是啊,我们直接return这个导切就可以了。啊,把这个函数这个方法返回到这个异常。你看把它返回异常,或者它返回的异常由谁返回呢?由我们的这个控制器返回,这个就会给浏览器一个响应。啊,那如果就说是数组,我们是不是就可以从这个check里面去取出来,PID是不是从这个check里面。取出来,Never。
11:01
对吧。好,嗯,那我们做一下测试啊,把这个初试写上检查。验证啊。输入的数据。验证书的参数,提交的参数,好,接着我们就拿那个更新来做一个测试。更新我们看一下它路由。走的是update的方法。你要传一个。啊,分类的一个ID,并且是派或者put方法。来新建一个。复制一下啊,我们就更新第二个啊,地址还是这个地址,但是方法我们得换成put,同样的这个talking我们来选对。加上这个talking,接着我们直接提交。当然我们现在是什么参数都没有传,是不是是不给我们报了分类名称不能为空,说明什么,说明我们的这个验证。
12:03
看一下。就是我们的一个验证这里没问题啊,对不对,那接下来我们来检测一下我们的这个level,它会不会生效,好,现在我们尝试向三级分类去添加一个子集试一试啊。啊,我们传一个内幕参数。和PID。在body里面啊,Form。Name就是我要把二这条数据,二这条数据内改成谁呢?服装衣帽二。好,那PID呢,我要把它给挪到谁的分类下面呢。找一找,我去找个三级分类啊,看一下数据库。查一下分类列表。三级的分类有。有这个戴尔啊,我们把它移到这个七下面,就是我们尝试把二这个分类移到七下面,移到这个三级分类下面,意思就是说我们在更新的时候,尝试给这个三级分类去加一个子类,看行不行啊,PID等于七。来试一下啊。
13:00
PID等于七。啊。分类。名称不能为空。我们放这里面。Name。改成服装吧,先PID。七啊,接下来再提交。是不是不能超过三级分类对吧。啊,刚才在这里面为什么不行呢。啊,这里面就是因为它是啊,类似于那种就是我们phone表单的那个加了一个ec I PT那个没form data那种啊。所以有时候我们在这里提交的时候,它不是特别好用啊,我们使用这种普通的这种表单去提交我们的参数就可以了啊。哎,当然其实我们测试的话,你拿这个po测试的话,你都放到这里面也行啊,因为我们后台比如说使用input或者使用request都可以获得get或者这个。
14:02
这个POS传的参数。好,我们放到这里去,是不是,如果我们尝试把服装给挪到这个七这个分类下面,因为七已经是三级分类了嘛,那说明我们什么,我们的验证是没有问题的。就是我们把我们的验证提取出来提成,单独的一个方法是没有问题的啊,那这样的话。嗯。就是从这里开始好。嗯,我突然发现还可以再改一改啊,再改一改。改成什么呢?我们这里是不是可以直接放到。啊,放到什么呢,把这个。你看它是不是可以直接放到我们。这里面对不对,直接返回我们处理后的这个参数就可以了。知道吧。那PID就是我们这个内部函数的do PID嘛,对不对,这里就是love嘛,Level吗?对吧,同样的,比如说我们这里直接就拿dota update去判断就可以了啊,这样如果他直接就是我们的数据。
15:09
哎,我们就可以直接下面去用,如果不是的话直接返回,这样就代码会更经典一些。好。因为这些代码都是一样的啊,没必要去重复的去写。嗯,当然你去再测一下的话,效果都是一样的。啊,不能超过三题,好,同样的我们把这一块去复制到添加里面,那添加一直到这里,其实都可以不用要了啊。不用要了,然后这里变量换一换就可以了啊,我们的添加也没问题了。也跟他会走,这个我们这个方法的验证。这样的话代码会精简一些。
16:01
接着完成我们的下一个功能就是。他的这个。状态的一个更新就是禁用和启用,看一下我们的路由。状态啊。分类禁用和启用第一个路由啊。这个回车删一下啊。这个第我们这个方法没用啊,这个方法因为已经。就是说给他排除了。把放放名换一换,换成C。然后。去定一个我们的这个路由啊。路由直接复制这个就可以了,复制用户的这个,然后把用户改成分类嘛。这换成。
17:02
依赖注入一个分类啊,这个一个。参数啊,一个ID。接着把我们的泪换一换啊。方法换一换好就可以了。使用派请求我们这个地址啊,到分类的控制里面。是不是来接着去写我们这里面的代码。啊,启用进行启用,呃,直接。依赖注入分类的模型,我们不用再去用ID去查好,那启用和禁用呢,还是会根据它已有的这个状态,他的这个space。啊,去进行一个更新。也就是说,如果他的这个states。是什么呢?是一,哎,我们让你等于零,否则等于一就相当于一个取反,接着C5一下就完成了这个更新啊C5。最后。
18:00
Return。一个没内容的一个响应吧。Response。那content啊,不要忘了去刷新一下缓存。看到了吗?你因为你对数据进行了更新,所以你要去刷新一下缓存,明白吗?那现在我们去测试一下,看一下。哪条是?呃,禁用着呢,联想是禁用着呢是吧,ID是八,我现在把八给恢复。加一下请求我们接口啊,使用派系方式。请求。复制一下这个改一改。这个传一个分类的ID,这个是我们分类ID。飞的ID应该是八,我们把这个八要改一改。清楚吧。然后后面跟上一个space。接下来我们来请求。应该是没有talking。选择be talking。
19:00
成功,我们去刷新一下数据库,你可以刷新一下,看八这里是不是变成一了,已经恢复了,是不是,同时我们如果去看列表的话。啊,也能去拿到这个列表,因为我们这里刷新了缓存嘛。是不是清空了缓存?好。这样我们禁用和启用就完成了。啊,当然你再次执行就把它禁用了。来,我们再次执行一下,再来刷新一下数据库。是不是禁用了,因为我们这里是做了一个,呃,取反的一个操作嘛,这里是不是好,接下来我们来看一个问题啊。这里有清空缓存。这里。也有清空缓存,这里也有,添加的时候也有,就是我们不管是对分类增加的数据,或者对它进行了修改,都要去清空缓存,每个地方都写一遍,这不符合我们编程的一个思想。对吧,所以这时候我们可以去,呃,使用什么呢?使用这个事件,就是模型的这个事件啊,就当模型的数据发生改变的时候,或者是说啊,这个添加的时候,或者创建的时候,或者更新的时候,或者销毁的时候,它有一系列的模型事件。
20:06
啊,当然我们如果直接在模型里面去写这个模型实验,那模型的代码会比较多吧,就是直接在模型里面去写模型实验的话,它的代码会较臃肿,所以我们使用另外一种方式,观察者。好。来创建一个观察者PP art make or serve。啊,Cat。CIS。好,它会在我们的这个APP目录下去创建一个的一个文件夹,并且创建这个类,然后。杠杠model指明我们要关联的这个。就是模型。就什么我们关联哪个模型呢?关联CTGYY,关联这个模型好回车。创建成功。嗯,重新折叠一下文件夹,你看iPhone还会多一个,是不是有一个这个。
21:00
Observer。看到了吧,哎,这里面有我们的一系列的一个事件。啊,就是。当他创建的时候,更新的时候会触发的,删除的时候会触发的,对吧。啊,包括这个强制,就是说强制删除的时候,等这些事件啊,我们主要是去在哪个事件里面,去在这个添加的时候,事件里面去清除它的缓存和更新的时候。这里面去清除它的缓存。清楚吗?啊。好。嗯。那其实就是添加的时候呢,去执行一下这个清空缓存的这个辅助函数就可以了啊。啊,我们把这个注释也写好。好清空缓存,然后更新的时候也清空缓存。那只是我们创建的这个类,并没有和我们这个模型产生任何关联呢,是不是。所以我们要在这个。啊。
22:00
服务提供者里面,让这个观察者和我们的模型类产生一个关联。找到APP里面的provides,找到APP啊,在这里面我们把。这个注册就是把这个观察者注册进来啊,啊观察。模型世界啊。啊,使用模型的。Observer方法。然后。去指明你要使使用的一个类。什么?我们使用哪个呢?使用cat。这个observer。啊,这个。Class,好,这样就建立了一个关联。哎,使用它就和事件进行了一个关联。好,那我们来测试一下啊。现在。
23:00
嗯,把所有清空缓存的地方都给删掉啊,都给删掉。所有清空缓存的地方都给删掉啊。都给删掉,我拿什么测试呢?嗯,先拿我们的列表,列表你看我们。传就是说不传这个等于凹的时候。对吧,他就只拿这个正常的来,我们找到我们的列表。是get这里面,这是我们的列表,看一下。Talking过期了啊。找一下这to啊,之前那个那个to没换。好,列表看一下数据库。这里面。哪些是被删掉的?就看这个手机吧,好。手机你看看有没有,是不是没有电脑,就是电子数码里面是不是只有电脑。
24:04
啊。那现在我们干什么呢?我们去新添加一条数据啊,或者说我们把这个。手机的这个给恢复掉。这里我们看看手机的ID是几,是三是不是?啊,通过我们的这个禁用和启用的这个接口,我们把这个ID改成三,把它恢复启用。好,恢复启用成功,先刷新一下数据库看一看啊。是不是变成了这个一正常状态,那接下来我们再去看一下这个列表,看一下这个列表再次发送,看能不能。啊,就是拿到这个手机看缓存有没有刷新。是不是拿着手机了,说明缓存刷新了对不对。但是你看我们的代码里面。没有去,就说在。禁用和启用的时候没有去刷新缓存嘛,是吧,说明什么,我们的这个观察者啊生效了。哎,我们就说利用这个模型的一个事件,利用这个observer这个观察者模式去。
25:02
啊,处理一些事情是非常方便的啊,不用你在每个地方,你更新到数据的时候就会。呃,去加上这个刷新缓存,可能有的地方写着写着你就忘了。好,这个是我们分类的状态,禁用和启用以及。嗯。分类的一个更新,还有一个详情。分类到这里,基本上就写完了。后啊。大家不要忘了去把这些API文档去给完善了,听见吧,不然你越攒越多就会漏掉,一般建议你是啊,没写完一个功能去完成填空下这个文档。但这样可能比较费时间,你可以写完一套功能,比如说我们把这个分类相关的写完了,你就开始写分类相关的文档,对吧?把这个用户相关的写完了,就去写用户相关的这个文档。啊,也可以这么去来,但是一定要把文档给写详细了。方便别人使用接口的时候去查看啊,这是我之前写的用户相关的这些API的文档。
26:01
啊,包括我们的数据字典,你新建的表的话,数据字典里面也都要写好。对吧,啊,这里当然只有用户表的啊,接下来我会把。就是我们新建的分类表的也都给完善上,包括我们用户表新增加的字段都给补上啊,这个就是我在下面就进行了补录到视频里面。啊,文档的话大家自己写一写,模板也之前都给大家讲过。
我来说两句