Yaf_Route_Regex是Yaf框架中强大的正则表达式路由组件,相比普通路由能实现更复杂的URL匹配规则。其核心是通过正则表达式定义路由模式,并实现参数提取和验证。
在Yaf_Route_Regex中实现参数验证有两种主要方式:
$route = new Yaf_Route_Regex(
'#^/user/(\d+)$#',
array(
'controller' => 'user',
'action' => 'info'
),
array(1 => 'uid')
);
此例中(\d+)确保uid参数必须为数字
public function infoAction() {
$uid = $this->getRequest()->getParam('uid');
if(!is_numeric($uid)) {
throw new Exception('Invalid parameter');
}
// 业务逻辑
}
Yaf_Route_Regex支持通过assemble方法实现反向URL生成:
$url = $route->assemble(
array('uid' => 123),
array('query' => 'name=test')
);
// 输出:/user/123?name=test
当使用大整数参数时可能出现Nginx 502错误,解决方法如下:
php.ini中max_execution_time足够memory_limit设置location ~ \.php$ {
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
}