Heim  >  Artikel  >  PHP-Framework  >  Analysieren Sie, wie Thinkphp5 die Front-End- und Back-End-Trennung realisiert

Analysieren Sie, wie Thinkphp5 die Front-End- und Back-End-Trennung realisiert

藏色散人
藏色散人nach vorne
2021-05-20 15:31:144214Durchsuche

Die folgende thinkphp-Framework-Tutorial-Kolumne stellt Ihnen die Front-End- und Back-End-Trennung von Thinkphp5 vor. Ich hoffe, dass sie Freunden, die sie benötigen, hilfreich sein wird!

Verwenden Sie Thinkphp5, um eine reine API-Entwicklung zu implementieren und eine Front-End- und Back-End-Trennung zu erreichen

Die allgemeinen Schritte sind wie folgt: 1. Lösen Sie das domänenübergreifende Anforderungsproblem. 2. Ändern Sie die Ausgabedaten Formatieren Sie das häufig verwendete API-Rückgabe-JSON-Format. 3. Passen Sie die Ausnahmeverarbeitung an (ändern Sie die Verwendung der Anpassungs-API). Wert von app_init

// 应用行为扩展定义文件
return [
    // 应用初始化
    'app_init'     => [
        'app\api\Crossdomain\Cdom'
    ],
    // 应用开始
    'app_begin'    => [],
    // 模块初始化
    'module_init'  => [],
    // 操作开始执行
    'action_begin' => [],
    // 视图内容过滤
    'view_filter'  => [],
    // 日志写入
    'log_write'    => [],
    // 应用结束
    'app_end'      => [],
];

Erstellen Sie im Anwendungsordnerverzeichnis die Codedatei apiCrossdomain im Verzeichnis Cdom.php. Der Code lautet wie folgt

<?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();
        }
    }
}


Ändern Sie das Ausgabedatenformat in das häufig verwendete API-Rückgabe-JSON-Format

Die Standardausgabe Das Datenformat von TP5 ist HTML, was offensichtlich nicht den Datenspezifikationen häufig verwendeter API-Schnittstellen entspricht. Hier müssen wir entsprechende Änderungen vornehmen. Suchen Sie config.php im Anwendungsverzeichnis und ändern Sie die folgende Konfiguration, um zu vermeiden, dass jedes Mal manuelles JSON oder JSON_Encode erforderlich ist Benutzerdefinierte Ausnahmebehandlung (an die API-Nutzung angepasste Änderung)

Der ursprüngliche Ausnahmebehandlungsmechanismus von TP5 führt dazu, dass die Anforderung direkt abstürzt, wenn sie als API-Schnittstelle verwendet wird. Unter ungewöhnlichen Umständen kann die API-Schnittstelle keine normalen JSON-Daten empfangen und keine generieren Fehler. Dazu müssen wir den Ausnahmebehandlungsmechanismus von TP anpassen.

Suchen Sie die Konfigurationsdatei config.php im Anwendungsverzeichnis. Ändern Sie die folgenden Optionen, um

// 默认输出类型
    &#39;default_return_type&#39;    => &#39;json&#39;,

Suchen Sie das entsprechende Verzeichnis, fügen Sie die Datei CdomHandle.php hinzu und fügen Sie den folgenden Code hinzu

  return [&#39;code&#39;=>1];

Aktivieren Sie starkes Routing

    'exception_handle'       => 'app\api\Crossdomain\CdomHandle',


Bitte beachten Sie das TP-Handbuch für die Verwendung von Env hier

<?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
        ]);
    }
}

Verwandte Empfehlungen:
Die neuesten 10 Thinkphp-Video-Tutorials

Das obige ist der detaillierte Inhalt vonAnalysieren Sie, wie Thinkphp5 die Front-End- und Back-End-Trennung realisiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen