00:01
接下来学习一下控制器。控制器的参考手册在这里。也是在基础功能里面啊,可能性。还是一样,我们会把啊一些常用的和现阶段用得着的先进行一个讲解,接着好去写项目。啊,当然手册内容是比较多的啊。首先看看他的简介,是为了替代在路由文件中以B包形式定义所有的请求来处理逻辑。我们把。就说这些。啊,行为给提取到。相关的文件啊,组成一个单独的类。这个我们就被称为控制器。它是被放在。APP ATP controller目录下。简单的说就是。为了把我们啊这些写在。路由中的这些。嗯,处理逻辑的代码都提取出去,变成单个的文件。
01:00
好。一个基本的控制器啊,它会继承这个CR的啊。因为CTRL这个基本的这个控制器呢,它会提供了一些比较好用的方法,比如说中间验哪些方法。那我们怎么去啊?创建一个控制器呢。使用。命令创建我们的控制器。当然你直接手动去啊复制也行,比如说复制这个啊,把名字改一改也可以。我们可以通过命令更加便捷的去创建控器,还是在项目目录下去执行PP artisan make冒号?Con re controller接着是我们控制器的一个名字,我们创建一个test controller控制器,用来。啊,去进行学习。
02:06
创建完成之后呢,它会出现在。我们的这个目录下啊,APPATP和con这里就多了一个test。啊,有时候如果你刚好正在打开的这个页面,你创建完呢,它不会出现,但实际上已经有了,只是你的这个目录列表没有刷新,你可以把它关闭,再打开就能刷新了。接下来。我们把这些路由先都注释掉。去学习控制器相关的内容。然后在这里去演示我们的例子。在路由中啊,我们怎么去使用这个控制器呢?就可以使用这种方式啊,定一个U,然后。
03:05
呃,第二个参数不再使用B包了,而是指明我们要使用的控制器和控制器中的一个方法。啊,就是当一个请求和指定的路由UR匹配时。啊,我们这个控制器中的这个方法将会执行。同时路由的这个参数也会传递给啊这个方法。那我们来尝试一下啊。定义一个。Get,我们定一个test。这时候第二个参数我们就不再写这种必包的形式,而是写啊,一个数组第一个元素啊,数组的第一个元素是我们控制器啊所在的一个。啊,命名空间,包括它的一个类名。你直接输入这个test c。它会自动有这个提示啊,回车就可以了,然后。
04:04
使用它的类名,慢慢class。接着逗号写我们元数组的第二个元素,是我们要使用的一个方法。手册例子里呢,它是把这个命名空间给提取出去了。啊是这么直接去用就可以了,但我们嗯,如果不想就是说在这里。在费事去写一行引用这个命名空间的话呢,可以直接在这里去写也行。当然,如果你一个空隙里面方法特别多,你每个都要写这个的话,还是建议你在这里面去写上一个密密空间。啊,我们这里演示例子就暂时不写。我们请求test。啊,这个U。少个冒号。然后嗯,让谁来处理我们的请求呢?让这个控制器里面的某一个方法,我们就定义义为test方法来处理我们的请求,那现在看一看这个控制气,它是我们新建的一个空气,只是继承了这个空气的一个积累,并没有test测方法,我们可以去创建它的方法,Public啊,一定要是公开的才可以对外面访问到。
05:09
方形test。来这里。我们看一下啊。先简单的啊,滴滴一下,看能不能请求到在浏览器中去。访问test。可以防盗对吧。好,接着我们测试一下路由参数能不能传递过去,这里我们定义一个ID啊,然后呢,之前我们的ID是在必包函数里面,这里面去写的这个ID,但现在我们因为在使用控制器,所以我们看控制器里面的这个方法能不能接收到这个参数。当然能接受参数的地方只有这里啊,Dota ID啊,现在我们打印这个ID。Testa。连上个ID。这个时候啊,我们再去,再去请求这个。
06:04
就请求不到了,因为我们的test的话,它是需要一个参数的。有参数,那我们要加上一个ID。可以拿到这个ID对吧,这样的话我们就呃,把原先写在。路由里面的这些业务逻辑啊,都给抽离到单独的一个类里面了。这样才符合一个开发的一个规范,而不是把所有的代码都写到一个文件,维护起来会非常的困难。接着看手册啊。单行为控制器,也就是说如果一个控制器的话。啊,只用来呃,处理一个请求的话,我们可以放置一个啊方法。就是这个方法,这样的话,我们在使用的时候是可以不指明方法直接使用的。我们尝试去创建一个,去尝试一下。当然,我们通过命令创建控制器的这个命令直接加上这个参数,就可以帮我们创建这种单行为的控制器。
07:08
来执行一下,打开终端。啊,在我们的这个虚拟里面项目下去执行。你上。好。回撤。哦,名字没有改,就是这个名字吧。你看现在我们创建完之后,这里创建成功,但这里没有,就是我刚才说的问题啊,目录并没有刷新,你要先关闭再点开就有了,你看到吗。有这么一个。恭喜啊。好,接下来我们做一个尝试,去定义一个路由。嗯,还直接。直接写吧,Root,往后get。啊,User这里我们写个ID。因为我们把上面都注射了,所以这个路由不会就是说受下面的一些影响。
08:02
啊,因为我们认为这个控制器它只做一个请求,只处理它,所以我们创建是单行为控制器,那单行为控制器里面呢,它自动帮我们创建了一个这个方法。啊,所以这时候我们在设置这个。这个路由的时候啊,是不用去再这么麻烦定义数组的,直接写这个类名就可以了,修。卡死。这样就可以了,不用去再指明这个方法,那现在我们测试一下,在这个里面。这些注释先删掉啊,然后我在这里面滴滴啊,滴滴什么呢。这里传了一个路由参数。这个先不要。改成ID,我们的路由参数。来输出这个这个参数。接下来请求一下。User下面的111是不是可以拿到了。对吧,你看我们这里并没有指明要使用哪个方法吧。
09:00
啊,因为这种单行为的控制器,它会自己去找这个方法去执行。这个情况也是,嗯,在某些情况下是比较实用的啊。接着来看。控制器的一个中间键,中间键的话,我们将放到后面的一个模块里面去统一讲解。这里我们先跳过啊。接着说一下资源型控制器。啊的资源路由。通过单行代码就可以把典型的cud啊正删改查路由分配给控制器。比如我们希望创建一个控制器来保存照片。就可以使用命令。啊,创建控制器的同时去加上刚口resource参数就会帮我们生成啊资源路有所有需要的一些方法,不用我们在一起创建的一些方法。
10:06
我们可以在路由里面使用resource去注册这个资源路由,注册资源路由的时候呢,只需要啊,直接使用类名就可以。他会帮我们把所有可以用到的一些啊方法。自动的帮我们去。啊生成也就是说给我们创建很多的一个路由,就是资源相关的一些路由。啊,批量创建我们这里就不说了啊,接下来我们尝试一下。复制一下粘贴。执行。还是去刷新一下,这里才会出来。啊,那我们先看看。这里啊。是不是帮我们创建了所有我们需要的一些资源的方法。比如说首页的。比如说创建页面的。啊,执行保存的显示详情页面的,编辑页面的,然后执行更新的。
11:02
啊,执行删除的,他会帮我们把这些方法都给我们创建好。我们去路由里面使用resource。去注册我们的资源路由。来写一下。这里啊,也不用指明方法了,因为这是一个资源路由,我们直接写啊控制器的名字就可以。Photo。Class。此时啊。我们就在这里注册了资源路由,它会帮我们把资源路由所有需要的一些啊,请求的这个。啊。路由还有相关的这个路由的这个命名。啊,都给我们注册好,我们来看一下,比如我们使用。10P。
12:04
这里结束一下PP art。Root冒号list。可以看到啊,就看photo这一块是不是帮我们注册好了。这些路由对吧,比如说photo index首页的photo添加的对不对。还有photo data。Photo这个秀容易显示的,这是路由的一个名字,包括路由的一个请求的uri,包括实际上执行,就是说使用的一个方法,使用的这个控制器里面的对应的方法,这些路由都给我们做的好了,对吧。非常的省事,只需要一个命令就可以了。这就是资源路由,它会帮我们在创建控制器的同时,帮我们把方法创建好,在我们注册资源路由的时候呢,它会给我们注册好这些路由,使用起来非常的方便,嗯。
13:02
把注释写下,这个是我们的基本控制器,基本控制器。控制器,这个是我们的单行为控制器,单行为控制器。这个是资源控制器啊,资源控制器。好,这个是批量注册的啊,我们就暂时不用了,就注册这一个就可以了先。然后手册里面会有我们啊这个资源控制器的一些处理,比如说你你用get的方式去请求这个地址,就是显示一个首页,执行的是这个控制器里面的index方法啊。使用啊get请求create,它就执行的是一个create的一个方法啊,对应的,其实你会发现这些和我们在之前定义那个博客的这个路由的时候很像,对不对啊,因为我已经养成这个习惯,我在哪怕自己去定义路由的时候,也会习惯的去使用这种方式。
14:04
啊,这里love这里叫资源路由,其实如果在API方面的话,它也会被称为这个,呃,Resource API这种风格。指定资源的模型啊,是我们的这个资源路由和可以和一个数据库的一个模型绑定,当然我们还没有学数据模型这一块,这个先跳过啊。啊,这个部分资源都有,这个是比较实用的,因为我们有时候一个控制器,不是说他所有的方法我们都会用的,对吧,只会用到一部分,这时候可以使用呢,这个啊only就是说。只使用什么对吧。定义到这里面的才会有效,或者说使用这个。啊,Except就是说。啊,除了什么。比如我们。尝试一下使用这个except。
15:00
啊,还是在这里啊。部分啊,使用部分。部分资源控制器。Root。Resource。我定一个。还是用斧头吧。Class,然后回车。啊,加上这个except这边少了一个横线啊。太缩,定下。也就是除了这些方法啊,不用。我只用剩下的,那我们一共这么多方法,除了这些我们看看剩下什么,先把第一个给注释掉了,为了方便我们去测试。
16:01
去查看一下路由列表。可以看到是不是只剩下index show和这三个了,对吧,那这个像create呀,Store update,还有destroy这些我们都给排除上了。对吧,这两个一定要分清,一个是。啊,排除的一个是啊只使用的。我们在定义资源路由的时候一定要啊,精打细算不用的。啊,一定要给他。啊,过滤掉。不要造成一个浪费,因为有些路由你不用。对吧,你如果不排出的话,它会注册到路由中,这样的话会使得我们的路由非常非常的多。路由多的时候。就是在匹配这个路由的时候,会增加一定的一个时候,就影响了用户的一个请求的一个速度,所以一定要养成这种精打细算的一个习惯。
17:05
API资源路由啊,使用这个API resource,它和我们刚才的资源路由啊有什么区别呢?就是。啊,排除了页面相关的一些路由,因为我们API的话是不需要页面的,对吧,使用啊这个杠杠API可以快速去创建API路由。好。这个先不说啊。嗯,命名。资源由。啊,这个是怎么回事呢,就是说。我们看一下。我们的list。这里是给我们用默认的规则去命名的,就是我们的啊定义的这个。资源的名字,然后加上他的一个行为,但是有时候我们不喜欢这个名字的话,可以使用什么呢?啊,Names重新给它命名。比如这里我们。
18:00
尝试一下啊。尝试下什么的拔。这个呃,Index。给重新命名。可以在这里继续啊练式操作。没有,不知道。可以在这里啊,继续练式操作。把。啊,就把吧。凯瑞特,没有,凯瑞特已经被我们排除了,我们现在只有这三个了啊,那我们还是改成隐带吧。Thanks。改成in。二。好,这时候再去。查看一下。可以发现诶,这个名字已经变了对吧?啊,通过这个names的一个啊方法可以去重新去定义路由的一个名字啊,当然一般的话。默认的就可以了,也不用再费时间去重新定义,除非你有啊特殊的一些需求,或者说你的这个部分的路由产生一些冲突啊,不得已了就可以去定一下。
19:05
还有一种情况下就是嗯,我们也可以重新定义这个路由的一个参数。啊,默认的这个情况下都会以这个啊这样的形式,就我们路由的名字,然后这样的这样的形式去。给我们使用这个参数啊,就是默认会议我们定义的资源路由名字,然后去加上这个参数的一个名字,通过。啊什么呢,通过这个。也可以去重新定义啊,比如。我们接着是链式操作。把什么呢,把。啊,我们的这个。斧头。比如改为。斧头。二现在再来看一下list啊,是不是这些路由参数的名字就变了,对不对,就是通过这个参数啊,其实一般也不用啊,一般也默认就够用了。
20:03
这里把注释一下啊,重命名。重命名。部分路由的。命名。为部分路由的命名重新设置啊。这个是重新设置这个路由参数名。啊,这是这块的一个内容。接下来这个暂时用不着。嗯。自定义资源的URS,这个是相当于就是把我们的比如说这个create啊,啊也给改变了,就是把我们的这个给改变了,也没有太大的必要啊。就变成这样的一个请求了。
21:01
默认就可以了,也是除非你有路由冲突了啊,实在没办法可以去这里面去调。本来手册其实东西是很多的,就供我们来查阅的,咱们学习的话,还是先以简单的就是我们呃常用的,用得着的去学。啊,这个会用得到,就是补充资源控制器,有时候啊,我们一个控制器里面给我们提供这些方法,就并不够我们用。比如就拿我们的那个博客举例来讲,我们是不是还有一个改变状态的,对吧,这里就没有这时候当碰到这种的时候怎么办呢。啊,就可以。呃,在这个。嗯,里面再重新去定义啊,这种方式去定义路由,但是啊补充的这种路由啊,一定要在我们的资源路由前面,以防止这个资源路由去啊,啊覆盖也就优先于我们自己定义一个路由。好。啊,当然人家给了有形提示啊,不要把所有的这个都放到一个这个控制器里面,尽可能的去分割成更小的啊,当然我们的这个改变的状态,比如说切换博客的状态就是很小的。
22:08
啊,就一个功能,没必要再去创建一个。呃,单独的一个空隙。啊,在这里我们去补充啊。资源路由。啊,要在资源路由的前面定义。我们补充一个什么呢,补充一个。比如说photo。啊。Download啊,下载的一个路由。这里少个分号。啊,这里。就要使用数组了。第一个是我们的控制器,第二个是方法,我们使用登录的方法W。接着去这个控制器里面去创建这个方法就可以了。
23:06
登录的。把我们的注释也补上,一定要养成习惯,方法的注释可以斜杠星号星号回车就可以了。下载图片。控制器呢,就啊说到这里,其实我们常用的控制器就这么些啊,主要的作用就是为了把我们之前写在B包里面的些啊业务逻辑代码去剥离出去啊,剥离成单个的这个类的一个文件。啊,这样也符合这种MVC的这种开发思想,你看我们的页面是在啊这里对吧,我们的空气就在这里。当我们学了这个数据库的这个模型的时候,啊,发现模型文件在这里啊。
我来说两句