当前位置:首页 > PHP教程 > php应用 > 列表

PHP DIY系列之自定义配置和路由

发布:smiling 来源: PHP粉丝网  添加日期:2022-07-05 07:26:40 浏览: 评论:0 

我们已经开发完成,但我们还需要更多。比如自定义配置和路由。

app文件夹下新建Config.php

  1. <?php/** 
  2.  
  3.  *自定义配置 
  4.  
  5.  */return [ 
  6.  
  7.     'debug' => false, 
  8.  
  9.     'route' => [ 
  10.  
  11.         '' => 'demo/welcome'
  12.  
  13.         'test' => 'demo/test'
  14.  
  15.     ],]; 

新建DemoController(app/Https/Controllers目录下)

  1. <?php/** 
  2.  
  3.  * Demo控制器 
  4.  
  5.  */namespace App\Https\Controllers;use Library\Https\Controller;class DemoController extends Controller{ 
  6.  
  7.     public function welcome($params
  8.  
  9.     { 
  10.  
  11.         return $this->response->json(['hello' => 'welcome']); 
  12.  
  13.     } 
  14.  
  15.  
  16.  
  17.     public function test($params
  18.  
  19.     { 
  20.  
  21.         return $this->response->json($params); 
  22.  
  23.     }} 

修改入口文件index.php,加入加载配置代码:

... 省略代码

  1. // 加载配置 
  2.  
  3. $config = require SF_LIBRARY_PATH.'Config.php'
  4.  
  5. $appConfig = file_exists($appConfigPath = SF_APP_PATH.'Config.php') ? require $appConfigPath : []; 
  6.  
  7. $config = array_merge($config$appConfig); 
  8.  
  9. $config['debug'] = ($config['debug']?? SF_DEBUG); 

...省略代码

解析路由部分也加入自定义路由处理:

  1. // Application...省略代码 
  2.  
  3. public function handleRequest(Request $request){ 
  4.  
  5.     $route = $request->resolve($this->_config['route']??[]); 
  6.  
  7.  
  8.  
  9.     $response = $request->runAction($route); 
  10.  
  11.     /** 
  12.  
  13.      * 执行结果赋值给$response->data,并返回给response对象 
  14.  
  15.      */ 
  16.  
  17.     if ($response instanceof Response) { 
  18.  
  19.         return $response
  20.  
  21.     } 
  22.  
  23.  
  24.  
  25.     throw new SaiException('Content format error');} 
  26.  
  27.     ...省略代码 
  28.  
  29.     public function resolve($route=[])  {   
  30.  
  31.     $this->route = $route;  // 自定义路由   
  32.  
  33.     return $this->getPathUrl();  } 
  34.  
  35.     // Request 
  36.  
  37.     ...省略代码public function runAction($route){ 
  38.  
  39.     if (array_key_exists($route$this->_route)) { 
  40.  
  41.         $route = $this->_route[$route]; 
  42.  
  43.     } 
  44.  
  45.  
  46.  
  47.     $match = explode('/'$route); 
  48.  
  49.     $match = array_filter($match); 

...省略代码

保存后打开浏览器看看效果:

PHP DIY系列之自定义配置和路由

PHP DIY系列之自定义配置和路由

这里虽然有自定义路由,但是我们有时候需要禁止默认路由,所以我们不妨增加配置参数defaultRoute,用来控制是否开启默认路由。

我们修改一下路由解析的代码:

  1. //Application...省略代码 
  2.  
  3. public function handleRequest(Request $request){ 
  4.  
  5.     $route = $request->resolve($this->_config['route']??[]); 
  6.  
  7.  
  8.  
  9.     $response = $request->runAction($route$this->_config['defaultRoute']??true); 
  10.  
  11.     /** 
  12.  
  13.      * 执行结果赋值给$response->data,并返回给response对象 
  14.  
  15.      */ 
  16.  
  17.     if ($response instanceof Response) { 
  18.  
  19.         return $response
  20.  
  21.     } 
  22.  
  23.  
  24.  
  25.     throw new SaiException('Content format error');} 

...省略代码

  1. ...省略代码 
  2.  
  3. public function runAction($route$defaultRoute){ 
  4.  
  5.     if (array_key_exists($route$this->_route)) { 
  6.  
  7.         $route = $this->_route[$route]; 
  8.  
  9.     } elseif (!$defaultRoute) { 
  10.  
  11.         throw new NotFoundException("route not found:".$route); 
  12.  
  13.     } 
  14.  
  15.     ...省略代码 

我们在app下面的Config,加入:

  1. return [ 
  2.  
  3.     'debug' => false, 
  4.  
  5.     'route' => [ 
  6.  
  7.         '' => 'demo/welcome'
  8.  
  9.         'test' => 'demo/test'
  10.  
  11.     ], 
  12.  
  13.     'defaultRoute' => false,]; 

我们打开浏览器输入saif.com/login

报错如下:

  1. Array 
  2.  
  3.  
  4.     [line] => 137 
  5.  
  6.     [msg] => route not found:login 
  7.  
  8.     [code] => 404 
  9.  
  10.     [file] => library/Https/Request.php 
  11.  
  12. )

Tags: PHP自定义配置 PHP路由

分享到: