Kohana 3路线 - 空正则表达式

时间:2011-05-23 08:06:45

标签: php routes preg-match kohana-3

直到最近,我还有一个路由处理程序控制器,所有请求都通过该控制器。这样我就可以根据目录中的条目将某些项目定向到某些页面。但由于某种原因,它最近停止了工作并给了我以下错误:

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得到一个恒定的循环。

奇怪的是,这一切都奏效了,据我所知,这个剧本没有任何改变。

任何想法都会受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

解决了它。

其中一个项目基本上有一个“”NULL的seoUrl,所以通过将其作为一个路由,它会混淆在此控制器中设置的所有以下路由。

现在添加了一项检查,以确保$ item-&gt; seoURL不为空。