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

coldplay.xixi
Freigeben: 2023-04-09 07:04:02
nach vorne
2738 人浏览过

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


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

app文件夹下新建Config.php

 false,
    'route' => [
        '' => 'demo/welcome',
        'test' => 'demo/test',
    ],];
Nach dem Login kopieren

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

response->json(['hello' => 'welcome']);
    }

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

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

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

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

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

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

    throw new SaiException('Content format error');}
    ...省略代码
    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('/', $route);
    $match = array_filter($match);
    ...省略代码
Nach dem Login kopieren

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

image

image

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

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

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

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

    throw new SaiException('Content format error');}
    ...省略代码
Nach dem Login kopieren
...省略代码
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);
    }
    ...省略代码
Nach dem Login kopieren

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

return [
    'debug' => false,
    'route' => [
        '' => 'demo/welcome',
        'test' => 'demo/test',
    ],
    'defaultRoute' => false,];
Nach dem Login kopieren

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

报错如下:

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

相关学习推荐:PHP编程从入门到精通

以上是PHP DIY系列之自定义配置和路由的详细内容。更多信息请关注PHP中文网其他相关文章!

Verwandte Etiketten:
Quelle:learnku.com
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!