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

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

藏色散人
Freigeben: 2021-05-24 09:20:23
nach vorne
4318 Leute haben es durchsucht

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'      => [],
];
Nach dem Login kopieren

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();
        }
    }
}
Nach dem Login kopieren


Ä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;,
Nach dem Login kopieren

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];
Nach dem Login kopieren

Aktivieren Sie starkes Routing

    &#39;exception_handle&#39;       => &#39;app\api\Crossdomain\CdomHandle&#39;,
Nach dem Login kopieren


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
        ]);
    }
}
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:csdn.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage