Zend Framework 튜 토리 얼 요청 대상 의 패키지 ZendController_요청 실례 상세 설명
개술
요청 대상 은 전단 컨트롤 러, 공유 기, 배포 기, 제어 류 간 에 전달 되 는 간단 한 값 대상 입 니 다.요청 대상 은 요청 한 모듈, 컨트롤 러, 동작 및 선택 가능 한 인 자 를 봉 인 했 으 며, HTTP, CLI, PHP - GTK 와 같은 다른 요청 환경 도 포함 되 어 있 습 니 다.
요청 대상 의 기본 실현
├── Request │ ├── Abstract.php │ ├── Apache404.php │ ├── Exception.php │ ├── Http.php │ ├── HttpTestCase.php │ └── Simple.php
Zend_Controller_Request_Abstract
요청 대상 의 기본 방법 을 실현 하 였 다.
_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 요청 대상 의 기본 구현.
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;
}
}
상술 한 유형의 실현 을 통 해 알 수 있 듯 이 클래스 는 우리 에 게 필요 한 데 이 터 를 얻 기 위해 많은 편리 한 방법 을 제공 했다.예 를 들 면:
모듈 이름 은 getModuleName () 과 setModuleName () 을 통 해 접근 할 수 있 습 니 다.컨트롤 러 이름 은 getController Name () 과 setController Name () 을 통 해 접근 할 수 있 습 니 다.컨트롤 러 가 호출 하 는 동작 이름 은 getActionName () 과 setActionName () 을 통 해 접근 할 수 있 습 니 다.접근 가능 한 매개 변 수 는 키 값 이 맞 는 관련 배열 입 니 다.배열 은 getParams () 와 setParams () 를 통 해 가 져 오고 설정 할 수 있 으 며, 하나의 매개 변 수 는 getParam () 과 setParam () 을 통 해 가 져 오고 설정 할 수 있 습 니 다.
요청 한 형식 에 따라 더 많은 사용 가능 한 방법 이 존재 합 니 다.기본 ZendController_Request_Http 요청 대상, 접근 요청 url, 경로 정보, $GET 와 $POST 매개 변수 방법 등등.
요청 대상 이 전단 컨트롤 러 로 먼저 전 달 됩 니 다.요청 대상 을 제공 하지 않 으 면 배포 과정의 시작, 경로 과정 이 발생 하기 전에 예화 된다.요청 대상 은 배포 체인 의 모든 대상 에 게 전 달 됩 니 다.
그리고 요청 대상 은 테스트 에 유용 하 다.개발 자 는 필요 에 따라 모듈, 컨트롤 러, 동작, 파라미터, URI 등 요청 환경 을 구축 하고 이 를 전단 컨트롤 러 에 전송 하여 프로그램의 흐름 을 테스트 할 수 있다.응답 대상 과 협조 하면 MVC 프로그램 에 대해 정확 하고 교묘 한 유닛 테스트 (unittesting) 를 할 수 있다.
HTTP 요청
접근 요청 데이터
Zend_Controller_Request_Http 는 컨트롤 러 와 동작 공유 기 변수의 키 이름과 값, URL 에서 분 석 된 추가 매개 변수 등 관련 값 에 대한 접근 을 패키지 합 니 다.또한 현재 기본 주소 (Base URL) 와 요청 URI 를 관리 하 는 공공 구성원 의 초 전역 변수 에 접근 할 수 있 습 니 다.초 전역 변 수 는 요청 대상 에 값 을 부여 할 수 없 지만 setParam / getParam 방법 으로 사용자 인 자 를 설정 / 가 져 올 수 있 습 니 다.
참고: 초 전역 데이터
통과 ZendController_Request_Http 는 공공 구성원 속성의 초 전역 데 이 터 를 방문 합 니 다. 이러한 속성 명 (초 전역 배열 의 키) 은 특정한 순서에 따라 초 전역 변 수 를 일치 시 킵 니 다. 1. GET, 2. POST, 3. COOKIE, 4. SERVER, 5. ENV.
특정한 초 전역 변수 도 $ 와 같은 특정한 방법 으로 접근 할 수 있 습 니 다.POST ['user'] 는 요청 대상 의 getPost ('user') 를 호출 하여 접근 할 수 있 으 며, getQuery () 는 $ 를 가 져 올 수 있 습 니 다.GET 요소, getHeader () 는 요청 메시지 헤 더 를 가 져 올 수 있 습 니 다.
참고: GET 와 POST 데이터
주의: 요청 대상 에서 데 이 터 를 방문 하 는 것 은 어떠한 여과 도 거치 지 않 았 습 니 다. 공유 기와 배포 기 는 작업 에 따라 여과 데 이 터 를 검증 하지만 요청 대상 에 서 는 처리 되 지 않 았 습 니 다.
참고: 원본 (Raw) POST 데이터 도 가 져 옵 니 다!
1.5.0 부터 getRawBody () 방법 으로 원본 post 데 이 터 를 얻 을 수 있 습 니 다.데이터 가 그런 식 으로 제출 되 지 않 으 면 false 로 되 돌아 가지 만 post 의 전체 (full boday) 는 예외 입 니 다.
RESTful MVC 프로그램 을 개발 하면 내용 을 받 아들 이 는 데 상당히 유용 하 다.
요청 대상 에서 setParam () 과 getParam () 을 사용 하여 사용자 인 자 를 설정 하고 가 져 올 수 있 습 니 다.공유 기 는 요청 URI 의 매개 변수 에 따라 이 기능 요청 대상 을 이용 하여 매개 변 수 를 설정 합 니 다.
참고: getParam () 은 사용자 인자 만 가 져 올 수 있 는 것 이 아 닙 니 다.
getParam () 은 사실상 몇 개의 자원 에서 인 자 를 가 져 옵 니 다.우선 순위 에 따라 정렬: setParam () 을 통 해 설 정 된 사용자 매개 변수, GET 매개 변수, 마지막 으로 POST 매개 변수 입 니 다.이 방법 을 통 해 데 이 터 를 얻 을 때 이 점 을 주의해 야 한다.
setParam () 을 통 해 설정 한 매개 변수 에서 (매개 변수) 를 가 져 오 려 면 getUserParam () 을 사용 하 십시오.
또한 1.5.0 부터 어떤 매개 변수 원본 을 검색 할 지 잠 글 수 있 습 니 다. setParamSources () 는 빈 배열 이나 하나 이상 의 지시 가 있 는 매개 변수 원본 이 허용 되 는 값 을 지정 할 수 있 습 니 다. 'GET '또는'POST 의 배열;접근 만 제한 하려 면 'GET ', 그러면 setParamSources (array (' GET ') 를 지정 합 니 다.
참고: 아파 치 관련
apache 404 프로 세 서 를 사용 하여 전단 컨트롤 러 에 요청 을 전달 하거나 재 작성 규칙 (rewriterules) 의 PT 로 고 를 사용 하면 URI 는 $ 에 포 함 됩 니 다.SERVER ['REDIRECT URL'], $ 가 아 닌SERVER['REQUEST_URI']。이러한 설정 을 사용 하여 잘못된 경 로 를 가 져 오 려 면 Zend 를 사용 해 야 합 니 다.Controller_Request_기본 HTTP 클래스 대신 Apache 404 클래스:
$request = new Zend_Controller_Request_Apache404();
$front->setRequest($request);
이 종 류 는 Zend 를 물 려 받 았 습 니 다.Controller_Request_Http, 요청 URI 의 자동 발견 (autodiscovery) 을 간단하게 수정 하 였 습 니 다. 간단 한 교체 장치 (drop - in replacement) 로 사용 할 수 있 습 니 다.기본 주소 와 하위 디 렉 터 리
Zend_Controller_Request_Http 하위 디 렉 터 리 에 Zend 사용 허용Controller_Router_Rewrite。Zend_Controller_Request_Http 는 기본 주 소 를 자동 으로 감지 하고 설정 하려 고 합 니 다.
예 를 들 어 index. php 를 웹 서버 의 이름 / procject / my app / index. phop 서브 디 렉 터 리 에 두 면 기본 주 소 는 / procject / my app 으로 설정 해 야 합 니 다.모든 경로 가 일치 하 는 지 계산 하기 전에 이 문자열 을 경로 에서 제거 합 니 다.이 문자열 은 모든 경로 앞 에 추가 되 어야 합 니 다.경로 'user /: username' 이 유사 합 니 다.http://localhost/projects/myapp/user/martel 화해시키다http://example.com/user/martel라 는 URL 을 붙 였 다.
참고: URL 검사 대소 문자 구분
기본 주소 의 자동 검색 은 대소 문 자 를 구분 하기 때문에 URL 이 파일 시스템 의 하위 디 렉 터 리 와 일치 하 는 지 확인 해 야 합 니 다.그렇지 않 으 면 이상 을 일 으 킬 수 있다.
기본 주소 가 정확 하지 않 으 면 Zend 를 이용 할 수 있 습 니 다.Controller_Request_Http 또는 ZendController_Front 류 의 setBaseUrl () 방법 은 자신의 기본 경 로 를 설정 합 니 다.Zend_Controller_Front 설정 이 가장 쉽 습 니 다. 기본 주 소 를 요청 대상 으로 가 져 옵 니 다.사용자 정의 기본 주소 의 용법 예:
/**
* 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();
판단 요청 방식
getMethod () 는 현재 자원 을 요청 하 는 HTTP 요청 방법 을 결정 할 수 있 습 니 다.또한 요청 한 특정 유형 이 존재 하 는 지 물 어보 면 불 응답 을 받 을 수 있 는 방법 이 많 습 니 다.
isGet() isPost() isPut() isDelete() isHead() isOptions()
이 기본 적 인 사례 들 은 RESTful MVC 구 조 를 만 드 는 것 이다.
AJAX 요청
Zend_Controller_Request_Http 는 AJAX 요청 을 검사 하 는 초보적인 방법 이 있 습 니 다: isXmlHttpRequest ().이 방법 은 'XML HttpRequest' 값 을 가 진 HTTP 요청 헤더 X - Requested - With 를 찾 습 니 다.발견 하면 트 루 로 돌아 갑 니 다.
현재 이 머리 는 다음 JS 라 이브 러 리 로 부족 하 게 전 달 됩 니 다: Prototype / Scriptaculous (and libraries derived from Prototype) Yahoo!UI Library jQuery MochiKit
대부분의 AJAX 라 이브 러 리 는 맞 춤 형 HTTP 요청 헤 더 를 보 낼 수 있 습 니 다.라 이브 러 리 에서 이 헤 더 를 보 내지 않 았 다 면, isXmlHttpRequest () 방법 으로 간단하게 추가 하 십시오.하위 클래스 화 요청 대상.
요청 대상 은 환경 을 요청 하 는 용기 입 니 다.컨트롤 러 체인 은 실제 적 으로 컨트롤 러, 동작, 선택 할 수 있 는 매개 변수 와 배포 상 태 를 설정 하고 가 져 오 는 방법 만 알 아야 한다.기본적으로 컨트롤 러 와 action 키 를 사용 하여 자신의 인 자 를 조회 하여 컨트롤 러 와 동작 을 확인 할 것 을 요청 합 니 다.
필요 한 데 이 터 를 얻 기 위해 서 는 요청 클래스 가 필요 할 때 기본 클래스 나 파생 클래스 를 확장 할 수 있 습 니 다.예 를 들 어 HTTP 환경, CLI 환경 또는 PHP - GTK 환경.
더 많은 zend 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.,,,,, 및《 php 흔 한 데이터베이스 조작 기교 집 합 》
본 논문 에서 말 한 것 이 여러분 의 PHP 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.