为在 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/';
我找到了一种方法来定义一个模式来在 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/';