日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php框架 > ZendFramework > Zend Framework教程-Zend_Controller_Request請(qǐng)求對(duì)象的封裝

Zend Framework教程-Zend_Controller_Request請(qǐng)求對(duì)象的封裝

來源:程序員人生   發(fā)布時(shí)間:2014-06-14 21:10:44 閱讀次數(shù):3561次
概述

請(qǐng)求對(duì)象是在前端控制器,路由器,分發(fā)器,以及控制類間傳遞的簡單值對(duì)象。請(qǐng)求對(duì)象封裝了請(qǐng)求的模塊,控制器,動(dòng)作以及可選的參數(shù),還包括其他的請(qǐng)求環(huán)境,如HTTP,CLI,PHP-GTK。


請(qǐng)求對(duì)象的基本實(shí)現(xiàn)

├── Request│   ├── Abstract.php│   ├── Apache404.php│   ├── Exception.php│   ├── Http.php│   ├── HttpTestCase.php│   └── Simple.php

Zend_Controller_Request_Abstract

實(shí)現(xiàn)了請(qǐng)求對(duì)象的基本方法。

<?phpabstract class Zend_Controller_Request_Abstract{    protected $_dispatched = false;    protected $_module;    protected $_moduleKey = 'module';    protected $_controller;    protected $_controllerKey = 'controller';    protected $_action;    protected $_actionKey = 'action';    protected $_params = array();    public function getModuleName()    {        if (null === $this->_module) {            $this->_module = $this->getParam($this->getModuleKey());        }        return $this->_module;    }    public function setModuleName($value)    {        $this->_module = $value;        return $this;    }    public function getControllerName()    {        if (null === $this->_controller) {            $this->_controller = $this->getParam($this->getControllerKey());        }        return $this->_controller;    }    public function setControllerName($value)    {        $this->_controller = $value;        return $this;    }    public function getActionName()    {        if (null === $this->_action) {            $this->_action = $this->getParam($this->getActionKey());        }        return $this->_action;    }    public function setActionName($value)    {        $this->_action = $value;        /**         * @see ZF-3465         */        if (null === $value) {            $this->setParam($this->getActionKey(), $value);        }        return $this;    }    public function getModuleKey()    {        return $this->_moduleKey;    }    public function setModuleKey($key)    {        $this->_moduleKey = (string) $key;        return $this;    }    public function getControllerKey()    {        return $this->_controllerKey;    }    public function setControllerKey($key)    {        $this->_controllerKey = (string) $key;        return $this;    }    public function getActionKey()    {        return $this->_actionKey;    }    public function setActionKey($key)    {        $this->_actionKey = (string) $key;        return $this;    }    public function getParam($key, $default = null)    {        $key = (string) $key;        if (isset($this->_params[$key])) {            return $this->_params[$key];        }        return $default;    }    public function getUserParams()    {        return $this->_params;    }    public function getUserParam($key, $default = null)    {        if (isset($this->_params[$key])) {            return $this->_params[$key];        }        return $default;    }    public function setParam($key, $value)    {        $key = (string) $key;        if ((null === $value) && isset($this->_params[$key])) {            unset($this->_params[$key]);        } elseif (null !== $value) {            $this->_params[$key] = $value;        }        return $this;    }     public function getParams()     {         return $this->_params;     }    public function setParams(array $array)    {        $this->_params = $this->_params + (array) $array;        foreach ($array as $key => $value) {            if (null === $value) {                unset($this->_params[$key]);            }        }        return $this;    }    public function clearParams()    {        $this->_params = array();        return $this;    }    public function setDispatched($flag = true)    {        $this->_dispatched = $flag ? true : false;        return $this;    }    public function isDispatched()    {        return $this->_dispatched;    }}

Zend_Controller_Request_Http

Zend_Controller_Request請(qǐng)求對(duì)象的默認(rèn)實(shí)現(xiàn)。

