php控制器实现自动映射,php – 使用路由器映射多个路由(控制器)

您可以做些什么来减轻您的路由器文件是在YAML文件中移动路由定义.您的YAML仍然会有很多行,但它会更加易读.

在您的router.php文件中,使用以下代码:

不要忘记将symfony YAML解析器添加到composer.json中

use Symfony\Component\Yaml\Yaml;

$yaml_file = 'routes.yaml';

$routes = Yaml::parse(file_get_contents($yaml_file));

foreach ($routes as $route_name => $params) {

$router->map($params[0],$params[1], $params[2].'#'.$params[3], $route_name);

}

// match current request

$match = $router->match();

您的文件routes.yaml将如下所示

index: ["GET", "/", "home_controller", "display_item"]

content: ["GET", "/content/[:parent]/?[:child]?", "content_controller", "display_item"]

article: ["GET", "/article/[:page]", "article_controller", "display_item"]

您可以做的另一件事可以获取较小的文件是将许多小型YAML文件中的路由定义分开.例如,一个用于静态文件,一个用于管理区域,一个用于前端…

要做这样的事情,你必须将router.php代码改成如下:

use Symfony\Component\Yaml\Yaml;

$yaml_files = ['front.yaml', 'static.yaml', 'admin.yaml'];

foreach ($yaml_files as $yaml_file) {

$routes = Yaml::parse(file_get_contents($yaml_file));

foreach ($routes as $route_name => $params) {

$router->map($params[0],$params[1], $params[2].'#'.$params[3], $route_name);

}

}

// match current request

$match = $router->match();

Danny Van Kooten也制作了PHP-Router,它内置了对YAML文件的支持. (如果你看源代码,你会看到他使用Symfony解析器,所以这两种方法都非常相似)

YAML路线定义

base_path: /blog

routes:

index: [/index, someClass.indexAction, GET]

contact: [/contact, someClass.contactAction, GET]

about: [/about, someClass.aboutAction, GET]

Router.php

require __DIR__.'/vendor/autoload.php';

use PHPRouter\RouteCollection;

use PHPRouter\Config;

use PHPRouter\Router;

use PHPRouter\Route;

$config = Config::loadFromFile(__DIR__.'/router.yaml');

$router = Router::parseConfig($config);

$router->matchCurrentRequest();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值