成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > Laravel核心解讀之異常處理的實(shí)踐過程

Laravel核心解讀之異常處理的實(shí)踐過程

熱門標(biāo)簽:地圖標(biāo)注風(fēng)向標(biāo) 安陽自動外呼系統(tǒng)價格是多少 臨沂智能電銷機(jī)器人軟件 電梯外呼線路板維修視頻 浙江外呼電話系統(tǒng)軟件 銀川ai電話機(jī)器人 上海公司外呼系統(tǒng)線路 十堰ai電話機(jī)器人效果怎么樣 芒果電銷機(jī)器人

前言

異常處理是編程中十分重要但也最容易被人忽視的語言特性,它為開發(fā)者提供了處理程序運(yùn)行時錯誤的機(jī)制,對于程序設(shè)計來說正確的異常處理能夠防止泄露程序自身細(xì)節(jié)給用戶,給開發(fā)者提供完整的錯誤回溯堆棧,同時也能提高程序的健壯性。

這篇文章我們來簡單梳理一下Laravel中提供的異常處理能力,然后講一些在開發(fā)中使用異常處理的實(shí)踐,如何使用自定義異常、如何擴(kuò)展Laravel的異常處理能力。

下面話不多說了,來一起看看詳細(xì)的介紹吧

注冊異常Handler

這里又要回到我們說過很多次的Kernel處理請求前的bootstrap階段,在bootstrap階段的Illuminate\Foundation\Bootstrap\HandleExceptions 部分中Laravel設(shè)置了系統(tǒng)異常處理行為并注冊了全局的異常處理器:

class HandleExceptions
{
 public function bootstrap(Application $app)
 {
  $this->app = $app;

  error_reporting(-1);

  set_error_handler([$this, 'handleError']);

  set_exception_handler([$this, 'handleException']);

  register_shutdown_function([$this, 'handleShutdown']);

  if (! $app->environment('testing')) {
   ini_set('display_errors', 'Off');
  }
 }
 
 
 public function handleError($level, $message, $file = '', $line = 0, $context = [])
 {
  if (error_reporting()  $level) {
   throw new ErrorException($message, 0, $level, $file, $line);
  }
 }
}

set_exception_handler([$this, 'handleException'])將HandleExceptions的handleException方法注冊為程序的全局處理器方法:

public function handleException($e)
{
 if (! $e instanceof Exception) {
  $e = new FatalThrowableError($e);
 }

 $this->getExceptionHandler()->report($e);

 if ($this->app->runningInConsole()) {
  $this->renderForConsole($e);
 } else {
  $this->renderHttpResponse($e);
 }
}

protected function getExceptionHandler()
{
 return $this->app->make(ExceptionHandler::class);
}

// 渲染CLI請求的異常響應(yīng)
protected function renderForConsole(Exception $e)
{
 $this->getExceptionHandler()->renderForConsole(new ConsoleOutput, $e);
}

// 渲染HTTP請求的異常響應(yīng)
protected function renderHttpResponse(Exception $e)
{
 $this->getExceptionHandler()->render($this->app['request'], $e)->send();
}

在處理器里主要通過ExceptionHandler的report方法上報異常、這里是記錄異常到storage/laravel.log文件中,然后根據(jù)請求類型渲染異常的響應(yīng)生成輸出給到客戶端。這里的ExceptionHandler就是\App\Exceptions\Handler類的實(shí)例,它是在項目最開始注冊到服務(wù)容器中的:

// bootstrap/app.php

/*
|--------------------------------------------------------------------------
| Create The Application
|--------------------------------------------------------------------------
*/

$app = new Illuminate\Foundation\Application(
 realpath(__DIR__.'/../')
);

/*
|--------------------------------------------------------------------------
| Bind Important Interfaces
|--------------------------------------------------------------------------
*/
......

$app->singleton(
 Illuminate\Contracts\Debug\ExceptionHandler::class,
 App\Exceptions\Handler::class
);

