Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Zend>;用于捕获不匹配的正则表达式路由的配置_Php_Regex_Zend Framework - Fatal编程技术网

Php Zend>;用于捕获不匹配的正则表达式路由的配置

Php Zend>;用于捕获不匹配的正则表达式路由的配置,php,regex,zend-framework,Php,Regex,Zend Framework,我在我的应用程序中使用zend framework,并且根据url中的选项使用了一些正则表达式路由将用户路由到特定的控制器和操作 但当url模式不匹配时,我会得到一个404错误,如:Page not Found 如何指定配置,以便当正则表达式路由与指定的URL不匹配时,控制路由到默认控制器和操作 仅供参考,我希望路由到“索引”控制器和“索引”操作默认情况下您可以创建自己的“全部捕获”路由,并将其放置到路由器中,以便它在正则表达式之后运行。IIRC,路由器组件循环已安装的路由(向后?),第一个返回

我在我的应用程序中使用zend framework,并且根据url中的选项使用了一些正则表达式路由将用户路由到特定的控制器和操作

但当url模式不匹配时,我会得到一个404错误,如:Page not Found

如何指定配置,以便当正则表达式路由与指定的URL不匹配时,控制路由到默认控制器和操作


仅供参考,我希望路由到“索引”控制器和“索引”操作默认情况下

您可以创建自己的“全部捕获”路由,并将其放置到路由器中,以便它在正则表达式之后运行。IIRC,路由器组件循环已安装的路由(向后?),第一个返回true的路由将触发进程退出。您的“一网打尽”路线将始终返回true。

解决方案1:

在引导程序的前端控制器中添加以下参数

$front->setParam('useDefaultControllerAlways', true);
解决方案2:

修改ErrorController,如下所示:,
class ErrorController extends Zend_Controller_Action {

    public function errorAction() {
        $this->_forward('index', 'index');
    }

}

?>

我正在使用
ACL
生成自定义错误

class Management_Access extends Zend_Controller_Plugin_Abstract{

    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {
    ....
    ....
    ....
    ....
    $controller = $request->controller;
    $action = $request->action;

    if (!$acl->has($controller)) {

        $request->setControllerName('error');
        $request->setActionName('notfound');

    }

修改它可能会对您有所帮助。

您能提供一个如何配置此路由的示例吗?对不起,dskanth,我已经有一段时间没有使用ZF了,我能记住整个MVC结构,但不能记住细节。如果您运行的是更高版本,我认为您可以通过将其添加到boostrapini中来插入路由。对不起,我帮不上忙了!目前,我在application.ini文件中添加了以下行:resources.router.routes.rest.defaults.module=“default”resources.router.routes.rest.defaults.controller=“index”resources.router.routes.rest.defaults.action=“index”似乎有效。您的引导程序中是否有此代码?Zend_Controller_Front::getInstance()->getRouter()->removeDefaultRoutes();我没有那个代码…你的项目中有ErrorController设置吗?@Xerkus你能解释一下为什么吗?考虑到给定的要求,这是不好的做法。这里最好的方法是前端控制器插件。你们会在前端控制器插件中检测到不存在的路由吗?它有严重的缺点。这是:1)如果在内部转发后抛出异常,则可能出现无止境循环。2) 如果没有注册表/全局/静态变量,则无法轻松检测循环3)插件允许您在不修改错误控制器的情况下动态更改行为4)从errorAction转发到特定错误处理程序是可以的,但转发回应用程序是容易出错的方法5)此示例也没有错误类型检查,所以转发发生在所有的错误上,这些错误使我们返回1的几率更高。@Xerkus无止境循环从未在Zend Framework的ErrorController中发生过。如果ErrorController本身存在错误,则永远不会显示该错误。如果从ErrorController重定向到包含错误的索引页,重定向将在ErrorController处停止