<?phprequire_once 'Zend/Controller/Request/Abstract.php';require_once 'Zend/Uri.php';class Zend_Controller_Request_Http extends Zend_Controller_Request_Abstract{    const SCHEME_HTTP  = 'http';    const SCHEME_HTTPS = 'https';    protected $_paramSources = array('_GET', '_POST');    protected $_requestUri;    protected $_baseUrl = null;    protected $_basePath = null;    protected $_pathInfo = '';    protected $_params = array();    protected $_rawBody;    protected $_aliases = array();    public function __construct($uri = null)    {        if (null !== $uri) {            if (!$uri instanceof Zend_Uri) {                $uri = Zend_Uri::factory($uri);            }            if ($uri->valid()) {                $path  = $uri->getPath();                $query = $uri->getQuery();                if (!empty($query)) {                    $path .= '?' . $query;                }                $this->setRequestUri($path);            } else {                require_once 'Zend/Controller/Request/Exception.php';                throw new Zend_Controller_Request_Exception('Invalid URI provided to constructor');            }        } else {            $this->setRequestUri();        }    }    public function __get($key)    {        switch (true) {            case isset($this->_params[$key]):                return $this->_params[$key];            case isset($_GET[$key]):                return $_GET[$key];            case isset($_POST[$key]):                return $_POST[$key];            case isset($_COOKIE[$key]):                return $_COOKIE[$key];            case ($key == 'REQUEST_URI'):                return $this->getRequestUri();            case ($key == 'PATH_INFO'):                return $this->getPathInfo();            case isset($_SERVER[$key]):                return $_SERVER[$key];            case isset($_ENV[$key]):                return $_ENV[$key];            default:                return null;        }    }    public function get($key)    {        return $this->__get($key);    }    public function __set($key, $value)    {        require_once 'Zend/Controller/Request/Exception.php';        throw new Zend_Controller_Request_Exception('Setting values in superglobals not allowed; please use setParam()');    }    public function set($key, $value)    {        return $this->__set($key, $value);    }    public function __isset($key)    {        switch (true) {            case isset($this->_params[$key]):                return true;            case isset($_GET[$key]):                return true;            case isset($_POST[$key]):                return true;            case isset($_COOKIE[$key]):                return true;            case isset($_SERVER[$key]):                return true;            case isset($_ENV[$key]):                return true;            default:                return false;        }    }    public function has($key)    {        return $this->__isset($key);    }    public function setQuery($spec, $value = null)    {        if ((null === $value) && !is_array($spec)) {            require_once 'Zend/Controller/Exception.php';            throw new Zend_Controller_Exception('Invalid value passed to setQuery(); must be either array of values or key/value pair');        }        if ((null === $value) && is_array($spec)) {            foreach ($spec as $key => $value) {                $this->setQuery($key, $value);            }            return $this;        }        $_GET[(string) $spec] = $value;        return $this;    }    public function getQuery($key = null, $default = null)    {        if (null === $key) {            return $_GET;        }        return (isset($_GET[$key])) ? $_GET[$key] : $default;    }    public function setPost($spec, $value = null)    {        if ((null === $value) && !is_array($spec)) {            require_once 'Zend/Controller/Exception.php';            throw new Zend_Controller_Exception('Invalid value passed to setPost(); must be either array of values or key/value pair');        }        if ((null === $value) && is_array($spec)) {            foreach ($spec as $key => $value) {                $this->setPost($key, $value);            }            return $this;        }        $_POST[(string) $spec] = $value;        return $this;    }    public function getPost($key = null, $default = null)    {        if (null === $key) {            return $_POST;        }        return (isset($_POST[$key])) ? $_POST[$key] : $default;    }    public function getCookie($key = null, $default = null)    {        if (null === $key) {            return $_COOKIE;        }        return (isset($_COOKIE[$key])) ? $_COOKIE[$key] : $default;    }    public function getServer($key = null, $default = null)    {        if (null === $key) {            return $_SERVER;        }        return (isset($_SERVER[$key])) ? $_SERVER[$key] : $default;    }    public function getEnv($key = null, $default = null)    {        if (null === $key) {            return $_ENV;        }        return (isset($_ENV[$key])) ? $_ENV[$key] : $default;    }    public function setRequestUri($requestUri = null)    {        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;    }    public function getRequestUri()    {        if (empty($this->_requestUri)) {            $this->setRequestUri();        }        return $this->_requestUri;    }    public function setBaseUrl($baseUrl = null)    {        if ((null !== $baseUrl) && !is_string($baseUrl)) {            return $this;        }        if ($baseUrl === null) {            $filename = (isset($_SERVER['SCRIPT_FILENAME'])) ? basename($_SERVER['SCRIPT_FILENAME']) : '';            if (isset($_SERVER['SCRIPT_NAME']) && basename($_SERVER['SCRIPT_NAME']) === $filename) {                $baseUrl = $_SERVER['SCRIPT_NAME'];            } elseif (isset($_SERVER['PHP_SELF']) && basename($_SERVER['PHP_SELF']) === $filename) {                $baseUrl = $_SERVER['PHP_SELF'];            } elseif (isset($_SERVER['ORIG_SCRIPT_NAME']) && basename($_SERVER['ORIG_SCRIPT_NAME']) === $filename) {                $baseUrl = $_SERVER['ORIG_SCRIPT_NAME']; // 1and1 shared hosting compatibility            } else {                // Backtrack up the script_filename to find the portion matching                // php_self                $path    = isset($_SERVER['PHP_SELF']) ? $_SERVER['PHP_SELF'] : '';                $file    = isset($_SERVER['SCRIPT_FILENAME']) ? $_SERVER['SCRIPT_FILENAME'] : '';                $segs    = explode('/', trim($file, '/'));                $segs    = array_reverse($segs);                $index   = 0;                $last    = count($segs);                $baseUrl = '';                do {                    $seg     = $segs[$index];                    $baseUrl = '/' . $seg . $baseUrl;                    ++$index;                } while (($last > $index) && (false !== ($pos = strpos($path, $baseUrl))) && (0 != $pos));            }            // Does the baseUrl have anything in common with the request_uri?            $requestUri = $this->getRequestUri();            if (0 === strpos($requestUri, $baseUrl)) {                // full $baseUrl matches                $this->_baseUrl = $baseUrl;                return $this;            }            if (0 === strpos($requestUri, dirname($baseUrl))) {                // directory portion of $baseUrl matches                $this->_baseUrl = rtrim(dirname($baseUrl), '/');                return $this;            }            $truncatedRequestUri = $requestUri;            if (($pos = strpos($requestUri, '?')) !== false) {                $truncatedRequestUri = substr($requestUri, 0, $pos);            }            $basename = basename($baseUrl);            if (empty($basename) || !strpos($truncatedRequestUri, $basename)) {                // no match whatsoever; set it blank                $this->_baseUrl = '';                return $this;            }            // If using mod_rewrite or ISAPI_Rewrite strip the script filename            // out of baseUrl. $pos !== 0 makes sure it is not matching a value            // from PATH_INFO or QUERY_STRING            if ((strlen($requestUri) >= strlen($baseUrl))                && ((false !== ($pos = strpos($requestUri, $baseUrl))) && ($pos !== 0)))            {                $baseUrl = substr($requestUri, 0, $pos + strlen($baseUrl));            }        }        $this->_baseUrl = rtrim($baseUrl, '/');        return $this;    }    public function getBaseUrl($raw = false)    {        if (null === $this->_baseUrl) {            $this->setBaseUrl();        }        return (($raw == false) ? urldecode($this->_baseUrl) : $this->_baseUrl);    }    public function setBasePath($basePath = null)    {        if ($basePath === null) {            $filename = (isset($_SERVER['SCRIPT_FILENAME']))                      ? basename($_SERVER['SCRIPT_FILENAME'])                      : '';            $baseUrl = $this->getBaseUrl();            if (empty($baseUrl)) {                $this->_basePath = '';                return $this;            }            if (basename($baseUrl) === $filename) {                $basePath = dirname($baseUrl);            } else {                $basePath = $baseUrl;            }        }        if (substr(PHP_OS, 0, 3) === 'WIN') {            $basePath = str_replace('', '/', $basePath);        }        $this->_basePath = rtrim($basePath, '/');        return $this;    }    public function getBasePath()    {        if (null === $this->_basePath) {            $this->setBasePath();        }        return $this->_basePath;    }    public function setPathInfo($pathInfo = null)    {        if ($pathInfo === null) {            $baseUrl = $this->getBaseUrl(); // this actually calls setBaseUrl() & setRequestUri()            $baseUrlRaw = $this->getBaseUrl(false);            $baseUrlEncoded = urlencode($baseUrlRaw);                    if (null === ($requestUri = $this->getRequestUri())) {                return $this;            }                    // Remove the query string from REQUEST_URI            if ($pos = strpos($requestUri, '?')) {                $requestUri = substr($requestUri, 0, $pos);            }                        if (!empty($baseUrl) || !empty($baseUrlRaw)) {                if (strpos($requestUri, $baseUrl) === 0) {                    $pathInfo = substr($requestUri, strlen($baseUrl));                } elseif (strpos($requestUri, $baseUrlRaw) === 0) {                    $pathInfo = substr($requestUri, strlen($baseUrlRaw));                } elseif (strpos($requestUri, $baseUrlEncoded) === 0) {                    $pathInfo = substr($requestUri, strlen($baseUrlEncoded));                } else {                    $pathInfo = $requestUri;                }            } else {                $pathInfo = $requestUri;            }                }        $this->_pathInfo = (string) $pathInfo;        return $this;    }    public function getPathInfo()    {        if (empty($this->_pathInfo)) {            $this->setPathInfo();        }        return $this->_pathInfo;    }    public function setParamSources(array $paramSources = array())    {        $this->_paramSources = $paramSources;        return $this;    }    public function getParamSources()    {        return $this->_paramSources;    }    public function setParam($key, $value)    {        $key = (null !== ($alias = $this->getAlias($key))) ? $alias : $key;        parent::setParam($key, $value);        return $this;    }    public function getParam($key, $default = null)    {        $keyName = (null !== ($alias = $this->getAlias($key))) ? $alias : $key;        $paramSources = $this->getParamSources();        if (isset($this->_params[$keyName])) {            return $this->_params[$keyName];        } elseif (in_array('_GET', $paramSources) && (isset($_GET[$keyName]))) {            return $_GET[$keyName];        } elseif (in_array('_POST', $paramSources) && (isset($_POST[$keyName]))) {            return $_POST[$keyName];        }        return $default;    }    public function getParams()    {        $return       = $this->_params;        $paramSources = $this->getParamSources();        if (in_array('_GET', $paramSources)            && isset($_GET)            && is_array($_GET)        ) {            $return += $_GET;        }        if (in_array('_POST', $paramSources)            && isset($_POST)            && is_array($_POST)        ) {            $return += $_POST;        }        return $return;    }    public function setParams(array $params)    {        foreach ($params as $key => $value) {            $this->setParam($key, $value);        }        return $this;    }    public function setAlias($name, $target)    {        $this->_aliases[$name] = $target;        return $this;    }    public function getAlias($name)    {        if (isset($this->_aliases[$name])) {            return $this->_aliases[$name];        }        return null;    }    public function getAliases()    {        return $this->_aliases;    }    public function getMethod()    {        return $this->getServer('REQUEST_METHOD');    }    public function isPost()    {        if ('POST' == $this->getMethod()) {            return true;        }        return false;    }    public function isGet()    {        if ('GET' == $this->getMethod()) {            return true;        }        return false;    }    public function isPut()    {        if ('PUT' == $this->getMethod()) {            return true;        }        return false;    }    public function isDelete()    {        if ('DELETE' == $this->getMethod()) {            return true;        }        return false;    }    public function isHead()    {        if ('HEAD' == $this->getMethod()) {            return true;        }        return false;    }    public function isOptions()    {        if ('OPTIONS' == $this->getMethod()) {            return true;        }        return false;    }    public function isXmlHttpRequest()    {        return ($this->getHeader('X_REQUESTED_WITH') == 'XMLHttpRequest');    }    public function isFlashRequest()    {        $header = strtolower($this->getHeader('USER_AGENT'));        return (strstr($header, ' flash')) ? true : false;    }    public function isSecure()    {        return ($this->getScheme() === self::SCHEME_HTTPS);    }    public function getRawBody()    {        if (null === $this->_rawBody) {            $body = file_get_contents('php://input');            if (strlen(trim($body)) > 0) {                $this->_rawBody = $body;            } else {                $this->_rawBody = false;            }        }        return $this->_rawBody;    }    public function getHeader($header)    {        if (empty($header)) {            require_once 'Zend/Controller/Request/Exception.php';            throw new Zend_Controller_Request_Exception('An HTTP header name is required');        }        // Try to get it from the $_SERVER array first        $temp = 'HTTP_' . strtoupper(str_replace('-', '_', $header));        if (isset($_SERVER[$temp])) {            return $_SERVER[$temp];        }        // This seems to be the only way to get the Authorization header on        // Apache        if (function_exists('apache_request_headers')) {            $headers = apache_request_headers();            if (isset($headers[$header])) {                return $headers[$header];            }            $header = strtolower($header);            foreach ($headers as $key => $value) {                if (strtolower($key) == $header) {                    return $value;                }            }        }        return false;    }    public function getScheme()    {        return ($this->getServer('HTTPS') == 'on') ? self::SCHEME_HTTPS : self::SCHEME_HTTP;    }    public function getHttpHost()    {        $host = $this->getServer('HTTP_HOST');        if (!empty($host)) {            return $host;        }        $scheme = $this->getScheme();        $name   = $this->getServer('SERVER_NAME');        $port   = $this->getServer('SERVER_PORT');        if(null === $name) {            return '';        }        elseif (($scheme == self::SCHEME_HTTP && $port == 80) || ($scheme == self::SCHEME_HTTPS && $port == 443)) {            return $name;        } else {            return $name . ':' . $port;        }    }    public function getClientIp($checkProxy = true)    {        if ($checkProxy && $this->getServer('HTTP_CLIENT_IP') != null) {            $ip = $this->getServer('HTTP_CLIENT_IP');        } else if ($checkProxy && $this->getServer('HTTP_X_FORWARDED_FOR') != null) {            $ip = $this->getServer('HTTP_X_FORWARDED_FOR');        } else {            $ip = $this->getServer('REMOTE_ADDR');        }        return $ip;    }}


從上述類的實(shí)現(xiàn),不難看出,類為我們提供了很多方便的方法來獲取需要的數(shù)據(jù)。例如:


模塊名可通過getModuleName()和setModuleName()訪問。

控制器名可通過getControllerName()和setControllerName()訪問。

控制器調(diào)用的動(dòng)作名稱可通過getActionName()和setActionName()訪問。

可訪問的參數(shù)是一個(gè)鍵值對(duì)的關(guān)聯(lián)數(shù)組。數(shù)組可通過getParams()和 setParams()獲取及設(shè)置,單個(gè)參數(shù)可以通過 getParam() 和 setParam()獲取及設(shè)置。
基于請(qǐng)求的類型存在更多的可用方法。默認(rèn)的Zend_Controller_Request_Http請(qǐng)求對(duì)象,擁有訪問請(qǐng)求url、路徑信息、$_GET 和 $_POST參數(shù)的方法等等。
請(qǐng)求對(duì)象先被傳入到前端控制器。如果沒有提供請(qǐng)求對(duì)象,它將在分發(fā)過程的開始、任何路由過程發(fā)生之前實(shí)例化。請(qǐng)求對(duì)象將被傳遞到分發(fā)鏈中的每個(gè)對(duì)象。
而且,請(qǐng)求對(duì)象在測(cè)試中是很有用的。開發(fā)人員可根據(jù)需要搭建請(qǐng)求環(huán)境,包括模塊、控制器、動(dòng)作、參數(shù)、URI等等,并且將其傳入前端控制器來測(cè)試程序流向。如果與響應(yīng)對(duì)象配合,可以對(duì)MVC程序進(jìn)行精確巧妙的單元測(cè)試(unit testing)。

HTTP 請(qǐng)求
訪問請(qǐng)求數(shù)據(jù)
Zend_Controller_Request_Http封裝了對(duì)相關(guān)值的訪問,如控制器和動(dòng)作路由器變量的鍵名和值,從URL解析的附加參數(shù)。它還允許訪問作為公共成員的超全局變量,管理當(dāng)前的基地址(Base URL)和請(qǐng)求URI。超全局變量不能在請(qǐng)求對(duì)象中賦值,但可以通過setParam/getParam方法設(shè)定/獲取用戶參數(shù)。

Note: 超全局?jǐn)?shù)據(jù)
通過Zend_Controller_Request_Http訪問公共成員屬性的超全局?jǐn)?shù)據(jù),有必要認(rèn)識(shí)到一點(diǎn),這些屬性名(超全局?jǐn)?shù)組的鍵)按照特定次序匹配超全局變量:1. GET,2.POST,3. COOKIE,4. SERVER,5. ENV。 
特定的超全局變量也可以選擇特定的方法來訪問,如$_POST['user']可以調(diào)用請(qǐng)求對(duì)象的getPost('user')訪問,getQuery()可以獲取$_GET元素,getHeader()可以獲取請(qǐng)求消息頭。

Note: GET和POST數(shù)據(jù)
需要注意:在請(qǐng)求對(duì)象中訪問數(shù)據(jù)是沒有經(jīng)過任何過濾的,路由器和分發(fā)器根據(jù)任務(wù)來驗(yàn)證過濾數(shù)據(jù),但在請(qǐng)求對(duì)象中沒有任何處理。 
Note: 也獲取原始 (Raw) POST 數(shù)據(jù)!
從 1.5.0 開始,也可以通過 getRawBody() 方法獲取原始 post 數(shù)據(jù)。如果沒有數(shù)據(jù)以那種方式提交,該方法返回 false,但 post 的全體(full boday)是個(gè)例外。 
當(dāng)開發(fā)一個(gè) RESTful MVC 程序,這個(gè)對(duì)于接受內(nèi)容相當(dāng)有用。 
可以在請(qǐng)求對(duì)象中使用setParam() 和getParam()來設(shè)置和獲取用戶參數(shù)。 路由器根據(jù)請(qǐng)求URI中的參數(shù),利用這項(xiàng)功能請(qǐng)求對(duì)象設(shè)定參數(shù)。

Note: getParam()不只可以獲取用戶參數(shù)
getParam()事實(shí)上從幾個(gè)資源中獲取參數(shù)。根據(jù)優(yōu)先級(jí)排序:通過setParam()設(shè)置的用戶參數(shù),GET 參數(shù),最后是POST參數(shù)。 通過該方法獲取數(shù)據(jù)時(shí)需要注意這點(diǎn)。 
如果你希望從你通過 setParam() 設(shè)置的參數(shù)中獲取(參數(shù)),使用 getUserParam()。

另外,從 1.5.0 開始,可以鎖定搜索哪個(gè)參數(shù)源,setParamSources() 允許指定一個(gè)空數(shù)組或者一個(gè)帶有一個(gè)或多個(gè)指示哪個(gè)參數(shù)源被允許(缺省兩者都被允許)的值 '_GET'或'_POST'的數(shù)組;如果想限制只訪問 '_GET',那么指定 setParamSources(array('_GET')) 。

Note: Apache相關(guān)
如果使用apache的404處理器來傳遞請(qǐng)求到前端控制器,或者使用重寫規(guī)則(rewrite rules)的PT標(biāo)志,URI包含在$_SERVER['REDIRECT_URL'],而不是$_SERVER['REQUEST_URI']。如果使用這樣的設(shè)定并獲取無效的路由,應(yīng)該使用Zend_Controller_Request_Apache404類代替默認(rèn)的HTTP類: 
$request = new Zend_Controller_Request_Apache404();
$front->setRequest($request);
                
這個(gè)類繼承了Zend_Controller_Request_Http,并簡單的修改了請(qǐng)求URI的自動(dòng)發(fā)現(xiàn)(autodiscovery),它可以用來作為簡易替換器件(drop-in replacement)。 
基地址和子目錄

Zend_Controller_Request_Http允許在子目錄中使用Zend_Controller_Router_Rewrite。Zend_Controller_Request_Http試圖自動(dòng)的檢測(cè)你的基地址,并進(jìn)行相應(yīng)的設(shè)置。

