亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

Zend Framework教程之Zend_Controller_Plugin插件用法詳解

2020-03-22 20:30:15
字體:
來源:轉載
供稿:網友
PHP Zend Framework教程之Zend_Controller_Plugin插件用法詳解
本文實例講述了Zend Framework教程之Zend_Controller_Plugin插件用法。分享給大家供大家參考,具體如下:通過Zend_Controller_Plugin可以向前端控制器增加附加的功能。便于w一些特殊功能。以下是Zend_Controller_Plugin的簡單介紹。Zend_Controller_Plugin的基本實現├── Plugin
│ ├── Abstract.php
│ ├── ActionStack.php
│ ├── Broker.php
│ ├── ErrorHandler.php
│ └── PutHandler.phpZend_Controller_Plugin_Abstractabstract html' target='_blank'>class Zend_Controller_Plugin_Abstract protected $_request; protected $_response; public function setRequest(Zend_Controller_Request_Abstract $request) $this- _request = $request; return $this; public function getRequest() return $this- _request; public function setResponse(Zend_Controller_Response_Abstract $response) $this- _response = $response; return $this; public function getResponse() return $this- _response; * Called before Zend_Controller_Front begins evaluating the * request against its routes. * @param Zend_Controller_Request_Abstract $request * @return void public function routeStartup(Zend_Controller_Request_Abstract $request) * Called after Zend_Controller_Router exits. * Called after Zend_Controller_Front exits from the router. * @param Zend_Controller_Request_Abstract $request * @return void public function routeShutdown(Zend_Controller_Request_Abstract $request) * Called before Zend_Controller_Front enters its dispatch loop. * @param Zend_Controller_Request_Abstract $request * @return void public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request) * Called before an action is dispatched by Zend_Controller_Dispatcher. * This callback allows for proxy or filter behavior. By altering the * request and resetting its dispatched flag (via * {@link Zend_Controller_Request_Abstract::setDispatched() setDispatched(false)}), * the current action may be skipped. * @param Zend_Controller_Request_Abstract $request * @return void public function preDispatch(Zend_Controller_Request_Abstract $request) * Called after an action is dispatched by Zend_Controller_Dispatcher. * This callback allows for proxy or filter behavior. By altering the * request and resetting its dispatched flag (via * {@link Zend_Controller_Request_Abstract::setDispatched() setDispatched(false)}), * a new action may be specified for dispatching. * @param Zend_Controller_Request_Abstract $request * @return void public function postDispatch(Zend_Controller_Request_Abstract $request) * Called before Zend_Controller_Front exits its dispatch loop. * @return void public function dispatchLoopShutdown()Zend_Controller_Plugin_Abstract聲明定義了Zend_Controller運行過程中的幾個關鍵事件位置。用戶可以通過指定的方法,對指定位置的請求和相應對象進行相關操作。Zend_Controller_Plugin_Abstract中方法的描述如下:routeStartup() 在 Zend_Controller_Front 向注冊的 路由器 發送請求前被調用。
routeShutdown()在 路由器 完成請求的路由后被調用。
dispatchLoopStartup() 在 Zend_Controller_Front 進入其分發循環(dispatch loop)前被調用。
preDispatch() 在動作由 分發器 分發前被調用。該回調方法允許代理或者過濾行為。通過修改請求和重設分發標志位(利用 Zend_Controller_Request_Abstract::setDispatched(false) )當前動作可以跳過或者被替換。
postDispatch() 在動作由 分發器 分發后被調用。該回調方法允許代理或者過濾行為。通過修改請求和重設分發標志位(利用 Zend_Controller_Request_Abstract::setDispatched(false) )可以指定新動作進行分發。
dispatchLoopShutdown() 在 Zend_Controller_Front 推出其分發循環后調用。Zend_Controller_Plugin提供的默認插件:Zend_Controller_Plugin_Broker:插件經紀人,用于注冊,管理自定義的Zend_Controller插件。具體用法,可以參考類代碼。
Zend_Controller_Plugin_ActionStack:用于管理動作堆棧。具體用法,可以參考類代碼。
Zend_Controller_Plugin_ErrorHandler:用來處理拋出的異常。具體用法,可以參考類代碼。
Zend_Controller_Plugin_PutHandler:用于處理請求操作 PUT 。具體用法,可以參考類代碼。Zend_Controller_Plugin_Broker/** Zend_Controller_Plugin_Abstract */require_once 'Zend/Controller/Plugin/Abstract.php';class Zend_Controller_Plugin_Broker extends Zend_Controller_Plugin_Abstract protected $_plugins = array(); * Register a plugin. * @param Zend_Controller_Plugin_Abstract $plugin * @param int $stackIndex * @return Zend_Controller_Plugin_Broker public function registerPlugin(Zend_Controller_Plugin_Abstract $plugin, $stackIndex = null) if (false !== array_search($plugin, $this- _plugins, true)) { require_once 'Zend/Controller/Exception.php'; throw new Zend_Controller_Exception('Plugin already registered'); $stackIndex = (int) $stackIndex; if ($stackIndex) { if (isset($this- _plugins[$stackIndex])) { require_once 'Zend/Controller/Exception.php'; throw new Zend_Controller_Exception('Plugin with stackIndex "' . $stackIndex . '" already registered'); $this- _plugins[$stackIndex] = $plugin; } else { $stackIndex = count($this- _plugins); while (isset($this- _plugins[$stackIndex])) { ++$stackIndex; $this- _plugins[$stackIndex] = $plugin; $request = $this- getRequest(); if ($request) { $this- _plugins[$stackIndex]- setRequest($request); $response = $this- getResponse(); if ($response) { $this- _plugins[$stackIndex]- setResponse($response); ksort($this- _plugins); return $this; * Unregister a plugin. * @param string|Zend_Controller_Plugin_Abstract $plugin Plugin object or class name * @return Zend_Controller_Plugin_Broker public function unregisterPlugin($plugin) if ($plugin instanceof Zend_Controller_Plugin_Abstract) { // Given a plugin object, find it in the array $key = array_search($plugin, $this- _plugins, true); if (false === $key) { require_once 'Zend/Controller/Exception.php'; throw new Zend_Controller_Exception('Plugin never registered.'); unset($this- _plugins[$key]); } elseif (is_string($plugin)) { // Given a plugin class, find all plugins of that class and unset them foreach ($this- _plugins as $key = $_plugin) { $type = get_class($_plugin); if ($plugin == $type) { unset($this- _plugins[$key]); return $this; * Is a plugin of a particular class registered * @param string $class * @return bool public function hasPlugin($class) foreach ($this- _plugins as $plugin) { $type = get_class($plugin); if ($class == $type) { return true; return false; * Retrieve a plugin or plugins by class * @param string $class Class name of plugin(s) desired * @return false|Zend_Controller_Plugin_Abstract|array Returns false if none found, plugin if only one found, and array of plugins if multiple plugins of same class found public function getPlugin($class) $found = array(); foreach ($this- _plugins as $plugin) { $type = get_class($plugin); if ($class == $type) { $found[] = $plugin; switch (count($found)) { case 0: return false; case 1: return $found[0]; default: return $found; * Retrieve all plugins * @return array public function getPlugins() return $this- _plugins; * Set request object, and register with each plugin * @param Zend_Controller_Request_Abstract $request * @return Zend_Controller_Plugin_Broker public function setRequest(Zend_Controller_Request_Abstract $request) $this- _request = $request; foreach ($this- _plugins as $plugin) { $plugin- setRequest($request); return $this; * Get request object * @return Zend_Controller_Request_Abstract $request public function getRequest() return $this- _request; * Set response object * @param Zend_Controller_Response_Abstract $response * @return Zend_Controller_Plugin_Broker public function setResponse(Zend_Controller_Response_Abstract $response) $this- _response = $response; foreach ($this- _plugins as $plugin) { $plugin- setResponse($response); return $this; * Get response object * @return Zend_Controller_Response_Abstract $response public function getResponse() return $this- _response; * Called before Zend_Controller_Front begins evaluating the * request against its routes. * @param Zend_Controller_Request_Abstract $request * @return void public function routeStartup(Zend_Controller_Request_Abstract $request) foreach ($this- _plugins as $plugin) { try { $plugin- routeStartup($request); } catch (Exception $e) { if (Zend_Controller_Front::getInstance()- throwExceptions()) { throw new Zend_Controller_Exception($e- getMessage() . $e- getTraceAsString(), $e- getCode(), $e); } else { $this- getResponse()- setException($e); * Called before Zend_Controller_Front exits its iterations over * the route set. * @param Zend_Controller_Request_Abstract $request * @return void public function routeShutdown(Zend_Controller_Request_Abstract $request) foreach ($this- _plugins as $plugin) { try { $plugin- routeShutdown($request); } catch (Exception $e) { if (Zend_Controller_Front::getInstance()- throwExceptions()) { throw new Zend_Controller_Exception($e- getMessage() . $e- getTraceAsString(), $e- getCode(), $e); } else { $this- getResponse()- setException($e); * Called before Zend_Controller_Front enters its dispatch loop. * During the dispatch loop, Zend_Controller_Front keeps a * Zend_Controller_Request_Abstract object, and uses * Zend_Controller_Dispatcher to dispatch the * Zend_Controller_Request_Abstract object to controllers/actions. * @param Zend_Controller_Request_Abstract $request * @return void public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request) foreach ($this- _plugins as $plugin) { try { $plugin- dispatchLoopStartup($request); } catch (Exception $e) { if (Zend_Controller_Front::getInstance()- throwExceptions()) { throw new Zend_Controller_Exception($e- getMessage() . $e- getTraceAsString(), $e- getCode(), $e); } else { $this- getResponse()- setException($e); * Called before an action is dispatched by Zend_Controller_Dispatcher. * @param Zend_Controller_Request_Abstract $request * @return void public function preDispatch(Zend_Controller_Request_Abstract $request) foreach ($this- _plugins as $plugin) { try { $plugin- preDispatch($request); } catch (Exception $e) { if (Zend_Controller_Front::getInstance()- throwExceptions()) { throw new Zend_Controller_Exception($e- getMessage() . $e- getTraceAsString(), $e- getCode(), $e); } else { $this- getResponse()- setException($e); // skip rendering of normal dispatch give the error handler a try $this- getRequest()- setDispatched(false); * Called after an action is dispatched by Zend_Controller_Dispatcher. * @param Zend_Controller_Request_Abstract $request * @return void public function postDispatch(Zend_Controller_Request_Abstract $request) foreach ($this- _plugins as $plugin) { try { $plugin- postDispatch($request); } catch (Exception $e) { if (Zend_Controller_Front::getInstance()- throwExceptions()) { throw new Zend_Controller_Exception($e- getMessage() . $e- getTraceAsString(), $e- getCode(), $e); } else { $this- getResponse()- setException($e); * Called before Zend_Controller_Front exits its dispatch loop. * @param Zend_Controller_Request_Abstract $request * @return void public function dispatchLoopShutdown() foreach ($this- _plugins as $plugin) { try { $plugin- dispatchLoopShutdown(); } catch (Exception $e) { if (Zend_Controller_Front::getInstance()- throwExceptions()) { throw new Zend_Controller_Exception($e- getMessage() . $e- getTraceAsString(), $e- getCode(), $e); } else { $this- getResponse()- setException($e);Zend_Controller_Plugin_ActionStack/** Zend_Controller_Plugin_Abstract */require_once 'Zend/Controller/Plugin/Abstract.php';/** Zend_Registry */require_once 'Zend/Registry.php';class Zend_Controller_Plugin_ActionStack extends Zend_Controller_Plugin_Abstract /** @var Zend_Registry */ protected $_registry; * Registry key under which actions are stored * @var string protected $_registryKey = 'Zend_Controller_Plugin_ActionStack'; * Valid keys for stack items * @var array protected $_validKeys = array( 'module', 'controller', 'action', 'params' * Flag to determine whether request parameters are cleared between actions, or whether new parameters * are added to existing request parameters. * @var Bool protected $_clearRequestParams = false; * Constructor * @param Zend_Registry $registry * @param string $key * @return void public function __construct(Zend_Registry $registry = null, $key = null) if (null === $registry) { $registry = Zend_Registry::getInstance(); $this- setRegistry($registry); if (null !== $key) { $this- setRegistryKey($key); } else { $key = $this- getRegistryKey(); $registry[$key] = array(); * Set registry object * @param Zend_Registry $registry * @return Zend_Controller_Plugin_ActionStack public function setRegistry(Zend_Registry $registry) $this- _registry = $registry; return $this; * Retrieve registry object * @return Zend_Registry public function getRegistry() return $this- _registry; * Retrieve registry key * @return string public function getRegistryKey() return $this- _registryKey; * Set registry key * @param string $key * @return Zend_Controller_Plugin_ActionStack public function setRegistryKey($key) $this- _registryKey = (string) $key; return $this; * Set clearRequestParams flag * @param bool $clearRequestParams * @return Zend_Controller_Plugin_ActionStack public function setClearRequestParams($clearRequestParams) $this- _clearRequestParams = (bool) $clearRequestParams; return $this; * Retrieve clearRequestParams flag * @return bool public function getClearRequestParams() return $this- _clearRequestParams; * Retrieve action stack * @return array public function getStack() $registry = $this- getRegistry(); $stack = $registry[$this- getRegistryKey()]; return $stack; * Save stack to registry * @param array $stack * @return Zend_Controller_Plugin_ActionStack protected function _saveStack(array $stack) $registry = $this- getRegistry(); $registry[$this- getRegistryKey()] = $stack; return $this; * Push an item onto the stack * @param Zend_Controller_Request_Abstract $next * @return Zend_Controller_Plugin_ActionStack public function pushStack(Zend_Controller_Request_Abstract $next) $stack = $this- getStack(); array_push($stack, $next); return $this- _saveStack($stack); * Pop an item off the action stack * @return false|Zend_Controller_Request_Abstract public function popStack() $stack = $this- getStack(); if (0 == count($stack)) { return false; $next = array_pop($stack); $this- _saveStack($stack); if (!$next instanceof Zend_Controller_Request_Abstract) { require_once 'Zend/Controller/Exception.php'; throw new Zend_Controller_Exception('ArrayStack should only contain request objects'); $action = $next- getActionName(); if (empty($action)) { return $this- popStack($stack); $request = $this- getRequest(); $controller = $next- getControllerName(); if (empty($controller)) { $next- setControllerName($request- getControllerName()); $module = $next- getModuleName(); if (empty($module)) { $next- setModuleName($request- getModuleName()); return $next; * postDispatch() plugin hook -- check for actions in stack, and dispatch if any found * @param Zend_Controller_Request_Abstract $request * @return void public function postDispatch(Zend_Controller_Request_Abstract $request) // Don't move on to next request if this is already an attempt to // forward if (!$request- isDispatched()) { return; $this- setRequest($request); $stack = $this- getStack(); if (empty($stack)) { return; $next = $this- popStack(); if (!$next) { return; $this- forward($next); * Forward request with next action * @param array $next * @return void public function forward(Zend_Controller_Request_Abstract $next) $request = $this- getRequest(); if ($this- getClearRequestParams()) { $request- clearParams(); $request- setModuleName($next- getModuleName()) - setControllerName($next- getControllerName()) - setActionName($next- getActionName()) - setParams($next- getParams()) - setDispatched(false);Zend_Controller_Plugin_ErrorHandler/** Zend_Controller_Plugin_Abstract */require_once 'Zend/Controller/Plugin/Abstract.php';class Zend_Controller_Plugin_ErrorHandler extends Zend_Controller_Plugin_Abstract * Const - No controller exception; controller does not exist const EXCEPTION_NO_CONTROLLER = 'EXCEPTION_NO_CONTROLLER'; * Const - No action exception; controller exists, but action does not const EXCEPTION_NO_ACTION = 'EXCEPTION_NO_ACTION'; * Const - No route exception; no routing was possible const EXCEPTION_NO_ROUTE = 'EXCEPTION_NO_ROUTE'; * Const - Other Exception; exceptions thrown by application controllers const EXCEPTION_OTHER = 'EXCEPTION_OTHER'; * Module to use for errors; defaults to default module in dispatcher * @var string protected $_errorModule; * Controller to use for errors; defaults to 'error' * @var string protected $_errorController = 'error'; * Action to use for errors; defaults to 'error' * @var string protected $_errorAction = 'error'; * Flag; are we already inside the error handler loop * @var bool protected $_isInsideErrorHandlerLoop = false; * Exception count logged at first invocation of plugin * @var int protected $_exceptionCountAtFirstEncounter = 0; * Constructor * Options may include: * - module * - controller * - action * @param Array $options * @return void public function __construct(Array $options = array()) $this- setErrorHandler($options); * setErrorHandler() - setup the error handling options * @param array $options * @return Zend_Controller_Plugin_ErrorHandler public function setErrorHandler(Array $options = array()) if (isset($options['module'])) { $this- setErrorHandlerModule($options['module']); if (isset($options['controller'])) { $this- setErrorHandlerController($options['controller']); if (isset($options['action'])) { $this- setErrorHandlerAction($options['action']); return $this; * Set the module name for the error handler * @param string $module * @return Zend_Controller_Plugin_ErrorHandler public function setErrorHandlerModule($module) $this- _errorModule = (string) $module; return $this; * Retrieve the current error handler module * @return string public function getErrorHandlerModule() if (null === $this- _errorModule) { $this- _errorModule = Zend_Controller_Front::getInstance()- getDispatcher()- getDefaultModule(); return $this- _errorModule; * Set the controller name for the error handler * @param string $controller * @return Zend_Controller_Plugin_ErrorHandler public function setErrorHandlerController($controller) $this- _errorController = (string) $controller; return $this; * Retrieve the current error handler controller * @return string public function getErrorHandlerController() return $this- _errorController; * Set the action name for the error handler * @param string $action * @return Zend_Controller_Plugin_ErrorHandler public function setErrorHandlerAction($action) $this- _errorAction = (string) $action; return $this; * Retrieve the current error handler action * @return string public function getErrorHandlerAction() return $this- _errorAction; * Route shutdown hook -- Ccheck for router exceptions * @param Zend_Controller_Request_Abstract $request public function routeShutdown(Zend_Controller_Request_Abstract $request) $this- _handleError($request); * Pre dispatch hook -- check for exceptions and dispatch error handler if * necessary * @param Zend_Controller_Request_Abstract $request public function preDispatch(Zend_Controller_Request_Abstract $request) $this- _handleError($request); * Post dispatch hook -- check for exceptions and dispatch error handler if * necessary * @param Zend_Controller_Request_Abstract $request public function postDispatch(Zend_Controller_Request_Abstract $request) $this- _handleError($request); * Handle errors and exceptions * If the 'noErrorHandler' front controller flag has been set, * returns early. * @param Zend_Controller_Request_Abstract $request * @return void protected function _handleError(Zend_Controller_Request_Abstract $request) $frontController = Zend_Controller_Front::getInstance(); if ($frontController- getParam('noErrorHandler')) { return; $response = $this- getResponse(); if ($this- _isInsideErrorHandlerLoop) { $exceptions = $response- getException(); if (count($exceptions) $this- _exceptionCountAtFirstEncounter) { // Exception thrown by error handler; tell the front controller to throw it $frontController- throwExceptions(true); throw array_pop($exceptions); // check for an exception AND allow the error handler controller the option to forward if (($response- isException()) && (!$this- _isInsideErrorHandlerLoop)) { $this- _isInsideErrorHandlerLoop = true; // Get exception information $error = new ArrayObject(array(), ArrayObject::ARRAY_AS_PROPS); $exceptions = $response- getException(); $exception = $exceptions[0]; $exceptionType = get_class($exception); $error- exception = $exception; switch ($exceptionType) { case 'Zend_Controller_Router_Exception': if (404 == $exception- getCode()) { $error- type = self::EXCEPTION_NO_ROUTE; } else { $error- type = self::EXCEPTION_OTHER; break; case 'Zend_Controller_Dispatcher_Exception': $error- type = self::EXCEPTION_NO_CONTROLLER; break; case 'Zend_Controller_Action_Exception': if (404 == $exception- getCode()) { $error- type = self::EXCEPTION_NO_ACTION; } else { $error- type = self::EXCEPTION_OTHER; break; default: $error- type = self::EXCEPTION_OTHER; break; // Keep a copy of the original request $error- request = clone $request; // get a count of the number of exceptions encountered $this- _exceptionCountAtFirstEncounter = count($exceptions); // Forward to the error handler $request- setParam('error_handler', $error) - setModuleName($this- getErrorHandlerModule()) - setControllerName($this- getErrorHandlerController()) - setActionName($this- getErrorHandlerAction()) - setDispatched(false);Zend_Controller_Plugin_PutHandlerrequire_once 'Zend/Controller/Plugin/Abstract.php';require_once 'Zend/Controller/Request/Http.php';class Zend_Controller_Plugin_PutHandler extends Zend_Controller_Plugin_Abstract * Before dispatching, digest PUT request body and set params * @param Zend_Controller_Request_Abstract $request public function preDispatch(Zend_Controller_Request_Abstract $request) if (!$request instanceof Zend_Controller_Request_Http) { return; if ($this- _request- isPut()) { $putParams = array(); parse_str($this- _request- getRawBody(), $putParams); $request- setParams($putParams);更多關于zend相關內容感興趣的讀者可查看本站專題:《Zend FrameWork框架入門教程》、《php優秀開發框架總結》、《Yii框架入門及常用技巧總結》、《ThinkPHP入門教程》、《php面向對象程序設計入門教程》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》希望本文所述對大家PHP程序設計有所幫助。PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美国产日韩一区二区| 91国产在线精品| 国产精品日韩精品| 国产精品91在线| 欧美极度另类性三渗透| 色综合天天狠天天透天天伊人| 欧美与欧洲交xxxx免费观看| 超在线视频97| 国产欧美欧洲在线观看| 97视频在线观看免费| 日韩欧美主播在线| 久久久av网站| 国产69精品久久久久9999| 欧美激情精品久久久久久久变态| 日韩久久午夜影院| 精品久久久久久| 欧美电影在线观看高清| 91精品国产91久久久久久| 国产成人精品a视频一区www| 国产精品视频久久久| 国产精品69久久久久| 久久久精品2019中文字幕神马| 欧美大片免费观看| 久久久视频精品| 色老头一区二区三区| xxx成人少妇69| 久久手机免费视频| 亚洲天堂av高清| 国产网站欧美日韩免费精品在线观看| 久久亚洲电影天堂| 欧美成人免费全部| 亚洲国产精品系列| 深夜福利日韩在线看| 亚洲黄色www网站| 亚洲一区中文字幕在线观看| 国产网站欧美日韩免费精品在线观看| 欧美在线视频免费观看| 久久夜色精品国产欧美乱| 亚洲精品99久久久久| 欧美激情xxxxx| 中文字幕欧美日韩va免费视频| 在线观看欧美视频| 在线观看亚洲视频| 欧美成人在线免费| 成人午夜高潮视频| 亚洲国产天堂久久国产91| 国产精品色视频| 91精品久久久久久久久久入口| 欧美猛少妇色xxxxx| 亚洲自拍中文字幕| 日韩av综合网| 亚洲人成啪啪网站| 久久99热这里只有精品国产| 欧美孕妇毛茸茸xxxx| 成人欧美一区二区三区黑人| 欧美一级片久久久久久久| 国产精品久久久久久影视| 亚洲小视频在线观看| 91国内免费在线视频| 久久69精品久久久久久国产越南| 久久99热精品| 欧美精品情趣视频| 亚洲色图美腿丝袜| 日日摸夜夜添一区| 国产成人在线精品| 九九九热精品免费视频观看网站| 亚洲精品99久久久久中文字幕| 亚洲视频专区在线| 久久av资源网站| 亚洲精品国产精品乱码不99按摩| 亚洲va男人天堂| 久久综合色影院| 亚洲美女在线视频| 国产成人综合一区二区三区| 国产精品久久久久久久久久新婚| 国产精品欧美一区二区三区奶水| 中文字幕亚洲天堂| 久久久久亚洲精品成人网小说| 欧美日韩国产成人在线观看| 国产精品第七十二页| 91夜夜未满十八勿入爽爽影院| 91爱视频在线| 国产不卡视频在线| 久久影视电视剧凤归四时歌| 亚洲乱码国产乱码精品精天堂| 久久久久免费视频| 国产91精品久久久久久| 日韩在线播放一区| 川上优av一区二区线观看| 国产精品偷伦视频免费观看国产| 欧美午夜视频一区二区| 国产91精品不卡视频| 456国产精品| 亚洲欧美中文字幕| 97精品视频在线观看| 亚洲人成电影在线观看天堂色| 91国产在线精品| 91国产精品91| 欧美一区深夜视频| 91欧美精品午夜性色福利在线| 在线观看视频亚洲| 日韩电影中文字幕av| 欧美人交a欧美精品| 久久久久久久久久久免费| 91亚洲va在线va天堂va国| 亚洲国产一区二区三区四区| 亚洲欧美国产日韩天堂区| 亚洲日本中文字幕免费在线不卡| 欧美黄色成人网| 国产精品久久久91| 精品福利免费观看| 色悠悠久久久久| 久久亚洲欧美日韩精品专区| 91成人精品网站| 亚洲电影免费观看高清完整版在线| 亚洲欧洲黄色网| 久久99久久99精品免观看粉嫩| 福利微拍一区二区| 日韩第一页在线| 国产91精品视频在线观看| 欧美精品少妇videofree| 亚洲春色另类小说| 成人网在线观看| 亚洲成在人线av| 亚洲精品一区二三区不卡| 国产小视频91| 国产日本欧美一区二区三区在线| 超碰97人人做人人爱少妇| 久久久国产一区二区| 欧美寡妇偷汉性猛交| 国产综合在线看| 91精品国产91久久久久福利| 黑人巨大精品欧美一区免费视频| 欧美一级电影在线| 精品小视频在线| 国产激情久久久久| 日韩国产激情在线| 国产免费观看久久黄| 亚洲男人的天堂在线播放| 亚洲欧洲美洲在线综合| 亚洲欧美国产制服动漫| 色婷婷综合成人| 国产精品第七十二页| 亚洲欧美日韩中文在线| 色播久久人人爽人人爽人人片视av| 日产日韩在线亚洲欧美| 日韩在线观看你懂的| 久久夜色精品国产欧美乱| 在线精品国产欧美| 国产大片精品免费永久看nba| 国产成人极品视频| 久久国产精品久久国产精品| 国产日韩欧美视频在线| 国产精品福利在线观看网址| 久久久亚洲欧洲日产国码aⅴ| 精品成人乱色一区二区| 亚洲级视频在线观看免费1级| 国产精品啪视频| 美日韩丰满少妇在线观看| 日韩av免费在线看| 国产欧美日韩免费| 久久精品视频网站| 亚洲黄一区二区| 欧美激情综合色综合啪啪五月|