💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
>[danger] `think\Controller`类取消 系统不再提供基础控制器类`think\Controller`,原来的`success`、`error`、`redirect`和`result`方法需要自己在基础控制器类里面实现。 系统默认在应用目录下面提供了一个`app\BaseController`基础类,或者你可以直接放入你的应用里面,继承使用。 你可以安装下面的扩展用于支持旧版本的跳转操作 ~~~ composer require liliuwei/thinkphp-jump ~~~ * ### **[多应用控制器定义](#one)** * ### **[单应用模式控制器定义](#two)** * ### **[多级控制器](#three)** * ### **[基础控制器](#four)** >[danger] ~~注意app目录下存在controller文件则自动解析为单应用模式6.0测试版有效正式版无效~~ > 果要改变`controller`目录名,需要在`route.php`配置文件中设置: ~~~ 'controller_layer' => 'controllers', ~~~ > 控制器一般不需要任何输出,直接`return`即可。并且控制器在`json`请求会自动转换为`json`格式输出。 > 不要在控制器中使用包括`die`、`exit`在内的中断代码。如果你需要调试并中止执行,可以使用系统提供的`halt`助手函数。 ## **<span id='one'> 多应用控制器定义</span>** >[danger]多应用模式需要安装多应用模式扩展 ~~~ composer require topthink/think-multi-app ~~~ >[info] 访问URL地址: ~~~ http://localhost/index.php/admin/showgoods ~~~ >[info]控制器类文件的实际位置 ~~~ app\admin\controller\ShowGoods.php ~~~ >[info]控制器类定义 ~~~ <?php namespace app\admin\controller; class ShowGoods { public function index() { //调试使用halt 不要使用die、exit halt('输出测试'); return 'index'; // 输出JSON return json($data); // 渲染默认模板输出 return view() } } ~~~ ## **<span id='two'> 单应用模式</span>** >[info] 访问URL地址: ~~~ http://localhost/index.php/showgoods ~~~ >[info]控制器类文件的实际位置 ~~~ app\controller\ShowGoods.php ~~~ >[info]控制器类定义 ~~~ <?php namespace app\controller; class ShowGoods { public function index() { //调试使用halt 不要使用die、exit halt('输出测试'); return 'index'; // 输出JSON return json($data); // 渲染默认模板输出 return view() //return View::fetch('admin@member/edit');//在当前控制器调用时admin@member/可省略。更多参考视图-模板-模板渲染 } } ~~~ ## **<span id='three'>多级控制器</span>** >[info] 访问URL地址: ~~~ http://localhost/index.php/admin/v1.blog/index ~~~ >[info]控制器类文件的实际位置 ~~~ app\admin\controller\v1\Blog.php ~~~ >[info]控制器类定义 ``` <?php namespace app\admin\controller\v1; class Blog { public function index() { return 'index'; } } ``` ## **<span id='four'>基础控制器(BaseController)</span>** >[info] 继承`app\BaseController`基础控制器类后可调用`think\App`和`think\Request`对象实例 > 还可使用validate验证 ~~~ namespace app\controller; use app\BaseController; class Index extends BaseController { // 开启批量验证 protected $batchValidate = true; public function index() { //`think\Request`对象 $this->request $action = $this->request->action(); $param = $this->request->param(); //`think\App`对象 $this->app $path = $this->app->getBasePath(); // 控制器验证 //validate(array $data, $validate(规则数组或者验证器名字符串), array $message = [], bool $batch = false(是否批量验证)) try { $this->validate( [ 'name' => 'thinkphp', 'email' => 'thinkphp@qq.com', ], 'app\index\validate\User'); } catch (ValidateException $e) { // 验证失败 输出错误信息 dump($e->getError()); } } } ~~~ [Request对象](https://www.kancloud.cn/a173512/thinkphp6/1805019):$this->request [App对象](https://www.kancloud.cn/a173512/thinkphp6/1805020):$this->app ## **控制器后缀** ~~~ namespace app\controller; class User { public function login() { return 'login'; } } ~~~ 如果你希望避免引入同名模型类的时候冲突,可以在`route.php`配置文件中设置 ~~~ // 使用控制器后缀 'controller_suffix' => true, ~~~ 这样,上面的控制器类就需要改成 ~~~ <?php namespace app\controller; class UserController { public function login() { return 'login'; } } ~~~ 相应的控制器类文件也要改为 ~~~ app\controller\UserController.php ~~~