例如,如果將 index.php 放在web服務(wù)器的名為/projects/myapp/index.php子目錄中,基地址應(yīng)該被設(shè)置為/projects/myapp。計(jì)算任何路由匹配之前將先從路徑中去除這個(gè)字符串。這個(gè)字串需要被加入到任何路由前面。路由 'user/:username'將匹配類似http://localhost/projects/myapp/user/martel 和http://example.com/user/martel的URL。

Note: URL檢測(cè)區(qū)分大小寫
基地址的自動(dòng)檢測(cè)是區(qū)分大小寫的,因此需要確保URL與文件系統(tǒng)中的子目錄匹配。否則將會(huì)引發(fā)異常。 
如果基地址經(jīng)檢測(cè)不正確,可以利用Zend_Controller_Request_Http或者Zend_Controller_Front類的setBaseUrl()方法設(shè)置自己的基路徑。Zend_Controller_Front設(shè)置最容易,它將導(dǎo)入基地址到請(qǐng)求對(duì)象。定制基地址的用法舉例:

/**
 * Dispatch Request with custom base URL with Zend_Controller_Front.
 */
$router     = new Zend_Controller_Router_Rewrite();
$controller = Zend_Controller_Front::getInstance();
$controller->setControllerDirectory('./application/controllers')
           ->setRouter($router)
           ->setBaseUrl('/projects/myapp'); // set the base url!