這里再順便說一下set_error_handler函數(shù),它的作用是注冊錯誤處理器函數(shù),因?yàn)樵谝恍┠甏眠h(yuǎn)的代碼或者類庫中大多是采用PHP那件函數(shù)trigger_error函數(shù)來拋出錯誤的,異常處理器只能處理Exception不能處理Error,所以為了能夠兼容老類庫通常都會使用set_error_handler注冊全局的錯誤處理器方法,在方法中捕獲到錯誤后將錯誤轉(zhuǎn)化成異常再重新拋出,這樣項目中所有的代碼沒有被正確執(zhí)行時都能拋出異常實(shí)例了。

/**
 * Convert PHP errors to ErrorException instances.
 *
 * @param int $level
 * @param string $message
 * @param string $file
 * @param int $line
 * @param array $context
 * @return void
 *
 * @throws \ErrorException
 */
public function handleError($level, $message, $file = '', $line = 0, $context = [])
{
 if (error_reporting()  $level) {
  throw new ErrorException($message, 0, $level, $file, $line);
 }
}

常用的Laravel異常實(shí)例

Laravel中針對常見的程序異常情況拋出了相應(yīng)的異常實(shí)例,這讓開發(fā)者能夠捕獲這些運(yùn)行時異常并根據(jù)自己的需要來做后續(xù)處理(比如:在catch中調(diào)用另外一個補(bǔ)救方法、記錄異常到日志文件、發(fā)送報警郵件、短信)

在這里我列一些開發(fā)中常遇到異常,并說明他們是在什么情況下被拋出的,平時編碼中一定要注意在程序里捕獲這些異常做好異常處理才能讓程序更健壯。

  • Illuminate\Database\QueryException Laravel中執(zhí)行SQL語句發(fā)生錯誤時會拋出此異常,它也是使用率最高的異常,用來捕獲SQL執(zhí)行錯誤,比方執(zhí)行Update語句時很多人喜歡判斷SQL執(zhí)行后判斷被修改的行數(shù)來判斷UPDATE是否成功,但有的情景里執(zhí)行的UPDATE語句并沒有修改記錄值,這種情況就沒法通過被修改函數(shù)來判斷UPDATE是否成功了,另外在事務(wù)執(zhí)行中如果捕獲到QueryException 可以在catch代碼塊中回滾事務(wù)。
  • Illuminate\Database\Eloquent\ModelNotFoundException 通過模型的findOrFail和firstOrFail方法獲取單條記錄時如果沒有找到會拋出這個異常(find和first找不到數(shù)據(jù)時會返回NULL)。
  • Illuminate\Validation\ValidationException 請求未通過Laravel的FormValidator驗(yàn)證時會拋出此異常。
  • Illuminate\Auth\Access\AuthorizationException 用戶請求未通過Laravel的策略(Policy)驗(yàn)證時拋出此異常
  • Symfony\Component\Routing\Exception\MethodNotAllowedException 請求路由時HTTP Method不正確
  • Illuminate\Http\Exceptions\HttpResponseException Laravel的處理HTTP請求不成功時拋出此異常

擴(kuò)展Laravel的異常處理器

上面說了Laravel把\App\Exceptions\Handler 注冊成功了全局的異常處理器,代碼中沒有被catch到的異常,最后都會被\App\Exceptions\Handler捕獲到,處理器先上報異常記錄到日志文件里然后渲染異常響應(yīng)再發(fā)送響應(yīng)給客戶端。但是自帶的異常處理器的方法并不好用,很多時候我們想把異常上報到郵件或者是錯誤日志系統(tǒng)中,下面的例子是將異常上報到Sentry系統(tǒng)中,Sentry是一個錯誤收集服務(wù)非常好用:

public function report(Exception $exception)
{
 if (app()->bound('sentry')  $this->shouldReport($exception)) {
  app('sentry')->captureException($exception);
 }

 parent::report($exception);
}

還有默認(rèn)的渲染方法在表單驗(yàn)證時生成響應(yīng)的JSON格式往往跟我們項目里統(tǒng)一的JOSN格式不一樣這就需要我們自定義渲染方法的行為。

public function render($request, Exception $exception)
{
 //如果客戶端預(yù)期的是JSON響應(yīng), 在API請求未通過Validator驗(yàn)證拋出ValidationException后
 //這里來定制返回給客戶端的響應(yīng).
 if ($exception instanceof ValidationException  $request->expectsJson()) {
  return $this->error(422, $exception->errors());
 }

 if ($exception instanceof ModelNotFoundException  $request->expectsJson()) {
  //捕獲路由模型綁定在數(shù)據(jù)庫中找不到模型后拋出的NotFoundHttpException
  return $this->error(424, 'resource not found.');
 }


 if ($exception instanceof AuthorizationException) {
  //捕獲不符合權(quán)限時拋出的 AuthorizationException
  return $this->error(403, "Permission does not exist.");
 }

 return parent::render($request, $exception);
}

