欢迎光临
感谢一路有你

thinkphp5.0 | 控制器

如果你对该文章中的内容有疑问/不解,可以点击此处链接提问
要注明问题和此文章链接地址 点击此处跳转
 
// 修改应用类库命名空间
'app_namespace' => 'application',
namespace app\index\controller;
use think\Controller;
class Index extends Controller
{
    public function index()
    {
        // 获取包含域名的完整URL地址
        $this->assign('domain',$this->request->url(true));
        return $this->fetch('index');
    }
}


渲染模板
return $this->fetch('index');
return view('index');
return json_encode($data);

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

控制器初始化
public function _initialize()
    {
        echo 'init<br/>';
    }

前置操作 beforeActionList
protected $beforeActionList = [
        'first',//全部执行
        'second' =>  ['except'=>'hello'],//except执行此方法时不执行,最后执行
        'three'  =>  ['only'=>'hello,data'],//只有指定的执行,,最后在执行相应方法
    ];
    protected function first()
    {
        echo 'first<br/>';
    }


跳转/重定向
success/error
      //设置成功后跳转页面的地址,默认的返回页面是$_SERVER['HTTP_REFERER']
      $this->success('新增成功', 'User/list');
      //错误页面的默认跳转页面是返回前一页,通常不需要设置 javascript:history.back(-1);
      $this->error('新增失败');
默认时间3s
相应模板 THINK_PATH . 'tpl/dispatch_jump.tpl'
//默认错误跳转对应的模板文件
'dispatch_error_tmpl' => APP_PATH . 'tpl/dispatch_jump.tpl',
//默认成功跳转对应的模板文件
'dispatch_success_tmpl' => APP_PATH . 'tpl/dispatch_jump.tpl',

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

变量 含义
$data 要返回的数据
$msg 页面提示信息
$code 返回的code
$wait 跳转等待时间 单位为秒
$url 跳转页面地址

重定向
//重定向到News模块的Category操作
    $this->redirect('News/category', ['cate_id' => 2]);
//重定向到指定的URL地址 并且使用302
    $this->redirect('http://thinkphp.cn/blog/2',302);
通过session闪存数据传值
$this->redirect('News/category', ['cate_id' => 2], 302, ['data' => 'hello']);
记住当前的URL后跳转
redirect('News/category')->remember();
需要跳转到上次记住的URL的时候使用:
redirect()->restore();

空操作
找不到方法时执行
public function _empty($name)
    {
        //把所有城市的操作解析到city方法
        return $this->showCity($name);
    }
空控制器
<?php
namespace app\index\controller;
use think\Request;
class Error 
{
    public function index(Request $request)
    {
        //根据当前控制器名来判断要执行那个城市的操作
        $cityName = $request->controller();
        return $this->city($cityName);
    } 
}

// 更改默认的空控制器名
	'empty_controller'      => 'MyError',

多级控制器
application/index/controller/one/Blog.php
访问地址 http://serverName/index.php/index/one.blog/index
路由中使用  \think\Route::get('blog/add','index/one.Blog/add');

分层控制器
分层控制器是不能够被URL访问直接调用到的,只能在访问控制器、模型类的内部,或者视图模板文件中进行调用。
namespace 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 = \think\Loader::controller('Blog', 'event');
echo $event->update(5); // 输出 update:5
echo $event->delete(5); // 输出 delete:5

为了方便调用,系统提供了controller助手函数直接实例化多层控制器,例如:
$event = controller('Blog', 'event');
echo $event->update(5); // 输出 update:5
echo $event->delete(5); // 输出 delete:5

支持跨模块调用,例如:
$event = controller('Admin/Blog', 'event');
echo $event->update(5); // 输出 update:5

除了实例化分层控制器外,还可以直接调用分层控制器类的某个方法,例如:
echo \think\Loader::action('Blog/update', ['id' => 5], 'event'); // 输出 update:
    
也可以使用助手函数action实现相同的功能:
echo action('Blog/update', ['id' => 5], 'event'); // 输出 update:5

利用分层控制器的机制,我们可以用来实现Widget(其实就是在模板中调用分层控制器),例如:
定义index\widget\Blog控制器类如下:
namespace app\index\widget;
class Blog {
    public function header()
    {
        return 'header';
    }
    public function left()
    {
        return 'left';
    }
    public function menu($name)
    {
        return 'menu:'.$name;
    }
}

我们在模板文件中就可以直接调用app\index\widget\Blog分层控制器了,
使用助手函数action
{:action('Blog/header', '', 'widget')}
{:action('Blog/menu', ['name' => 'think'], 'widget')}

框架还提供了widget函数用于简化Widget控制器的调用,
可以直接使用助手函数widget
{:widget('Blog/header')}
{:widget('Blog/menu', ['name' => 'think'])}


自动定位控制器
如果你使用了多级控制器的话,可以设置controller_auto_search参数开启自动定位控制器,便于URL访问,例如首先在配置文件中添加:
'controller_auto_search' => true,
namespace app\index\controller\one;
use think\Controller;
class Blog extends Controller
{
    public function index()
    {
        return $this->fetch();
    }
    
    public function add()
    {
        return $this->fetch();
    }
    
    public function edit($id)
    {
        return $this->fetch('edit:'.$id);
    }
}

我们就可以直接访问下面的URL地址了:
http://serverName/index.php/index/one/Blog



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

或者使用完整的命名空间生成
php think make:controller app\index\controller\Blog

然后你只需要为资源控制器注册一个资源路由:
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



 

赞(0) 打赏
未经允许不得转载:王明昌博客 » thinkphp5.0 | 控制器
分享到: 更多 (0)

相关推荐

  • 暂无文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

×
订阅图标按钮