$response   = $controller->dispatch();

            
判斷請(qǐng)求方式


getMethod() 允許你決定用于請(qǐng)求當(dāng)前資源的 HTTP 請(qǐng)求方法。另外,當(dāng)詢問是否一個(gè)請(qǐng)求的特定類型是否已經(jīng)存在,有許多方法允許你獲得布爾響應(yīng):

isGet()
isPost()
isPut()
isDelete()
isHead()
isOptions()
這些基本用例是來創(chuàng)建 RESTful MVC 架構(gòu)的。


 AJAX 請(qǐng)求

Zend_Controller_Request_Http 有一個(gè)初步的方法用來檢測(cè)AJAX請(qǐng)求:isXmlHttpRequest()。這個(gè)方法尋找一個(gè)帶有'XMLHttpRequest' 值的HTTP請(qǐng)求頭X-Requested-With;如果發(fā)現(xiàn),就返回true。
當(dāng)前,這個(gè)頭用下列JS庫缺省地傳遞:
Prototype/Scriptaculous (and libraries derived from Prototype)
Yahoo! UI Library
jQuery
MochiKit
大多數(shù) AJAX 庫允許發(fā)送定制的HTTP請(qǐng)求頭;如果你的庫沒有發(fā)送這個(gè)頭,簡單地把它作為一個(gè)請(qǐng)求頭添加上確保isXmlHttpRequest() 方法工作。