自定義后,在請求未通過FormValidator驗(yàn)證時會拋出ValidationException, 之后異常處理器捕獲到異常后會把錯誤提示格式化為項目統(tǒng)一的JSON響應(yīng)格式并輸出給客戶端。這樣在我們的控制器中就完全省略了判斷表單驗(yàn)證是否通過如果不通過再輸出錯誤響應(yīng)給客戶端的邏輯了,將這部分邏輯交給了統(tǒng)一的異常處理器來執(zhí)行能讓控制器方法瘦身不少。

使用自定義異常

這部分內(nèi)容其實(shí)不是針對Laravel框架自定義異常,在任何項目中都可以應(yīng)用我這里說的自定義異常。

我見過很多人在Repository或者Service類的方法中會根據(jù)不同錯誤返回不同的數(shù)組,里面包含著響應(yīng)的錯誤碼和錯誤信息,這么做當(dāng)然是可以滿足開發(fā)需求的,但是并不能記錄發(fā)生異常時的應(yīng)用的運(yùn)行時上下文,發(fā)生錯誤時沒辦法記錄到上下文信息就非常不利于開發(fā)者進(jìn)行問題定位。

下面的是一個自定義的異常類

namespace App\Exceptions\;

use RuntimeException;
use Throwable;

class UserManageException extends RuntimeException
{
 /**
  * The primitive arguments that triggered this exception
  *
  * @var array
  */
 public $primitives;
 /**
  * QueueManageException constructor.
  * @param array $primitives
  * @param string $message
  * @param int $code
  * @param Throwable|null $previous
  */
 public function __construct(array $primitives, $message = "", $code = 0, Throwable $previous = null)
 {
  parent::__construct($message, $code, $previous);
  $this->primitives = $primitives;
 }

 /**
  * get the primitive arguments that triggered this exception
  */
 public function getPrimitives()
 {
  return $this->primitives;
 }
}

定義完異常類我們就能在代碼邏輯中拋出異常實(shí)例了

class UserRepository
{
 
 public function updateUserFavorites(User $user, $favoriteData)
 {
  ......
  if (!$executionOne) {
   throw new UserManageException(func_get_args(), 'Update user favorites error', '501');
  }
  
  ......
  if (!$executionTwo) {
   throw new UserManageException(func_get_args(), 'Another Error', '502');
  }
  
  return true;
 }
}

class UserController extends ...
{
 public function updateFavorites(User $user, Request $request)
 {
  .......
  $favoriteData = $request->input('favorites');
  try {
   $this->userRepo->updateUserFavorites($user, $favoritesData);
  } catch (UserManageException $ex) {
   .......
  }
 }
}

除了上面Repository列出的情況更多的時候我們是在捕獲到上面列舉的通用異常后在catch代碼塊中拋出與業(yè)務(wù)相關(guān)的更細(xì)化的異常實(shí)例方便開發(fā)者定位問題,我們將上面的updateUserFavorites 按照這種策略修改一下

public function updateUserFavorites(User $user, $favoriteData)
{
 try {
  // database execution
  
  // database execution
 } catch (QueryException $queryException) {
  throw new UserManageException(func_get_args(), 'Error Message', '501' , $queryException);
 }

 return true;
}

在上面定義UserMangeException類的時候第四個參數(shù)$previous是一個實(shí)現(xiàn)了Throwable接口類實(shí)例,在這種情景下我們因?yàn)椴东@到了QueryException的異常實(shí)例而拋出了UserManagerException的實(shí)例,然后通過這個參數(shù)將QueryException實(shí)例傳遞給PHP異常的堆棧,這提供給我們回溯整個異常的能力來獲取更多上下文信息,而不是僅僅只是當(dāng)前拋出的異常實(shí)例的上下文信息, 在錯誤收集系統(tǒng)可以使用類似下面的代碼來獲取所有異常的信息。

