Zend framework 如何在zend中定义当前url(框架的内部作业)

Zend framework 如何在zend中定义当前url(框架的内部作业),zend-framework,php,Zend Framework,Php,请告诉什么脚本使用zend framework定义当前URL?更确切地说,我感兴趣的是使用ZEND定义域名:这个$\u服务器['HTTP\u主机]还是这个 $\u服务器['SERVER\u NAME']?(或者可能是其他原因) 另外,(我在文档中搜索但没有找到,(我不知道这个框架),我也在谷歌中搜索,但也没有找到我问题的答案?尝试使用:$this->getRequest()->getRequestUri()获取当前请求的URI 在视图脚本中,使用:$this->url()获取当前url 或通过实

请告诉什么脚本使用zend framework定义当前URL?更确切地说,我感兴趣的是使用ZEND定义域名:这个
$\u服务器['HTTP\u主机]
还是这个
$\u服务器['SERVER\u NAME']
?(或者可能是其他原因)


另外,(我在文档中搜索但没有找到,(我不知道这个框架),我也在谷歌中搜索,但也没有找到我问题的答案?

尝试使用:
$this->getRequest()->getRequestUri()
获取当前请求的URI

在视图脚本中,使用:
$this->url()
获取当前url

或通过实例使用静态集成Zend控制器前端:

$uri=Zend_Controller_Front::getInstance()->getRequest()->getRequestUri()

您可以通过singleton获取URI实现的值,以获取request()数据的值:

在视图上,将其用作:

echo $this->serverUrl(true); # return with controller, action,...
您应该避免硬代码,例如示例(不要使用!):

在视图上使用as代替本例:

$uri = $this->getRequest()->getHttpHost() . $this->view->url();
如果您想在ZEND中使用getRequest,请进行更多探索

跳过下面的内容(尸检示例如何工作)。

完整的示例代码getRequestUri()如何工作以及isRequest为什么改为使用
$\u服务器
是因为在特定平台上,is随机获取数据:

首先,如果uri为null,那么如果从IIS集合请求,则为HTTP_X_REWRITE_URL。如果没有,请检查IIS7重写的uri(包括编码的uri)。如果不在IIS上,则请求URI将检查HTTP主机名的方案,或者如果失败,将其用作原始路径信息并获取查询字符串

如果设置了,则通过类中返回的对象字符串
$this
自动获取数据

如果失败,将设置一个解析字符串,然后设置它

if ($requestUri === null) {
        if (isset($_SERVER['HTTP_X_REWRITE_URL'])) { // check this first so IIS will catch
            $requestUri = $_SERVER['HTTP_X_REWRITE_URL'];
        } elseif (
            // IIS7 with URL Rewrite: make sure we get the unencoded url (double slash problem)
            isset($_SERVER['IIS_WasUrlRewritten'])
            && $_SERVER['IIS_WasUrlRewritten'] == '1'
            && isset($_SERVER['UNENCODED_URL'])
            && $_SERVER['UNENCODED_URL'] != ''
            ) {
            $requestUri = $_SERVER['UNENCODED_URL'];
        } elseif (isset($_SERVER['REQUEST_URI'])) {
            $requestUri = $_SERVER['REQUEST_URI'];
            // Http proxy reqs setup request uri with scheme and host [and port] + the url path, only use url path
            $schemeAndHttpHost = $this->getScheme() . '://' . $this->getHttpHost();
            if (strpos($requestUri, $schemeAndHttpHost) === 0) {
                $requestUri = substr($requestUri, strlen($schemeAndHttpHost));
            }
        } elseif (isset($_SERVER['ORIG_PATH_INFO'])) { // IIS 5.0, PHP as CGI
            $requestUri = $_SERVER['ORIG_PATH_INFO'];
            if (!empty($_SERVER['QUERY_STRING'])) {
                $requestUri .= '?' . $_SERVER['QUERY_STRING'];
            }
        } else {
            return $this;
        }
    } elseif (!is_string($requestUri)) {
        return $this;
    } else {
        // Set GET items, if available
        if (false !== ($pos = strpos($requestUri, '?'))) {
            // Get key => value pairs and set $_GET
            $query = substr($requestUri, $pos + 1);
            parse_str($query, $vars);
            $this->setQuery($vars);
        }
    }

    $this->_requestUri = $requestUri;
    return $this;

采埃孚1号或2号?&
$request->getRequestUri()
不包含域,因此这将是两个独立的问题。据我所知,ZF2将是更新(更好)的版本:)所以答案:
ZF2
。“$request->getRequestUri()不包含域”如何?url也必须始终包含域,对吗?不,
getRequestUri()
反映了来自HTTP协议第一行的内容(f.ex.
HTTP/1.1 GET/path/to/file
),非常感谢,这对于这个框架用户来说是一个很好的答案,但我对其他内容感兴趣。。。也就是说,我感兴趣的是如何在这个方法中定义cuurent url:
getRequestUri()
,在这个方法中写入了什么脚本来定义当前url(更确切地说是域名)?这是
$\u服务器['SERVER\u NAME']
?请原谅我的英语。请看这里并点击
return$this->\u requestUri您可以查看它的工作方式。
$uri = $this->getRequest()->getHttpHost() . $this->view->url();
if ($requestUri === null) {
        if (isset($_SERVER['HTTP_X_REWRITE_URL'])) { // check this first so IIS will catch
            $requestUri = $_SERVER['HTTP_X_REWRITE_URL'];
        } elseif (
            // IIS7 with URL Rewrite: make sure we get the unencoded url (double slash problem)
            isset($_SERVER['IIS_WasUrlRewritten'])
            && $_SERVER['IIS_WasUrlRewritten'] == '1'
            && isset($_SERVER['UNENCODED_URL'])
            && $_SERVER['UNENCODED_URL'] != ''
            ) {
            $requestUri = $_SERVER['UNENCODED_URL'];
        } elseif (isset($_SERVER['REQUEST_URI'])) {
            $requestUri = $_SERVER['REQUEST_URI'];
            // Http proxy reqs setup request uri with scheme and host [and port] + the url path, only use url path
            $schemeAndHttpHost = $this->getScheme() . '://' . $this->getHttpHost();
            if (strpos($requestUri, $schemeAndHttpHost) === 0) {
                $requestUri = substr($requestUri, strlen($schemeAndHttpHost));
            }
        } elseif (isset($_SERVER['ORIG_PATH_INFO'])) { // IIS 5.0, PHP as CGI
            $requestUri = $_SERVER['ORIG_PATH_INFO'];
            if (!empty($_SERVER['QUERY_STRING'])) {
                $requestUri .= '?' . $_SERVER['QUERY_STRING'];
            }
        } else {
            return $this;
        }
    } elseif (!is_string($requestUri)) {
        return $this;
    } else {
        // Set GET items, if available
        if (false !== ($pos = strpos($requestUri, '?'))) {
            // Get key => value pairs and set $_GET
            $query = substr($requestUri, $pos + 1);
            parse_str($query, $vars);
            $this->setQuery($vars);
        }
    }

    $this->_requestUri = $requestUri;
    return $this;