直到最近,我还有一个路由处理程序控制器,所有请求都通过该控制器。这样我就可以根据目录中的条目将某些项目定向到某些页面。但由于某种原因,它最近停止了工作并给了我以下错误:
ErrorException [ Warning ]: preg_match() [<a href='function.preg-match'>function.preg-match</a>]: Empty regular expression
这来自route.php文件中的matches()函数。
在调用该类之前,我注意到$ uri变量确实包含一个字符串,但是在该函数中,它会变为NULL,这会导致错误。
// Routes for product items
foreach($items as $item)
{
Route::set($item->seoUrl, $item->seoUrl)
->defaults(array(
'controller' => 'item',
'action' => 'index',
'id' => $item->id,
));
}
// Error
Route::set('error', 'error(/<action>(/<id>))', array('id' => '.+'))
->defaults(array(
'controller' => 'error',
'action' => '404',
'id' => FALSE,
));
// Standard - normal Kohana behaviour
Route::set('standard', '(<controller>(/<action>(/<id>)))')
->defaults(array(
'controller' => 'catalogue',
'action' => 'index',
));
// RouteHandler Reset - otherwise continuous loop
Route::set('routeHandler', '£€%')
->defaults(array(
'controller' => 'routeHandler',
'action' => 'index',
));
$uri = $this->request->param('uri');
$request = new Request($uri);
echo $request->execute()
->send_headers()
->response;
产品项目的路线仍然有效。这让我相信它的标准路线引起了不安。重置路由必须在那里,否则我通过routeHandler得到一个恒定的循环。
奇怪的是,这一切都奏效了,据我所知,这个剧本没有任何改变。
任何想法都会受到高度赞赏。
答案 0 :(得分:0)
解决了它。
其中一个项目基本上有一个“”NULL的seoUrl,所以通过将其作为一个路由,它会混淆在此控制器中设置的所有以下路由。
现在添加了一项检查,以确保$ item-&gt; seoURL不为空。