while($e instanceof \Exception) {
 echo $e->getMessage();
 $e = $e->getPrevious();
}

異常處理是PHP非常重要但又容易讓開發(fā)者忽略的功能,這篇文章簡單解釋了Laravel內(nèi)部異常處理的機(jī)制以及擴(kuò)展Laravel異常處理的方式方法。更多的篇幅著重分享了一些異常處理的編程實(shí)踐,這些正是我希望每個讀者都能看明白并實(shí)踐下去的一些編程習(xí)慣,包括之前分享的Interface的應(yīng)用也是一樣。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

您可能感興趣的文章:
  • 如何重寫Laravel異常處理類詳解
  • Laravel如何實(shí)現(xiàn)適合Api的異常處理響應(yīng)格式
  • Laravel 修改驗(yàn)證異常的響應(yīng)格式實(shí)例代碼詳解
  • laravel框架使用FormRequest進(jìn)行表單驗(yàn)證,驗(yàn)證異常返回JSON操作示例
  • Laravel 解決composer相關(guān)操作提示php相關(guān)異常的問題
  • Laravel 5.5 異常處理 & 錯誤日志的解決
  • 解決laravel 表單提交-POST 異常的問題
  • laravel框架 api自定義全局異常處理方法
  • 淺談Laravel中使用Slack進(jìn)行異常通知

