lichihua
// 定义应用目录
define(\'APP_PATH\', __DIR__ . \'/../app/\');

// 定义配置文件目录和应用目录同级
define(\'CONF_PATH\', __DIR__.\'/../config/\');

// 修改应用类库命名空间(默认是app)  5.08+版本
define(\'APP_NAMESPACE\',\'app\');

 

 

定义:

//application\index\controller\Index.php
namespace app\index\controller;
class Index 
{
    public function index()
    {
        return \'index\';
    }
}
//或者
namespace app\index\controller;
use think\Controller;
class Index extends Controller
{
    public function index()
    {
        return \'index\';
    }
}

//application\index\controller\v1\Index.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 app\index\controller\v1; class Index { public function index() { //模板渲染 $view = new View();//必须申明use think\View; return $view->fetch(\'index\'); //或者 return view(\'index\'); } } //或者 namespace app\index\controller\v1; use think\Controller; 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 app\index\controller;
use think\Controller;
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\tpl\dispatch_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\test\controller;

use think\Request;

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 app\index\event;

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

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

$event = \think\Loader::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 app\index\controller\v1;

use think\Controller;

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

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





分类:

技术点:

相关文章:

  • 2021-12-15
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-09-16
猜你喜欢
  • 2022-12-23
  • 2021-05-21
  • 2022-12-23
  • 2021-05-18
  • 2022-12-23
  • 2021-12-02
  • 2022-12-23
相关资源
相似解决方案