zoukankan      html  css  js  c++  java
  • 4.ThinkPHP控制器

    控制器的后缀

    打开配置文件application/app.php,有如下配置

    // 应用类库后缀
    'class_suffix'           => false,
    // 控制器类后缀
    'controller_suffix'      => false,
    # 表示默认情况下,控制器无特殊后缀。例如 Index控制器,文件名为Index.php
    

    如果需要进行设置,可以设置为

    'class_suffix'           => true,
    'controller_suffix'   => 'Controller',
    # 表示控制器以Controller为后缀。例如Index控制器,文件名为IndexController.php
    

    注:一般不建议进行修改,保持默认,框架默认给我们的配置

    image-20200521213724828

    使用命令创建模块(分组)

    命令格式:

    php think build --module 模块名称
    

    例:

    php think build --module admin
    

    image-20200521214649018

    创建控制器

    创建控制器的方式有两种:

    手动创建

    application/模块目录/controller/目录下
    命名规则:控制器名称(首字母大写) + (控制器后缀,默认没有) + .php
    

    例:在application/index模块/controller/目录下,创建一个Demo控制器,访问输出demo/index

    <?php
    
    namespace appindexcontroller;
    
    use thinkController;
    
    class Demo extends Controller {
        public function index(){
            return 'dmeo/index';
        }
    }
    

    image-20200521220632571

    注意:上面这种事pathinfo模式访问方法,需关闭强制路由设置,如果给这个控制器设置了路由则不用管

    命令行方式创建【推荐】

    创建标准控制器

    如果模块目录不存在则会自动创建,所以创建控制器使用这个命令可以一步到位而不用使用上面的创建模块命令

    php think make:controller --plain 模块名/控制器名  
    # 参数说明
    --plain 标准控制器 (默认创建的控制器是一个资源控制器,所以一般加上此选项)
    

    例:

    在index模块下创建一个Demo2控制器

    php think make:controller --plain index/Demo2
    

    image-20200521222145246

    如果创建时,没有在模块名称,则默认创建到公共模块中 【common】

    例:

    php think make:controller --plain Demo
    

    image-20200521222612222

    创建资源控制器

    如果创建时,没有在命令中加入--plain参数选项,则默认创建到公共模块中 【common】并且是资源控制器

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

    // 生成index模块的Blog资源控制器
    php think make:controller index/Blog
    

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

    php think make:controller appindexcontrollerBlog
    

    例:

    php think make:controller  Demo2
    

    image-20200521223025662

    如果加上模块名则会在该模块下创建资源控制器

    php think make:controller  index/Demo3
    

    image-20200521223654831

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

    Route::resource('blog','index/Blog');
    

    设置后会自动注册7个路由规则,如下:

    请求类型 生成路由规则 对应操作方法
    GET blog index
    GET blog/create create
    POST blog save
    GET blog/:id read
    GET blog/:id/edit edit
    PUT blog/:id update
    DELETE blog/:id delete

    前置操作方法

    可以为某个或者某些操作指定前置执行的操作方法,设置 beforeActionList属性可以指定某个方法为其他方法的前置操作。

    数组键名为需要调用的前置方法名,无值的话为当前控制器下所有方法的前置方法。

    例:访问index模块的Demo控制器的index或者welcome方法触发checkUser方法

    <?php
    namespace appindexcontroller;
    use thinkController;
    class Demo extends Controller {
        //前置操作方法列表  了解即可
        protected $beforeActionList = [
            //无值的话为当前控制器下所有方法的前置方法
            'first',
            //要触发的方法   => 请求的方法,请求此方法,触发前面定义的方法
            'checkUser' => ['index','welcome']
        ];
    
        public function index(){
            return 'dmeo/index';
        }
    
        protected function first(){
            echo 'first<br/>';
        }
    
        //public 和 protected 修饰均可,为了不让外部访问一般使用protected
        protected function checkUser(){
            echo 'aaaa<br/>';
        }
    
        public function welcome(){
            return 'bbbb<br/>';
        }
    }
    

    image-20200522154849151

    页面跳转

    在应用开发中,经常会遇到一些带有提示信息的跳转页面,例如操作成功或者操作错误页面,并且自动跳转到另外一个目标页面。系统的 hinkController类内置了两个跳转方法successerror,用于页面跳转提示。

    success 跳转

    pathinfo方式

    例:

    <?php
    
    namespace appindexcontroller;
    
    use thinkController;
    
    class Demo2 extends Controller{
        //
        public function index(){
            //pathinfo方式
            //第一种写法
            //return $this->success('登录成功','/index/demo2/su');
    
            //第二种写法,同控制器使用tp提供的生成url地址函数
            //同控制器下面可以直接写方法名 url('su') 等价于'/index/demo2/su'
            //return $this->success('登录成功',url('su'));
    
            //第三种写法,不同控制器下面可以写控制器名/方法名
            return $this->success('登录成功',url('index/index'));  
        }
    
        //成功页面
        public function su(){
            return '我是成功页面';
        }
    }
    

    image-20200522162616008

    自定义路由的方式

    先在route oute.php文件中定义控制器路由

    例:

    //定义控制器路由  模块/类名/方法名                路由别名
    Route::get('aaa', 'index/index/index')->name('indexr');
    

    image-20200522163322493

    然后在控制器中设置页面跳转

    例:

    //自定义路由
    return $this->success('登录成功',url('indexr'));
    

    image-20200522163721199

    error跳转

    error跳转同样写法同样支持pathinfo和自定义路由的方式success的四种写法error跳转同样支持,下面只尝试一种

    例:

    <?php
    
    namespace appindexcontroller;
    
    use thinkController;
    
    class Demo2 extends Controller{
        //
        public function index(){
    
            //错误
            return $this->error('异常错误',url('er'));
        }
    
        //错误页面
        public function er(){
            return '我是错误页面';
        }
    }
    
    

    image-20200522165522782

    ajax请求返回success 跳转数据

    这两种方法可根据不同的请求方式(http标准请求还是ajax请求),自动返回数据(html/json)

    例:

    1. 在public文件夹下创建ajax.html并写入ajax访问的内容

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>测试</title>
        <script src="https://cdn.bootcdn.net/ajax/libs/jquery/1.12.4/jquery.js"></script>
    </head>
    <body>
    <script>
        $.get('/index/demo2/index',{},data => console.log(data), 'json');
    </script>
    
    </body>
    </html>
    

    image-20200522171446015

    2. 在控制器中返回访问成功

    <?php
    
    namespace appindexcontroller;
    
    use thinkController;
    
    class Demo2 extends Controller{
        //
        public function index(){
    
            return $this->success('登录成功',url('index/index'),['status' => 1]);
        }
        
    }
    
    

    运行结果

    image-20200522171934567

  • 相关阅读:
    基于ADO的远程Oracle连接
    oracle中的定时任务
    关于C++ const 变量
    堆排序和选择排序
    插入排序
    多线程的两种启动方式
    多尺度变换去噪的阈值选择
    jstree
    JS中call、apply、bind使用指南,带部分原理。
    六. JavaScript时间日期格式化
  • 原文地址:https://www.cnblogs.com/makalochen/p/12934315.html
Copyright © 2011-2022 走看看