thinkphp6控制器

Posted eyes++

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了thinkphp6控制器相关的知识,希望对你有一定的参考价值。

一:控制器定义

控制器,即 controller,控制器文件存放在 controller 目录下。

控制器有以下若干知识点:

  • 控制器下的每一个php类文件一般只有一个类,每个类必须有一个index函数,否则报错。
  • 如果想改变系统默认的控制器文件目录,可以在 config 目录下的 route.php 配置:'controller_layer' => '修改后的名称'
  • 类名和文件名大小写保持一致,并采用驼峰式(首字母大写)
  • 如果使用的是单应用模式,那么控制器的类的定义如下,控制器类文件的实际位置是app\\controller\\HelloWorld.php,在没有定义路由的情况下访问的URL地址是:http://localhost/index.php/HelloWorld/hello
    ,对于路径中的大写可以使用_换成小写,如http://localhost/hello_world/hello,事实上http://localhost/index.php/helloworld/hello也可以,但不推荐。
<?php
namespace app\\controller;

class HelloWorld 
{
    public function hello()
    {
        return 'hello,world!';
    }
}
  • 如果希望避免引入同名模型类的时候冲突,可以在route.php配置文件中设置'controller_suffix' => true,那样的话就意味着使用控制器后缀,于是类名就需要添加Controller后缀,如下,相应的类文件也要改为app\\controller\\HelloWorldController.php
<?php
namespace app\\controller;

class HelloWorldController
{
    public function login()
    {
        return 'login';
    }
}
  • 控制器一般不需要任何输出,直接return即可。并且控制器在json请求会自动转换为json格式输出。也可以调用json($data)手动转化为json格式。
  • 不要在控制器中使用包括die、exit在内的中断代码。如果你需要调试并中止执行,可以使用系统提供的halt助手函数:halt('输出测试')

二:基础控制器

大多数情况下,官方建议给你的控制器继承一个基础控制器。默认安装后,系统提供了一个app\\BaseController基础控制器类,你可以对该基础控制器进行修改。该基础控制器仅仅提供了控制器验证功能,并注入了think\\Appthink\\Request对象,因此你可以直接在控制器中使用app和request属性调用think\\App和think\\Request对象实例。至于控制器验证我水平有限,可能在以后的博客中添加相关内容。。。

三:空控制器

空控制器的概念是指当系统找不到指定的控制器名称的时候,系统会尝试定位当前应用下的空控制器(Error)类,利用这个机制我们可以用来定制错误页面和进行URL的优化。

四:多级控制器

所谓多级控制器,就是在控制器 controller 目录下再建立目录并创建控制器,我们在 controller 目录下建立 group 目录,并创建 Blog.php 控制器,而此时,我们需要访问的地址为:http://localhost:8000/group.blog,这样可能有点别扭,但是可以使用路由的知识改变该路径。

由于URL访问不能访问默认的多级控制器(可能会把多级控制器名误识别为URL后缀),因此建议所有的多级控制器都通过路由定义后访问,如果要在路由定义中使用多级控制器,可以使用Route::get('group/blog','group.blog/index')

五:资源控制器

资源控制器可以让你轻松的创建RESTFul资源控制器,可以通过命令行生成需要的资源控制器,例如生成index应用的Blog资源控制器使用:

php think make:controller index@Blog

如果不想新建一个文件夹而是在原本的controller下创建,可以使用以下命令:

php think make:controller Blog

或者使用完整的命名空间生成:

php think make:controller app\\index\\controller\\Blog

如果只是用于接口开发,可以使用:

php think make:controller index@Blog --api

然后你只需要为资源控制器注册一个资源路由:

Route::resource(‘blog’, ‘Blog’);

这个资源路由表示注册了一个名称为blog的资源路由到Blog控制器,系统会自动注册7个路由规则,如下:

标识请求类型生成路由规则对应操作方法(默认)
indexGETblogindex
createGETblog/createcreate
savePOSTblogsave
readGETblog/:idread
editGETblog/:id/editedit
updatePUTblog/:idupdate
deleteDELETEblog/:iddelete

关于资源路由的相关介绍将会在后续博客内展开。

如果想要了解更多相关知识,可以前往我的个人博客:eyes++的个人空间

以上是关于thinkphp6控制器的主要内容,如果未能解决你的问题,请参考以下文章

thinkphp6.0 多应用模块下提示控制器不存在

thinkphp6----创建多模块

thinkphp6----创建多模块

01 thinkphp6的前期开发准备《ThinkPHP6 入门到电商实战》

01 thinkphp6的前期开发准备《ThinkPHP6 入门到电商实战》

thinkphp6控制器