標(biāo)簽:常州 遂寧 寧夏 徐州 荊門 武威 吐魯番 遵義

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Laravel核心解讀之異常處理的實(shí)踐過程》,本文關(guān)鍵詞  Laravel,核心,解讀,之,異常,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Laravel核心解讀之異常處理的實(shí)踐過程》相關(guān)的同類信息!
  • 本頁收集關(guān)于Laravel核心解讀之異常處理的實(shí)踐過程的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    写真片福利在线播放| 久久精品在线观看| 福利在线视频网站| 99riav国产精品| 日韩欧美国产一区二区三区| 一区在线视频观看| 国产av天堂无码一区二区三区| 免费黄色小视频在线观看| 国产日韩欧美一二三区| 亚洲乱码国产乱码精品天美传媒| 亚洲精品电影久久久| 伊人久久久大香线蕉综合直播| 国产精品久久久久久久久久久久久| 国产欧美日韩综合精品一区二区三区| 国产精品一区二区美女视频免费看| 欧美蜜桃一区二区三区| 亚洲第一区第二区第三区| 成人国产激情在线| 亚洲理论在线| a级片在线免费看| 亚洲熟妇无码久久精品| 国产欧洲在线| 懂色av噜噜一区二区三区av| 在线观看免费视频a| 午夜av免费看| 妞干网在线免费视频| 国产一区二区视频免费| 亚洲第一色视频| 欧美精品在线极品| 霍思燕三级露全乳照| 亚洲黄色网址大全| 一女二男一黄一片| 欧美成人免费观看| 国产精品黄网站| 日本一卡二卡在线| 中文字幕2020第一页| 懂色中文一区二区在线播放| 国产欧美日韩中文字幕在线| 久久av在线| 黄色精品在线看| 欧美做受xxxxxⅹ性视频| 日韩av电影资源网| 国产又粗又猛又爽又黄91精品| 国产欧美一区二区精品性色超碰| 日本女优北野望在线电影| 亚洲免费视频一区二区三区| 不卡高清视频专区| 日韩大陆欧美高清视频区| 在线不卡中文字幕| 日韩男女性生活视频| 日本久久综合网| 亚洲一区二区三区精品动漫| 国产精品无码永久免费888| 美女视频黄a视频全免费观看| 亚洲另类图片另类电影| 国产美女直播视频一区| 欧美日韩亚洲国产成人| 免费 成 人 黄 色| 欧美视频一二三| 欧美老肥妇做.爰bbww| 3d动漫精品啪啪一区二区竹菊| 亚洲精品视频免费看| 天天躁夜夜躁狠狠是什么心态| p色视频免费在线观看| 欧美精品成人久久| 中文字幕一区二区三区在线不卡| 中文字幕亚洲欧美日韩高清| 98精品视频| 久久免费视频在线观看| 在线视频中文字幕久| 亚洲国产精品人久久电影| 欧美一区二区视频在线观看2022| 欧美野外多人交3| h网在线观看| 国产成人羞羞电影网站在线观看| 蜜桃av.网站在线观看| 亚洲第一区视频| 蜜臀av无码一区二区三区| 亚洲人成影院在线观看| 色乱码一区二区三区熟女| 538在线观看| 最新中文字幕第一页| 国偷自产av一区二区三区| 日韩欧美一中文字暮专区| 欧美激情一区二区在线| 欧美日韩国产一区二区在线观看| 欧美在线视频一区二区三区| 国产在线拍揄自揄拍无码| 91精品国产全国免费观看| 精品成人国产在线观看男人呻吟| 日本在线播放一区二区三区| 污污视频在线免费看| 在线黄色的网站| 日韩av大全| 亚洲一区视频在线播放| 综合久久十次| 来个黄色网址| 青青草视频在线免费观看| 天天爽夜夜爽人人爽| 国产精品亚洲欧美在线播放| 一区二区免费看| 欧美aaa一级| 久久97久久97精品免视看秋霞| 亚洲一区二区三区在线视频| 双性尿奴穿贞c带憋尿| 美州a亚洲一视本频v色道| 在线观看一区二区精品视频| 国产91久久久久蜜臀青青天草二| 成人av在线资源网站| 久久久久久久久久综合| 亚州欧美色图| 黄免费在线观看| 国产福利资源| 裸体丰满少妇做受久久99精品| 国产自产在线视频一区| 欧美一区国产在线| 欧美精品video| 九色视频一区| 色老汉av一区二区三区| 亚洲精品日日夜夜| 日韩视频在线播放| 亚洲欧美另类小说视频| 欧美一卡二卡三卡| aa一级黄色片| 领导边摸边吃奶边做爽在线观看| 日韩一级大片在线| 国精一区二区| 亚洲精品成人自拍| 揉丰满老妇老女人的毛片| 国产又粗又猛又爽又黄的视频一| 就爱干草视频| 日本888xxxx| 成人观看高清在线观看免费| 国产三区四区在线观看| 国产制服91一区二区三区制服| 无码日本精品xxxxxxxxx| 美国十次了思思久久精品导航| 亚洲国产精品www| 天堂视频免费看| 中文字幕综合一区| a4yy在线播放免费观看视频| 成熟人妻av无码专区| 天堂av在线免费| 成人在线视频免费播放| 欧美在线网址| 男人天堂资源网| 男女性高潮免费网站| 男人的天堂免费| 一级片avav网址| jlzzjlzz亚洲女人18| 午夜精品久久久久久久四虎美女版| 中文字幕日韩精品在线观看| 国产精品不卡视频| 污视频在线观看免费网站| 51精品在线观看| 精品一区久久久久久| 国产在线视精品麻豆| 一道精品视频一区二区三区图片| 国产精品全国免费观看高清| 黄色av免费在线观看| 三级全黄的视频在线观看| 免费视频二区| 性8sex亚洲区入口| 国产精品免费看一区二区三区| 国产a区久久久| 国产一区二区三区久久悠悠色av| 一区二区中文| 一区二区视频免费在线观看| 色琪琪一区二区三区亚洲区| 亚洲精品国产一区二区精华液| 国产麻豆视频一区二区| 动漫精品一区一码二码三码四码| 丰满的护士2在线观看高清| 亚洲大型综合色站| 亚洲欧美激情国产综合久久久| 麻豆美女网站| 亚洲专区欧美专区| 欧美资源一区| 日本一区二区在线视频| 国产精品久久国产精麻豆96堂| 99热在线观看免费| 日韩极品少妇| 日韩欧美视频一区二区三区| 国产一级免费黄色片| 毛片免费视频| 日韩激情免费| 少妇一级淫片免费看| 国产精品久久一区主播| 中文字幕日韩综合av| 久久精品观看| 精品福利影视| 国产精品免费99久久久| 国产精品一区不卡| 欧美在线看片a免费观看| 男女羞羞免费视频| 欧美欧美一区二区| 国产传媒视频在线观看| 国产伦子伦对白在线播放观看| 初尝黑人巨炮波多野结衣电影| jizzjizzjizz亚洲| 又黄又湿又爽又免费又色| 999视频在线观看| 特级黄色片视频| 搡女人真爽免费午夜网站| 国产麻豆一区二区三区精品| 成人黄色网页| 亚洲尤物在线视频观看| 综合图区亚洲| 国产成人精品无码播放| 中文字幕手机在线视频| 手机看片1024国产| 国产精品成人观看视频免费| 国内精品久久久久久不卡影院| 欧美精品久久久久久久免费| 国产成人精品视频免费看| 欧美巨胸大乳hitomi| 国产精品视频白浆免费视频| 青青精品视频播放| 亚洲综合欧美综合| 欧美精品自拍偷拍动漫精品| 欧美一级二级三级九九九| 亚洲综合视频网站| 亚洲国产精品成人久久蜜臀| 国产成人无码精品久久久性色| 国产精品久久久久久户外露出| 亚洲综合中文字幕在线| 欧美美女一区二区在线观看| 精品卡一卡二卡三卡四在线| 精产国品一区二区三区| 日本精品久久久久中文| 一级黄色片免费| 综合网日日天干夜夜久久| 激情亚洲综合网| 久热在线视频精品网站| 性欧美丰满熟妇xxxx性久久久| 免费观看在线综合| 久久久久久五月天久久久久久久久| 一区二区欧美国产| 日本 片 成人 在线| 免看一级a毛片一片成人不卡| 丝袜国产在线| 一本色道久久综合精品婷婷| 国产在线观看a视频| 国产精品视频一区二区三区四区五区| 尤物网在线观看| 日韩精品中文字幕久久臀| 人妻少妇精品无码专区二区| 香蕉av在线| 亚洲一区二区国产| 蜜桃成人免费视频| yw.尤物在线精品视频| 亚洲第一在线视频| 狠狠色噜噜狠狠狠狠色吗综合| 色偷偷福利视频| 亚洲一二三区视频| 99久久人妻无码中文字幕系列| 久本草在线中文字幕亚洲| 亚洲va国产va天堂va久久| 欧美日韩亚洲一区二区三区在线| 性欧美xxxx大乳国产app| 欧美一区二区三区电影在线观看| 视频一区二区三区国产| 69堂免费视频| 中文字幕视频一区二区在线有码| 9色在线视频网站| 韩国三级hd中文字幕有哪些| 欧美激情20| 全彩无遮拦全彩口工漫画全彩| 伊人久久婷婷| 国产精品一区专区欧美日韩| 亚洲xxxxx电影| 六月婷婷中文字幕| 香蕉久久久久久久av网站| 国产伦精品一区二区三区妓女下载| 中文在线a在线| 超碰在线图片| 欧美aa在线| 嫩草视频在线观看| 亚洲一二区视频| 69视频免费在线观看| 国产亚洲成av人片在线观看桃| www.狠狠| 久久精品在线免费观看| 我和岳m愉情xxxⅹ视频| 日韩—二三区免费观看av| 欧美24videosex性欧美| 国产成人精品亚洲777人妖| 亚洲av无码成人精品国产| 五月婷婷六月综合| 成人午夜免费视频| 丁香六月激情网| 99中文视频在线| 中文字幕一区二| 日本高清视频网站www| 欧美性受xxxx黑人xxxx| 你懂的在线网址| 日精品一区二区三区| 三级黄色片免费看| 国产一级免费观看| 99精品老司机免费视频| 成人午夜免费影院| 国产乱码精品一区二区三区五月婷| 日本一区二区精品视频| 成人黄动漫网站| 欧美日产国产精品| 国产一区二区三区四区五区传媒| 91在线视频观看免费| 国产黄色一级网站| 欧美电影在线免费观看| 亚洲国产欧美日韩精品| 99热国内精品永久免费观看| 电影eeuss影院www| 国产美女精品| 最新国产在线视频| 国产又大又硬又粗| 亚洲一二三不卡| 男女啪啪999亚洲精品| 国产精品你懂的在线观看| 五月天中文字幕在线| 亚洲精选一区二区三区| sese综合| 欧美视频专区一二在线观看| 天堂一区在线观看| 5g成人永久免费影院| 嫩草av久久伊人妇女超级a| 亚洲成人黄色在线| 日韩欧美精品电影| 国产视频一二区|