如果你对该文章中的内容有疑问/不解,可以点击此处链接提问
要注明问题和此文章链接地址 点击此处跳转
// 修改应用类库命名空间 '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