zoukankan      html  css  js  c++  java
  • thinkphp5控制器

    // 定义应用目录
    define('APP_PATH', __DIR__ . '/../app/');
    
    // 定义配置文件目录和应用目录同级
    define('CONF_PATH', __DIR__.'/../config/');
    
    // 修改应用类库命名空间(默认是app)  5.08+版本
    define('APP_NAMESPACE','app');

    定义:

    //applicationindexcontrollerIndex.php
    namespace appindexcontroller;
    class Index 
    {
        public function index()
        {
            return 'index';
        }
    }
    //或者
    namespace appindexcontroller;
    use thinkController;
    class Index extends Controller
    {
        public function index()
        {
            return 'index';
        }
    }
    
    //applicationindexcontrollerv1Index.php多级控制器
    //controller/aa/bb/User.php 那么遇到url、链接、路由地址等表示控制器的都可以.来链接
    //如:url('index/aa.bb.user/add')、https://www.xxx.com/index.php/index/aa.bb.user/add.html、Route:rule('adduser/:id','index/aa.bb.user/add');
    namespace appindexcontrollerv1; class Index { public function index() { //模板渲染 $view = new View();//必须申明use thinkView; return $view->fetch('index'); //或者 return view('index'); } } //或者 namespace appindexcontrollerv1; use thinkController; class Index extends Controller { public function index() { // 获取包含域名的完整URL地址 $this->assign('domain',$this->request->url(true)); //继承Controller的话可以直接调用下面这个 return $this->fetch('index'); } }

     配置文件配置这想可以改变默认输出的数据格式(api接口可用到)

    // 默认输出类型
    'default_return_type'   => 'json',

    控制器初始化方法:

    namespace appindexcontroller;
    use thinkController;
    class Index extends Controller
    {
    
        public function _initialize()
        {
            echo 'init';
        }
    
        public function index()
        {
            return 'index';
        }
    }

    前置操作:

    class Index extends Controller
    {
    
        //前置
        protected $beforeActionList = [
            'first',//无子数组 调用当前类的方法时都要调用它
            'second' =>  ['except'=>'hello'],//except  表示hello不使用second前置方法
            'three'  =>  ['only'=>'hello,data'],//only 表示只有hello,data方法才使用three这个前置方法
        ];
    
        public function index()
        {
            return $this->fetch('test@index/index');
        }
    
        public function first()
        {
            echo 'first<br/>';
        }
        public function second()
        {
            echo 'second<br/>';
        }
        public function three()
        {
            echo 'three<br/>';
        }
    
        public function hello()
        {
            return 'hello';
        }
        
        public function data()
        {
            return 'data';
        }
    
    }
     
    $this->success('新增成功', 'User/list');//默认的返回页面是$_SERVER['HTTP_REFERER']
     $this->error('新增失败');////错误页面的默认跳转页面是返回前一页,通常不需要设置
    跳转地址是可选的,success方法的默认跳转地址是$_SERVER["HTTP_REFERER"],error方法的默认跳转地址是javascript:history.back(-1);。
    
    success和error方法都可以对应的模板,默认的设置是两个方法对应的模板都是:THINK_PATH . 'tpl/dispatch_jump.tpl':thinkphp	pldispatch_jump.tpl

    改变默认模板:

    方法1、在application/tpl文件夹下新建dispatch_jump.tpl和dispatch_jump.tpl;然后配置文件配置:

    //默认错误跳转对应的模板文件
    'dispatch_error_tmpl' => APP_PATH . 'tpl/dispatch_jump.tpl',
    //默认成功跳转对应的模板文件
    'dispatch_success_tmpl' => APP_PATH . 'tpl/dispatch_jump.tpl',

    方法2、使用项目内部的模板文件

    在view/public/下新建success.html和error.html 然后在配置文件配置

    //默认错误跳转对应的模板文件
    'dispatch_error_tmpl' => 'public/error',
    //默认成功跳转对应的模板文件
    'dispatch_success_tmpl' => 'public/success',

    redirect方法的参数用法和Url::build

    使用redirect助手函数还可以实现更多的功能,例如可以记住当前的URL后跳转

    redirect('News/category')->remember();

    需要跳转到上次记住的URL的时候使用:

    redirect()->restore();

    空控制器和空操作阻止控制器和方法不存在时的报错:

    1、在模块控制器下定义空控制器类;当控制器不存在时会找到这个空控制器的index方法

    <?php
    namespace app	estcontroller;
    
    use thinkRequest;
    
    class Error 
    {
        public function index(Request $request)
        {
            
            $nowController = $request->controller();
            echo $nowController;
        }
        //空控制器加上空操作是应对控制器和方法都不存在时的情况
        public function _empty($name){
            echo '操作'.$name . '不存在';
        }
    
    }

    2、将空操作方法定义在每个控制器中或者定义在基类中,然后个控制器继承该基类

    public function _empty($name)
    {
        return '找不到当前的方法';
    }

    分层控制器:与controller平级的控制器层 

    tp默认自带application/controller;分层可以多出和controller一样的控制器层,那么我们可以将controller当做访问控制器层,其他的当做不能够被URL访问直接调用到的,只能在访问控制器、模型类的内部,或者视图模板文件中进行调用的分层控制器;如官网给的例子 application/event控制器层在这个控制器下定义一个Blog类文件

    amespace appindexevent;
    
    class Blog 
    {
        public function insert()
        {
            return 'insert';
        }
        
        public function update($id)
        {
            return 'update:'.$id;
        }
        
        public function delete($id)
        {
            return 'delete:'.$id;
        }
    }

    调用这个event控制层的Blog类:

    $event = 	hinkLoader::controller('Blog', 'event');
    echo $event->update(5); // 输出 update:5
    echo $event->delete(5); // 输出 delete:5
    //或者:
    $event = controller('Blog', 'event');
    echo $event->update(5); // 输出 update:5
    echo $event->delete(5); // 输出 delete:5
    
    //还支持跨模块调用:   其实use命名空间也可以的
    $event = controller('Admin/Blog', 'event');
    echo $event->update(5); // 输出 update:5

    资源控制器在路由有提到:

    自动定位控制器

    在访问控制器层controller下有子目录那么我们可以在配置文件配置如下:

    'controller_auto_search' => true,

    然后定义控制器如下:

    amespace appindexcontrollerv1;
    
    use thinkController;
    
    class Blog extends Controller
    {
        public function index()
        {
            return $this->fetch();
        }
       
    }

    访问url:http://serverName/index.php/index/v1/Blog/index.html





  • 相关阅读:
    apollo使用场景2
    我问问
    洛谷 P3979 遥远的国度
    小技巧—对拍和输出文件的比较
    洛谷 P6850 NOI
    小技巧—双向边快速枚举
    ZJOI 2008 骑士
    小技巧—指数形式的枚举
    小技巧—滚动数组
    刷题心得—背包问题的枚举方式
  • 原文地址:https://www.cnblogs.com/lichihua/p/10419814.html
Copyright © 2011-2022 走看看