Maison > cadre php > PensezPHP > le corps du texte

Analysez comment Thinkphp5 réalise la séparation front-end et back-end

藏色散人
Libérer: 2021-05-24 09:20:23
avant
4287 Les gens l'ont consulté

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'      => [],
];
Copier après la connexion

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(&#39;Access-Control-Allow-Origin: *&#39;);
        header("Access-Control-Allow-Headers: token,Origin, X-Requested-With, X_Requested_With,Content-Type, Accept");
        header(&#39;Access-Control-Allow-Methods: POST,GET,PUT&#39;);
        if(request()->isOptions()){
            exit();
        }
    }
}
Copier après la connexion

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

// 默认输出类型
    &#39;default_return_type&#39;    => &#39;json&#39;,
Copier après la connexion

Après modification, lors du renvoi des données, vous pouvez directement renvoyer le

  return [&#39;code&#39;=>1];
Copier après la connexion
<🎜 suivant > pour sortir directement les données au format json


Gestion personnalisée des exceptions (modifier l'utilisation d'une API adaptée)

Le mécanisme de gestion des exceptions d'origine de TP5 fera planter directement la requête si elle est utilisée en tant qu'interface API. Dans une situation anormale, l'interface API n'a pas pu recevoir les données JSON normales et une erreur s'est produite. Pour cela, nous devons personnaliser le mécanisme de gestion des exceptions de TP.

Recherchez le fichier de configuration config.php dans le répertoire de l'application. Modifiez les options suivantes en

    &#39;exception_handle&#39;       => &#39;app\api\Crossdomain\CdomHandle&#39;,
Copier après la connexion

pour trouver le répertoire correspondant, ajoutez le fichier CdomHandle.php, ajoutez le code suivant

<?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 = &#39;&#39;;
    private $errline = &#39;&#39;;
    private $errtrace = &#39;&#39;;
    private $errtracestring = &#39;&#39;;
    protected function getSourceCode(Exception $exception)
    {
        // 读取前9行和后9行
        $line  = $exception->getLine();
        $first = ($line - 9 > 0) ? $line - 9 : 1;

        try {
            $contents = file($exception->getFile());
            $source   = [
                &#39;first&#39;  => $first,
                &#39;source&#39; => array_slice($contents, $first - 1, 19),
            ];
        } catch (Exception $e) {
            $source = [&#39;code&#39;=>1];
        }
        return $source;
    }
    public function render(Exception $e)
    {
        $app_debug = Env::get(&#39;APP_DEBUG&#39;);
        //如果是调试模式
        if($app_debug)
        {
            $this->msg = $e->getMessage();
            $this->errCode = $e->getCode();
            $this->errFile = json($this->getSourceCode($e));
            $this->errline = $e->getLine();
            if(Env::get(&#39;APP_TRACE&#39;))
            {
                $this->errtrace = $e->getTrace();
                $this->errtracestring = $e->getTraceAsString();
            }
        }
        else
        {
            $result = [
                &#39;msg&#39; => $e->getMessage(),
                &#39;errFile&#39; => ($this->getSourceCode($e)),

                &#39;code&#39; => 999,
            ];
            return json($result);
        }
        return json([
            &#39;code&#39;=>$this->code,
            &#39;msg&#39;=>$this->msg,
            &#39;errCode&#39;=>$this->errCode,
            &#39;errFile&#39;=>$this->errFile,
            &#39;errLine&#39;=>$this->errline,
            &#39;errtrace&#39;=>$this->errtrace,
            &#39;errtracestring&#39;=>$this->errtracestring
        ]);
    }
}
Copier après la connexion

activer le routage fort

    // 是否开启路由
    &#39;url_route_on&#39;           => true,
    // 路由使用完整匹配
    &#39;route_complete_match&#39;   => true,
    // 是否强制使用路由
    &#39;url_route_must&#39;         => true,
Copier après la connexion

Veuillez vous référer au manuel TP pour l'utilisation d'Env ici


BaseException说明:https://docs.python.org/3.1/library/exceptions.html#BaseException
Copier après la connexion
Recommandations associées :

Les 10 derniers didacticiels vidéo thinkphp

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!

Étiquettes associées:
source:csdn.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal