Ce qui suit est une introduction à la séparation front-end et back-end de Thinkphp5 de la colonne du didacticiel du framework thinkphp. J'espère que cela sera utile aux amis dans le besoin !
Utilisez Thinkphp5 pour réaliser un développement d'API pur et réaliser une séparation front-end et back-end
Les étapes générales sont les suivantes
1. Problème de demande de domaine
2. Changez le format des données de sortie au format JSON de retour d'API couramment utilisé
3. Personnalisez la gestion des exceptions (modifiez l'utilisation de l'API d'adaptation)
4. routage forcé
Résoudre les problèmes inter-domaines
Recherchez le fichier de définition de l'extension applicationtargs.php et modifiez la valeur de app_init
// 应用行为扩展定义文件 return [ // 应用初始化 'app_init' => [ 'app\api\Crossdomain\Cdom' ], // 应用开始 'app_begin' => [], // 模块初始化 'module_init' => [], // 操作开始执行 'action_begin' => [], // 视图内容过滤 'view_filter' => [], // 日志写入 'log_write' => [], // 应用结束 'app_end' => [], ];
Dans apiCrossdomain dans le répertoire du dossier de l'application , créez un nouveau fichier de code Cdom.php dans le répertoire. Le code est le suivant
<?php namespace app\api\Crossdomain; class Cdom { public function appInit($params) { //配置IP白名单 在测试环境下可以为 * 号 生产环境下建议根据实际环境进行修改。 header('Access-Control-Allow-Origin: *'); header("Access-Control-Allow-Headers: token,Origin, X-Requested-With, X_Requested_With,Content-Type, Accept"); header('Access-Control-Allow-Methods: POST,GET,PUT'); if(request()->isOptions()){ exit(); } } }
Changez le format des données de sortie au format JSON de retour d'API commun
Les données de sortie par défaut Le format de TP5 est HTML, ce qui n'est évidemment pas conforme aux spécifications de données des interfaces API courantes. Ici, nous devons apporter les modifications correspondantes. Recherchez config.php dans le répertoire de l'application et modifiez la configuration suivante pour éviter d'avoir besoin de json ou json_encode manuellement à chaque fois
// 默认输出类型 'default_return_type' => 'json',
Après modification, lors du renvoi des données, vous pouvez directement renvoyer le
return ['code'=>1];
Gestion personnalisée des exceptions (modifier l'utilisation d'une API adaptée)
Recherchez le fichier de configuration config.php dans le répertoire de l'application. Modifiez les options suivantes en
'exception_handle' => 'app\api\Crossdomain\CdomHandle',
<?php namespace app\api\Crossdomain; use think\exception\Handle; use think\Env; use Exception; use MyCLabs\Enum\Enum; class CdomHandle extends Handle { private $code = 999; private $msg; private $errCode; private $errFile = ''; private $errline = ''; private $errtrace = ''; private $errtracestring = ''; protected function getSourceCode(Exception $exception) { // 读取前9行和后9行 $line = $exception->getLine(); $first = ($line - 9 > 0) ? $line - 9 : 1; try { $contents = file($exception->getFile()); $source = [ 'first' => $first, 'source' => array_slice($contents, $first - 1, 19), ]; } catch (Exception $e) { $source = ['code'=>1]; } return $source; } public function render(Exception $e) { $app_debug = Env::get('APP_DEBUG'); //如果是调试模式 if($app_debug) { $this->msg = $e->getMessage(); $this->errCode = $e->getCode(); $this->errFile = json($this->getSourceCode($e)); $this->errline = $e->getLine(); if(Env::get('APP_TRACE')) { $this->errtrace = $e->getTrace(); $this->errtracestring = $e->getTraceAsString(); } } else { $result = [ 'msg' => $e->getMessage(), 'errFile' => ($this->getSourceCode($e)), 'code' => 999, ]; return json($result); } return json([ 'code'=>$this->code, 'msg'=>$this->msg, 'errCode'=>$this->errCode, 'errFile'=>$this->errFile, 'errLine'=>$this->errline, 'errtrace'=>$this->errtrace, 'errtracestring'=>$this->errtracestring ]); } }
activer le routage fort
// 是否开启路由 'url_route_on' => true, // 路由使用完整匹配 'route_complete_match' => true, // 是否强制使用路由 'url_route_must' => true,
BaseException说明:https://docs.python.org/3.1/library/exceptions.html#BaseException
Recommandations associées :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!