设为首页
收藏本站
Archiver
用户
登录
入住
用户名
Email
自动登录
找回密码
密码
登录
入住 CI 中国社区
首页
返回 CodeIgniter 中国首页
论坛
BBS
导读
Guide
个人主页
Space
中文手册
搜索
CodeIgniter 搜索引擎
视频教程
案例
任务
搜索
搜索
本版
帖子
用户
设为首页
收藏本站
Archiver
开启辅助访问
切换到宽版
日志
相册
分享
记录
CodeIgniter4
CodeIgniter3
CodeIgniter2
帖子
好友
道具
勋章
收藏
任务
记录
留言板
设置
我的收藏
退出
腾讯QQ
微信登录
CodeIgniter 中国开发者社区
»
论坛
›
CodeIgniter 开发
›
CodeIgniter 问答求助
›
关于路由设置的问题
返回列表
查看:
1306
|
回复:
3
[版本 3.x]
关于路由设置的问题
[复制链接]
萝卜茄子
萝卜茄子
当前离线
积分
78
IP卡
狗仔卡
发表于 2015-10-16 11:55:39
|
显示全部楼层
|
阅读模式
本帖最后由 萝卜茄子 于 2015-10-16 12:13 编辑
问题叙述: 在控制器welcome下面定义了一个number(),该方法接收一个id作为其参数。
PHP
复制代码
<?php
defined
(
'BASEPATH'
)
OR
exit
(
'No direct script access allowed'
)
;
class
Welcome
extends
CI_Controller
{
public
function
number
(
$id
)
{
echo
$id
;
}
}
复制代码
在路由文件中定义了两条规则:
PHP
复制代码
//这是第一条
$route
[
'welcome/([1-9]+)'
]
=
'welcome/$1'
;
//这是第二条
$route
[
'welcome/number/([1-9]+)'
]
=
'welcome/number/$1'
;
复制代码
通过测试,第一条是完全正常的。且能做到只匹配数字。
第二条路由规则则无法限定传入的参数是数字,即便是输入的'abc'这样的非数字字符串,该方法也能接收到。
问题是,如何做让其路由匹配且只按照设定的路由规则匹配?
比如第二条只匹配数字。其他的就无法匹配。
现在这么写路由的时候,第二条路由完全失效。
求破!
非常感谢!
——20151016
——萝卜茄子
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
显身卡
萝卜茄子
萝卜茄子
当前离线
积分
78
IP卡
狗仔卡
楼主
|
发表于 2015-10-16 14:10:51
|
显示全部楼层
研究了下:
将第二条路由规则做了如下修改:
PHP
复制代码
$route
[
'welcome/number/(\S+)'
]
=
function
(
$id
)
{
return
is_numeric
(
$id
)
===
TRUE
?
'welcome/number/'
.
$id
:
show_404
(
)
;
}
;
复制代码
如此的话就可以限制传入的id是数字,且是同这个匿名函数验证后的。
这里也可以对id进行一系列的过滤,然后返回。
一个核心点是要完全匹配到该路由规则才行。所以用了\S来匹配当前id传入的任意字符,然后在该匿名函数中做相应的过滤。、
感谢大家的关注!
——20151016
——萝卜茄子
回复
支持
反对
使用道具
举报
显身卡
ci520
ci520
当前离线
积分
36
IP卡
狗仔卡
发表于 2015-10-20 12:00:31
|
显示全部楼层
本帖最后由 ci520 于 2015-10-20 12:42 编辑
学习了 刚刚接触没多长时间,还用不上,相信以后会用到的。 感谢分享{:soso_e102:}
回复
支持
反对
使用道具
举报
显身卡
萝卜茄子
萝卜茄子
当前离线
积分
78
IP卡
狗仔卡
楼主
|
发表于 2015-10-20 18:33:30
|
显示全部楼层
ci520 发表于 2015-10-20 12:00
学习了 刚刚接触没多长时间,还用不上,相信以后会用到的。 感谢分享 ...
感谢亲的关注。
ci天生不支持路由里面写太多东东。或许也还没研究透。
最后思考的结果是,最好在方法中对参数进行一系列的处理是最妥当的。
如果有什么新的进步,我们彼此分享。
——20151020
——萝卜茄子
回复
支持
反对
使用道具
举报
显身卡
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
入住 CI 中国社区
本版积分规则
发表回复
回帖后跳转到最后一页