子類化請(qǐng)求對(duì)象。



請(qǐng)求對(duì)象是請(qǐng)求環(huán)境的容器。控制器鏈實(shí)際上只需要知道如何設(shè)置和獲取控制器、動(dòng)作,可選的參數(shù)以及分發(fā)的狀態(tài)。默認(rèn)的,請(qǐng)求將使用controller和action鍵查詢自己的參數(shù)來確定控制器和動(dòng)作。
需要一個(gè)請(qǐng)求類來與特定的環(huán)境交互以獲得需要的數(shù)據(jù)時(shí),可以擴(kuò)展該基類或它的衍生類。例如HTTP環(huán)境,CLI環(huán)境,或者PHP-GTK環(huán)境。
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 国产伦精品一区二区三 | 一区网站在线观看 | 久久激情免费视频 | 欧美日韩高清在线一区 | 午夜激情爱爱 | 97午夜 | 欧美精品一区二区三区在线播放 | 久久婷婷激情 | 少妇精品视频一区二区免费看 | 男女做网站 | 成人福利 | 波多野结衣的一级片 | 一区二区三区四区在线 | 精品国产欧美 | 污视频网站免费 | 久久国产精品区 | 欧美在线视频一区 | 91av视频免费观看 | 亚洲成人一区在线观看 | 91久久久久久久久 | 国产精品永久在线 | 亚洲视频成人 | 免费看黄在线看 | 亚洲欧美中文日韩在线v日本 | 亚洲欧洲av在线 | 牲高潮99爽久久久久777 | 日韩精品成人一区二区在线观看 | 亚洲婷婷六月 | 麻豆精品| 成人亚洲 | 黄a在线观看 | 久久久精品久久久久 | 国产91久 | 日韩一区二区三区在线 | 免费国产在线视频 | 加勒比在线免费视频 | 天天拍天天操 | 美女黄色免费网站 | 91精品久久久久久久蜜月 | 99久33精品字幕 | 成人一级片|