为在 codeigniter 中的 url 段上传递的参数定义模式

Define a pattern for paramenters passed on url segment on codeigniter

我找到了一种方法来定义一个模式来在 codeigniter 上 url 传递参数...我的意思是一个模式来制作这样的东西:

www.example.com/part/of/url/parameter1/parameter2

我需要传递一个 mac,所以模式必须与 XX-XX-XX-XX-XX-XX 一致,否则,框架会发送404.
正如我所说,我找到了一种方法来做到这一点,但我不知道这是否是最好的方法。我所做的是修改 System 文件夹中的一个文件...特别是文件:system/core/Router.php,我更改了默认行 379 并放置了另一个:

 $key = str_replace(':any', '.+', str_replace(':num', '[0-9]+', str_replace(':mac', '[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}', $key)));

它有效...但我想知道是否有任何方法不需要修改系统文件夹中的文件...我知道这不是一个好主意。

谢谢。

你可以在里面做config/routes.php

例如:

$route['part/of/url/parameter1/([0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2})'] = 'my/routed/';

它只会路由与您的模式匹配的网址。 请参阅正则表达式

部分的 http://www.codeigniter.com/user_guide/general/routing.html

或者,您可以在 routes.php 结束时执行此操作。

$route['part/of/url/parameter1/(:mac)'] = 'my/routed/';


$temp = [];
foreach($route as $key => $value)
{
 $key = str_replace(':mac', '[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}', $key);
 $temp[$key] = $value;
}
$route = $temp;

为了保持干净的代码,最好把这部分放在hooks,看看https://ellislab.com/codeigniter/user-guide/general/hooks.html

保持 system 文件完整非常重要,因为您将来会想要更新 codeigniter。

另一种方式:

// my rules
$mac = '[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}';

$route["part/of/url/parameter1/($mac)"] = 'my/routed/';