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

首頁 > 編程 > PHP > 正文

Zend Framework中Zend_Controller_Plugin插件的用法

2020-03-22 17:42:39
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了Zend Framework教程之Zend_Controller_Plugin插件用法,結合實例形式詳細分析了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.php

Zend_Controller_Plugin_Abstract

abstract 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

 ?php/** 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

 ?php/** 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

 ?php/** 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_PutHandler

 ?phprequire_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);}

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP !

相關推薦:

關于Zend Framework中Zend_Config組件的用法

關于Zend Framework中Zend_Db_Table_Rowset的用法

以上就是Zend Framework中Zend_Controller_Plugin插件的用法的詳細內容,PHP教程

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
九九热精品视频在线播放| 久久精品美女视频网站| 国产精品中文字幕久久久| 国产69久久精品成人| 岛国精品视频在线播放| 亚洲欧美日韩直播| 亚洲自拍欧美另类| 欧美精品在线网站| 91精品久久久久久久久久久久久| 精品视频中文字幕| 日韩有码在线视频| 国产免费一区二区三区在线观看| 国产做受69高潮| 97婷婷大伊香蕉精品视频| 日韩av一区在线| 久久久久久噜噜噜久久久精品| 色老头一区二区三区在线观看| 一区二区三区视频在线| 黑丝美女久久久| 日韩一区二区在线视频| 日韩中文字幕国产精品| 久久精视频免费在线久久完整在线看| 日韩亚洲欧美中文在线| 精品女厕一区二区三区| 97久久精品人人澡人人爽缅北| 欧美激情中文网| 在线播放日韩专区| 福利视频导航一区| 成人国产精品一区| 欧美与黑人午夜性猛交久久久| 狠狠色狠狠色综合日日小说| 国产成人精品免费久久久久| 国产精品国产三级国产aⅴ9色| 国产深夜精品福利| www.欧美精品一二三区| 久久视频免费在线播放| 91高清视频在线免费观看| 91欧美精品成人综合在线观看| 中文欧美日本在线资源| 91精品国产高清久久久久久| 51精品国产黑色丝袜高跟鞋| 国产精品美女999| 黄色精品一区二区| 亚洲qvod图片区电影| 日韩va亚洲va欧洲va国产| 成人性生交大片免费观看嘿嘿视频| 狠狠色香婷婷久久亚洲精品| 国产精品一区二区久久久久| 色偷偷91综合久久噜噜| 97热精品视频官网| 亚洲欧洲激情在线| 欧美性videos高清精品| 最新国产成人av网站网址麻豆| 亚洲人线精品午夜| 国产精品爽爽ⅴa在线观看| 九九热99久久久国产盗摄| 色妞久久福利网| 欧美日韩在线另类| 成人天堂噜噜噜| 曰本色欧美视频在线| 欧美性受xxxx白人性爽| 欧美日韩国产va另类| 亚洲美女黄色片| 日韩69视频在线观看| 国产欧美韩国高清| 欧美不卡视频一区发布| 最近2019年好看中文字幕视频| 国产有码在线一区二区视频| 日韩精品高清在线观看| 国产香蕉精品视频一区二区三区| 国产日韩欧美在线看| 久久人人爽人人爽爽久久| 日韩精品免费电影| 美女福利视频一区| 国产手机视频精品| 国产一区二中文字幕在线看| 国产视频久久久久久久| 亚洲一区二区三区久久| 亚洲国产成人91精品| 成人精品久久av网站| 欧美最猛性xxxxx(亚洲精品)| 国产成人精品国内自产拍免费看| 一本色道久久88综合日韩精品| 国产综合久久久久| 国产婷婷97碰碰久久人人蜜臀| 亚洲综合中文字幕在线| 黑人巨大精品欧美一区二区三区| 91精品国产精品| 国产精品扒开腿爽爽爽视频| 日本电影亚洲天堂| 欧美激情一区二区三区久久久| 久久精品99久久久久久久久| 久久久人成影片一区二区三区观看| xxx成人少妇69| 国产精品福利在线| 亚洲剧情一区二区| 国产美女久久久| 91高潮在线观看| 欧美精品久久久久久久久| 国产一区二区日韩| 91精品视频免费| 欧美亚洲视频在线观看| 91成品人片a无限观看| 中文字幕一区二区三区电影| 秋霞午夜一区二区| 97视频人免费观看| 国产精品视频自在线| 伊人成人开心激情综合网| 精品国产电影一区| 国产欧美日韩亚洲精品| 欧洲亚洲在线视频| 一区二区三区四区视频| 亚洲国产成人91精品| 亚洲欧美国产制服动漫| 最近2019年手机中文字幕| 大胆欧美人体视频| 国产精品久久久久免费a∨| 中文字幕日韩欧美精品在线观看| 久久91亚洲精品中文字幕奶水| 日韩高清免费在线| 国产精品久久久久av| 国产精品99久久久久久白浆小说| 91在线观看免费高清完整版在线观看| 91av视频在线免费观看| 97久久精品人人澡人人爽缅北| 97婷婷大伊香蕉精品视频| 欧美中文字幕视频在线观看| 日韩av不卡电影| 国产成人在线一区| 欧美激情区在线播放| 国产精品jvid在线观看蜜臀| 最近2019年中文视频免费在线观看| 日本不卡视频在线播放| 国产视频亚洲精品| 欧美大全免费观看电视剧大泉洋| 日韩av成人在线| 久久人体大胆视频| 国产成人一区二区三区电影| 九色精品美女在线| 国产精品亚洲激情| 国产精品久久在线观看| 成人h猎奇视频网站| 亚洲精品国偷自产在线99热| 色综合久久久888| 亚洲黄页视频免费观看| 久久久久久久久亚洲| 亚洲成人av中文字幕| 另类视频在线观看| 91社影院在线观看| 91wwwcom在线观看| 成人h片在线播放免费网站| 日本国产欧美一区二区三区| 欧美激情视频在线观看| 成人激情视频免费在线| 国产有码一区二区| 国产偷国产偷亚洲清高网站| 亚洲精品美女在线观看| 日韩视频在线免费观看| 亚洲精品成人久久电影| 91久久久久久国产精品| 国产视频亚洲视频| 亚洲欧美日韩一区二区在线| 91欧美精品成人综合在线观看| 国产精品入口日韩视频大尺度|