Maison  >  Article  >  développement back-end  >  Série PHP DIY de configuration et de routage personnalisés

Série PHP DIY de configuration et de routage personnalisés

coldplay.xixi
coldplay.xixiavant
2020-07-07 16:53:162795parcourir

Série PHP DIY de configuration et de routage personnalisés


Nous l'avons développé, mais nous avons besoin de plus. Tels que la configuration et le routage personnalisés.

Créez-en un nouveau dans le dossier appConfig.php

<?php/**
 *自定义配置
 */return [
    &#39;debug&#39; => false,
    &#39;route&#39; => [
        &#39;&#39; => &#39;demo/welcome&#39;,
        &#39;test&#39; => &#39;demo/test&#39;,
    ],];

Créez-en un nouveauDemoController (sous le répertoire app/Https/Controllers)

<?php/**
 * Demo控制器
 */namespace App\Https\Controllers;use Library\Https\Controller;class DemoController extends Controller{
    public function welcome($params)
    {
        return $this->response->json([&#39;hello&#39; => &#39;welcome&#39;]);
    }

    public function test($params)
    {
        return $this->response->json($params);
    }}

Modifiez le fichier d'entrée index.php et ajoutez le code de configuration de chargement :

... 省略代码
// 加载配置
$config = require SF_LIBRARY_PATH.&#39;Config.php&#39;;
$appConfig = file_exists($appConfigPath = SF_APP_PATH.&#39;Config.php&#39;) ? require $appConfigPath : [];
$config = array_merge($config, $appConfig);
$config[&#39;debug&#39;] = ($config[&#39;debug&#39;]?? SF_DEBUG);
...省略代码

La partie d'analyse du routage ajoute également un traitement de routage personnalisé :

// Application...省略代码
public function handleRequest(Request $request){
    $route = $request->resolve($this->_config[&#39;route&#39;]??[]);

    $response = $request->runAction($route);
    /**
     * 执行结果赋值给$response->data,并返回给response对象
     */
    if ($response instanceof Response) {
        return $response;
    }

    throw new SaiException(&#39;Content format error&#39;);}
    ...省略代码
    public function resolve($route=[])  {  
    $this->route = $route;  // 自定义路由  
    return $this->getPathUrl();  }
    // Request
    ...省略代码public function runAction($route){
    if (array_key_exists($route, $this->_route)) {
        $route = $this->_route[$route];
    }

    $match = explode(&#39;/&#39;, $route);
    $match = array_filter($match);
    ...省略代码

Après avoir enregistré, ouvrez le navigateur pour voir l'effet :

Série PHP DIY de configuration et de routage personnalisés

Série PHP DIY de configuration et de routage personnalisés

Bien qu'il existe des routes personnalisées ici, nous devons parfois désactiver la route par défaut, nous pourrions donc aussi bien ajouter le paramètre de configuration defaultRoute pour contrôler s'il faut activer l'itinéraire par défaut.

Modifions le code d'analyse de l'itinéraire :

//Application...省略代码
public function handleRequest(Request $request){
    $route = $request->resolve($this->_config[&#39;route&#39;]??[]);

    $response = $request->runAction($route, $this->_config[&#39;defaultRoute&#39;]??true);
    /**
     * 执行结果赋值给$response->data,并返回给response对象
     */
    if ($response instanceof Response) {
        return $response;
    }

    throw new SaiException(&#39;Content format error&#39;);}
    ...省略代码
...省略代码
public function runAction($route, $defaultRoute){
    if (array_key_exists($route, $this->_route)) {
        $route = $this->_route[$route];
    } elseif (!$defaultRoute) {
        throw new NotFoundException("route not found:".$route);
    }
    ...省略代码

Dans la configuration sous l'application, ajoutez :

return [
    &#39;debug&#39; => false,
    &#39;route&#39; => [
        &#39;&#39; => &#39;demo/welcome&#39;,
        &#39;test&#39; => &#39;demo/test&#39;,
    ],
    &#39;defaultRoute&#39; => false,];

Nous ouvrons le navigateur et entrons saif.com/login

L'erreur est signalée comme suit :

Array
(
    [line] => 137
    [msg] => route not found:login
    [code] => 404
    [file] => library/Https/Request.php
)

Recommandations d'apprentissage associées : Programmation PHP de l'entrée à la maîtrise

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer