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

首頁 > 網(wǎng)站 > 建站經(jīng)驗(yàn) > 正文

詳解PHP的Yii框架中的Controller控制器

2024-08-30 19:06:49
字體:
供稿:網(wǎng)友

控制器是 MVC 模式中的一部分, 是繼承yii/base/Controller類的對象,負(fù)責(zé)處理請求和生成響應(yīng)。 具體來說,控制器從應(yīng)用主體接管控制后會(huì)分析請求數(shù)據(jù)并傳送到模型, 傳送模型結(jié)果到視圖,最后生成輸出響應(yīng)信息。

操作

控制器由 操作 組成,它是執(zhí)行終端用戶請求的最基礎(chǔ)的單元,一個(gè)控制器可有一個(gè)或多個(gè)操作。

如下示例顯示包含兩個(gè)操作view and create 的控制器post:

  1. namespace app/controllers; 
  2.  
  3.   
  4.  
  5. use Yii; 
  6.  
  7. use app/models/Post; 
  8.  
  9. use yii/web/Controller; 
  10.  
  11. use yii/web/NotFoundHttpException; 
  12.  
  13.   
  14.  
  15. class PostController extends Controller 
  16.  
  17.  
  18.  public function actionView($id
  19.  
  20.  { 
  21.  
  22.   $model = Post::findOne($id); 
  23.  
  24.   if ($model === null) { 
  25.  
  26.    throw new NotFoundHttpException; 
  27.  
  28.   } 
  29.  
  30.   
  31.  
  32.   return $this->render('view', [ 
  33.  
  34.    'model' => $model
  35.  
  36.   ]); 
  37.  
  38.  } 
  39.  
  40.   
  41.  
  42.  public function actionCreate() 
  43.  
  44.  { 
  45.  
  46.   $model = new Post; 
  47.  
  48.   
  49.  
  50.   if ($model->load(Yii::$app->request->post()) && $model->save()) { 
  51.  
  52.    return $this->redirect(['view''id' => $model->id]); 
  53.  
  54.   } else { 
  55.  
  56.    return $this->render('create', [ 
  57. //Vevb.com 
  58.     'model' => $model
  59.  
  60.    ]); 
  61.  
  62.   } 
  63.  
  64.  } 
  65.  

在操作 view (定義為 actionView() 方法)中, 代碼首先根據(jù)請求模型ID加載 模型, 如果加載成功,會(huì)渲染名稱為view的視圖并顯示,否則會(huì)拋出一個(gè)異常。

在操作 create (定義為 actionCreate() 方法)中, 代碼相似. 先將請求數(shù)據(jù)填入模型, 然后保存模型,如果兩者都成功,會(huì)跳轉(zhuǎn)到ID為新創(chuàng)建的模型的view操作,否則顯示提供用戶輸入的create視圖。

路由

終端用戶通過所謂的路由尋找到操作,路由是包含以下部分的字符串:

模型ID: 僅存在于控制器屬于非應(yīng)用的模塊;

控制器ID: 同應(yīng)用(或同模塊如果為模塊下的控制器)下唯一標(biāo)識控制器的字符串;

操作ID: 同控制器下唯一標(biāo)識操作的字符串。

路由使用如下格式:

ControllerID/ActionID

如果屬于模塊下的控制器,使用如下格式:

ModuleID/ControllerID/ActionID

如果用戶的請求地址為 http://hostname/index.php?r=site/index, 會(huì)執(zhí)行site 控制器的index 操作。

創(chuàng)建控制器

在yii/web/Application網(wǎng)頁應(yīng)用中,控制器應(yīng)繼承yii/web/Controller 或它的子類。 同理在yii/console/Application控制臺(tái)應(yīng)用中,控制器繼承yii/console/Controller 或它的子類。 如下代碼定義一個(gè) site 控制器:

  1. namespace app/controllers; 
  2.  
  3. use yii/web/Controller; 
  4.  
  5. class SiteController extends Controller 
  6.  
  7.  

控制器ID

通常情況下,控制器用來處理請求有關(guān)的資源類型,因此控制器ID通常為和資源有關(guān)的名詞。 例如使用article作為處理文章的控制器ID。

控制器ID應(yīng)僅包含英文小寫字母、數(shù)字、下劃線、中橫杠和正斜杠, 例如 article 和 post-comment 是真是的控制器ID,article?, PostComment, admin/post不是控制器ID。

控制器Id可包含子目錄前綴,例如 admin/article 代表 yii/base/Application::controllerNamespace控制器命名空間下 admin子目錄中 article 控制器。 子目錄前綴可為英文大小寫字母、數(shù)字、下劃線、正斜杠,其中正斜杠用來區(qū)分多級子目錄(如panels/admin)。

控制器類命名

控制器ID遵循以下規(guī)則衍生控制器類名:

將用正斜杠區(qū)分的每個(gè)單詞第一個(gè)字母轉(zhuǎn)為大寫。注意如果控制器ID包含正斜杠,只將最后的正斜杠后的部分第一個(gè)字母轉(zhuǎn)為大寫;

去掉中橫杠,將正斜杠替換為反斜杠;

增加Controller后綴;

在前面增加yii/base/Application::controllerNamespace控制器命名空間.

下面為一些示例,假設(shè)yii/base/Application::controllerNamespace控制器命名空間為 app/controllers:

article 對應(yīng) app/controllers/ArticleController;

post-comment 對應(yīng) app/controllers/PostCommentController;

admin/post-comment 對應(yīng) app/controllers/admin/PostCommentController;

adminPanels/post-comment 對應(yīng) app/controllers/adminPanels/PostCommentController.

控制器類必須能被 自動(dòng)加載,所以在上面的例子中, 控制器article 類應(yīng)在 別名 為@app/controllers/ArticleController.php的文件中定義, 控制器admin/post2-comment應(yīng)在@app/controllers/admin/Post2CommentController.php文件中。

補(bǔ)充: 最后一個(gè)示例 admin/post2-comment 表示你可以將控制器放在 yii/base/Application::controllerNamespace控制器命名空間下的子目錄中, 在你不想用 模塊 的情況下給控制器分類,這種方式很有用。

控制器部署

可通過配置 yii/base/Application::controllerMap 來強(qiáng)制上述的控制器ID和類名對應(yīng), 通常用在使用第三方不能掌控類名的控制器上。

配置 應(yīng)用配置 中的application configuration,如下所示:

  1.  
  2.  'controllerMap' => [ 
  3.  
  4.   // 用類名申明 "account" 控制器 
  5.  
  6.   'account' => 'app/controllers/UserController'
  7.  
  8. //Vevb.com 
  9.   // 用配置數(shù)組申明 "article" 控制器 
  10.  
  11.   'article' => [ 
  12.  
  13.    'class' => 'app/controllers/PostController'
  14.  
  15.    'enableCsrfValidation' => false, 
  16.  
  17.   ], 
  18.  
  19.  ], 
  20.  

默認(rèn)控制器

每個(gè)應(yīng)用有一個(gè)由yii/base/Application::defaultRoute屬性指定的默認(rèn)控制器; 當(dāng)請求沒有指定 路由,該屬性值作為路由使用。 對于yii/web/Application網(wǎng)頁應(yīng)用,它的值為 'site', 對于 yii/console/Application控制臺(tái)應(yīng)用,它的值為 help, 所以URL為http://hostname/index.php 表示由 site 控制器來處理。

可以在 應(yīng)用配置 中修改默認(rèn)控制器,如下所示:

  1.  
  2.  'defaultRoute' => 'main'
  3.  

創(chuàng)建操作

創(chuàng)建操作可簡單地在控制器類中定義所謂的 操作方法 來完成,操作方法必須是以action開頭的公有方法。 操作方法的返回值會(huì)作為響應(yīng)數(shù)據(jù)發(fā)送給終端用戶,如下代碼定義了兩個(gè)操作 index 和 hello-world:

  1. namespace app/controllers; 
  2.  
  3. use yii/web/Controller; 
  4.  
  5. class SiteController extends Controller 
  6.  
  7.  
  8.  public function actionIndex() 
  9.  
  10.  { 
  11.  
  12.   return $this->render('index'); 
  13.  
  14.  } 
  15.  
  16.   
  17. //Vevb.com 
  18.  public function actionHelloWorld() 
  19.  
  20.  { 
  21.  
  22.   return 'Hello World'
  23.  
  24.  } 
  25.  

操作ID

操作通常是用來執(zhí)行資源的特定操作,因此,操作ID通常為動(dòng)詞,如view, update等。

操作ID應(yīng)僅包含英文小寫字母、數(shù)字、下劃線和中橫杠,操作ID中的中橫杠用來分隔單詞。 例如view, update2, comment-post是真實(shí)的操作ID,view?, Update不是操作ID.

可通過兩種方式創(chuàng)建操作ID,內(nèi)聯(lián)操作和獨(dú)立操作. An inline action is 內(nèi)聯(lián)操作在控制器類中定義為方法;獨(dú)立操作是繼承yii/base/Action或它的子類的類。 內(nèi)聯(lián)操作容易創(chuàng)建,在無需重用的情況下優(yōu)先使用; 獨(dú)立操作相反,主要用于多個(gè)控制器重用,或重構(gòu)為擴(kuò)展。

內(nèi)聯(lián)操作

內(nèi)聯(lián)操作指的是根據(jù)我們剛描述的操作方法。

操作方法的名字是根據(jù)操作ID遵循如下規(guī)則衍生:

將每個(gè)單詞的第一個(gè)字母轉(zhuǎn)為大寫;

去掉中橫杠;

增加action前綴.

例如index 轉(zhuǎn)成 actionIndex, hello-world 轉(zhuǎn)成 actionHelloWorld。

注意: 操作方法的名字大小寫敏感,如果方法名稱為ActionIndex不會(huì)認(rèn)為是操作方法, 所以請求index操作會(huì)返回一個(gè)異常,也要注意操作方法必須是公有的,私有或者受保護(hù)的方法不能定義成內(nèi)聯(lián)操作。

因?yàn)槿菀讋?chuàng)建,內(nèi)聯(lián)操作是最常用的操作,但是如果你計(jì)劃在不同地方重用相同的操作, 或者你想重新分配一個(gè)操作,需要考慮定義它為獨(dú)立操作。

獨(dú)立操作

獨(dú)立操作通過繼承yii/base/Action或它的子類來定義。 例如Yii發(fā)布的yii/web/ViewAction和yii/web/ErrorAction都是獨(dú)立操作。

要使用獨(dú)立操作,需要通過控制器中覆蓋yii/base/Controller::actions()方法在action map中申明,如下例所示:

  1. public function actions() 
  2.  
  3.  
  4.  return [ 
  5.  
  6.   // 用類來申明"error" 操作 
  7.  
  8.   'error' => 'yii/web/ErrorAction'
  9.  
  10.  //Vevb.com 
  11.  
  12.   // 用配置數(shù)組申明 "view" 操作 
  13.  
  14.   'view' => [ 
  15.  
  16.    'class' => 'yii/web/ViewAction'
  17.  
  18.    'viewPrefix' => ''
  19.  
  20.   ], 
  21.  
  22.  ]; 
  23.  

如上所示, actions() 方法返回鍵為操作ID、值為對應(yīng)操作類名或數(shù)組configurations 的數(shù)組。 和內(nèi)聯(lián)操作不同,獨(dú)立操作ID可包含任意字符,只要在actions() 方法中申明.

為創(chuàng)建一個(gè)獨(dú)立操作類,需要繼承yii/base/Action 或它的子類,并實(shí)現(xiàn)公有的名稱為run()的方法, run() 方法的角色和操作方法類似,例如:

  1. namespace app/components; 
  2.  
  3. use yii/base/Action; 
  4.  
  5. class HelloWorldAction extends Action 
  6.  
  7.  
  8.  public function run() 
  9.  
  10.  { 
  11.  
  12.   return "Hello World"
  13.  
  14.  } 
  15.  

操作結(jié)果

操作方法或獨(dú)立操作的run()方法的返回值非常重要,它表示對應(yīng)操作結(jié)果。

返回值可為 響應(yīng) 對象,作為響應(yīng)發(fā)送給終端用戶。

對于yii/web/Application網(wǎng)頁應(yīng)用,返回值可為任意數(shù)據(jù), 它賦值給yii/web/Response::data, 最終轉(zhuǎn)換為字符串來展示響應(yīng)內(nèi)容。

對于yii/console/Application控制臺(tái)應(yīng)用,返回值可為整數(shù), 表示命令行下執(zhí)行的 yii/console/Response::exitStatus 退出狀態(tài)。

在上面的例子中,操作結(jié)果都為字符串,作為響應(yīng)數(shù)據(jù)發(fā)送給終端用戶,下例顯示一個(gè)操作通過 返回響應(yīng)對象(因?yàn)閥ii/web/Controller::redirect()方法返回一個(gè)響應(yīng)對象)可將用戶瀏覽器跳轉(zhuǎn)到新的URL。

public function actionForward()

  1.  
  2.  // 用戶瀏覽器跳轉(zhuǎn)到 http://example.com 
  3.  
  4.  return $this->redirect('http://example.com'); 
  5.  

操作參數(shù)

內(nèi)聯(lián)操作的操作方法和獨(dú)立操作的 run() 方法可以帶參數(shù),稱為操作參數(shù)。 參數(shù)值從請求中獲取,對于yii/web/Application網(wǎng)頁應(yīng)用, 每個(gè)操作參數(shù)的值從$_GET中獲得,參數(shù)名作為鍵; 對于yii/console/Application控制臺(tái)應(yīng)用, 操作參數(shù)對應(yīng)命令行參數(shù)。

如下例,操作view (內(nèi)聯(lián)操作) 申明了兩個(gè)參數(shù) $id 和 $version。

  1. namespace app/controllers; 
  2.  
  3. use yii/web/Controller;  
  4.  
  5. class PostController extends Controller 
  6.  
  7.  
  8.   public function actionView($id$version = null) 
  9.  
  10.   { 
  11.  
  12.     // ... 
  13.  
  14.   } 
  15.  

操作參數(shù)會(huì)被不同的參數(shù)填入,如下所示:

http://hostname/index.php?r=post/view&id=123: $id 會(huì)填入'123',$version 仍為 null 空因?yàn)闆]有version請求參數(shù);

http://hostname/index.php?r=post/view&id=123&version=2: $id 和 $version 分別填入 '123' 和 '2'`;

http://hostname/index.php?r=post/view: 會(huì)拋出yii/web/BadRequestHttpException 異常 因?yàn)檎埱鬀]有提供參數(shù)給必須賦值參數(shù)$id;

http://hostname/index.php?r=post/view&id[]=123: 會(huì)拋出yii/web/BadRequestHttpException 異常 因?yàn)?id 參數(shù)收到數(shù)字值 ['123']而不是字符串.

如果想讓操作參數(shù)接收數(shù)組值,需要指定$id為array,如下所示:

  1. public function actionView(array $id$version = null) 
  2.  
  3.  
  4.  // ... 
  5.  

現(xiàn)在如果請求為 http://hostname/index.php?r=post/view&id[]=123, 參數(shù) $id 會(huì)使用數(shù)組值['123'], 如果請求為http://hostname/index.php?r=post/view&id=123, 參數(shù) $id 會(huì)獲取相同數(shù)組值,因?yàn)闊o類型的'123'會(huì)自動(dòng)轉(zhuǎn)成數(shù)組。

上述例子主要描述網(wǎng)頁應(yīng)用的操作參數(shù),對于控制臺(tái)應(yīng)用,更多詳情請參閱控制臺(tái)命令。

默認(rèn)操作

每個(gè)控制器都有一個(gè)由 yii/base/Controller::defaultAction 屬性指定的默認(rèn)操作, 當(dāng)路由 只包含控制器ID,會(huì)使用所請求的控制器的默認(rèn)操作。

默認(rèn)操作默認(rèn)為 index,如果想修改默認(rèn)操作,只需簡單地在控制器類中覆蓋這個(gè)屬性,如下所示:

  1. namespace app/controllers; 
  2.  
  3. use yii/web/Controller;  
  4.  
  5. class SiteController extends Controller 
  6.  
  7.  
  8.  public $defaultAction = 'home'
  9.  
  10.  public function actionHome() 
  11.  
  12.  { 
  13.  
  14.   return $this->render('home'); 
  15.  
  16.  } 
  17.  

控制器動(dòng)作參數(shù)綁定 

從版本 1.1.4 開始,Yii 提供了對自動(dòng)動(dòng)作參數(shù)綁定的支持。就是說,控制器動(dòng)作可以定義命名的參數(shù),參數(shù)的值將由 Yii 自動(dòng)從 $_GET 填充。

為了詳細(xì)說明此功能,假設(shè)我們需要為 PostController 寫一個(gè) create 動(dòng)作。此動(dòng)作需要兩個(gè)參數(shù):

category:一個(gè)整數(shù),代表帖子(post)要發(fā)表在的那個(gè)分類的ID。

language:一個(gè)字符串,代表帖子所使用的語言代碼。

從 $_GET 中提取參數(shù)時(shí),我們可以不再下面這種無聊的代碼了:

  1. class PostController extends CController 
  2.  
  3.  { 
  4.  
  5.    public function actionCreate() 
  6.  
  7.    { 
  8.  
  9.      if(isset($_GET['category'])) 
  10.  
  11.       $category=(int)$_GET['category']; 
  12.  
  13.      else 
  14.  
  15.       throw new CHttpException(404,'invalid request'); 
  16.  
  17.      if(isset($_GET['language'])) 
  18.  
  19.       $language=$_GET['language']; 
  20.  
  21.      else 
  22.  
  23.       $language='en'
  24.  
  25.   
  26.  
  27.      // ... fun code starts here ... 
  28.  
  29.    } 
  30.  
  31.  } 

現(xiàn)在使用動(dòng)作參數(shù)功能,我們可以更輕松的完成任務(wù):

  1. class PostController extends CController 
  2.  
  3.  
  4.   public function actionCreate($category$language='en'
  5.  
  6.   { 
  7.  
  8.     $category = (int)$category
  9.  
  10.   
  11.  
  12.     echo 'Category:'.$category.'/Language:'.$language
  13.  
  14.   
  15.  
  16.     // ... fun code starts here ... 
  17.  
  18.   } 
  19.  

注意我們在動(dòng)作方法 actionCreate 中添加了兩個(gè)參數(shù)。這些參數(shù)的名字必須和我們想要從 $_GET 中提取的名字一致。當(dāng)用戶沒有在請求中指定 $language 參數(shù)時(shí),這個(gè)參數(shù)會(huì)使用默認(rèn)值 en 。由于 $category 沒有默認(rèn)值,如果用戶沒有在 $_GET 中提供 category 參數(shù),將會(huì)自動(dòng)拋出一個(gè) CHttpException (錯(cuò)誤代碼 400) 異常。

從版本1.1.5開始,Yii已經(jīng)支持?jǐn)?shù)組的動(dòng)作參數(shù)。使用方法如下:

  1. class PostController extends CController 
  2.  
  3.  
  4.   public function actionCreate(array $categories
  5.  
  6.   { 
  7.  
  8.     // Yii will make sure $categories be an array 
  9.  
  10.   } 
  11.  

控制器生命周期

處理一個(gè)請求時(shí),應(yīng)用主體 會(huì)根據(jù)請求路由創(chuàng)建一個(gè)控制器,控制器經(jīng)過以下生命周期來完成請求:

在控制器創(chuàng)建和配置后,yii/base/Controller::init() 方法會(huì)被調(diào)用。

控制器根據(jù)請求操作ID創(chuàng)建一個(gè)操作對象:

如果操作ID沒有指定,會(huì)使用yii/base/Controller::defaultAction默認(rèn)操作ID;

如果在yii/base/Controller::actions()找到操作ID,會(huì)創(chuàng)建一個(gè)獨(dú)立操作;

如果操作ID對應(yīng)操作方法,會(huì)創(chuàng)建一個(gè)內(nèi)聯(lián)操作;

否則會(huì)拋出yii/base/InvalidRouteException異常。

控制器按順序調(diào)用應(yīng)用主體、模塊(如果控制器屬于模塊)、控制器的 beforeAction() 方法;

如果任意一個(gè)調(diào)用返回false,后面未調(diào)用的beforeAction()會(huì)跳過并且操作執(zhí)行會(huì)被取消; action execution will be cancelled.

默認(rèn)情況下每個(gè) beforeAction() 方法會(huì)觸發(fā)一個(gè) beforeAction 事件,在事件中你可以追加事件處理操作;

控制器執(zhí)行操作:

請求數(shù)據(jù)解析和填入到操作參數(shù);

控制器按順序調(diào)用控制器、模塊(如果控制器屬于模塊)、應(yīng)用主體的 afterAction() 方法;

默認(rèn)情況下每個(gè) afterAction() 方法會(huì)觸發(fā)一個(gè) afterAction 事件,在事件中你可以追加事件處理操作;

應(yīng)用主體獲取操作結(jié)果并賦值給響應(yīng).

最佳實(shí)踐

在設(shè)計(jì)良好的應(yīng)用中,控制器很精練,包含的操作代碼簡短; 如果你的控制器很復(fù)雜,通常意味著需要重構(gòu),轉(zhuǎn)移一些代碼到其他類中。

歸納起來,控制器:

可訪問請求 數(shù)據(jù);

可根據(jù)請求數(shù)據(jù)調(diào)用 模型 的方法和其他服務(wù)組件;

可使用視圖構(gòu)造響應(yīng);

不應(yīng)處理應(yīng)被模型處理的請求數(shù)據(jù);

應(yīng)避免嵌入HTML或其他展示代碼,這些代碼最好在 視圖中處理.

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
男人久久天堂| 国产资源第一页| 91视频播放| 人人干人人插| 亚洲国产高清在线| 日韩精品欧美激情| 中文字幕在线中文字幕二区| 国产av一区二区三区传媒| 国产羞羞视频在线观看| 亚洲视频国产精品| 国产精品电影一区二区| 不卡av电影在线播放| 开心快乐六月丁香婷婷| 狠狠干天天爱| 可以免费看的黄色网址| 免费毛片观看| 色呦呦日韩精品| 久久精品国产在热久久| 欧美激情精品久久久六区热门| 欧美在线www| 美女av一区二区三区| 人妻一区二区三区| 亚洲欧美日韩国产| 免费看污黄网站在线观看| 欧美高清hd18日本| 精品国产一区二区三区不卡蜜臂| 久久国产这里只有精品| 男人影院在线观看| 久久精品一区二| 欧美国产偷国产精品三区| 日韩不卡视频一区二区| 国产69精品久久app免费版| 午夜小视频福利在线观看| 国产你懂的在线观看| 日韩国产综合| 国产精品秘入口18禁麻豆免会员| 亚洲区中文字幕| 欧美有码视频| 欧美中文字幕在线视频| 国产一级aa大片毛片| 亚洲国产97在线精品一区| 成人免费av资源| 男人天堂网视频| 日韩成人av电影在线| 亚洲成人av片| 亚洲国产片色| 久久综合久久鬼| 99re热视频这里只精品| 一级全黄裸体片| 欧美—级在线免费片| 91精品国产高清久久久久久91| 福利视频网站导航| √天堂中文www官网| 最近中文字幕在线6| 亚洲精品电影在线一区| 性欧美精品中出| 日韩 欧美一区二区三区| 色综合久久天天综合网| 91在线码无精品| 一区二区三区四区视频免费观看| 五月天婷婷激情网| 97久久夜色精品国产| 激情校园亚洲图片| 情趣视频网站在线免费观看| 欧美三级乱人伦电影| 国产一卡二卡三卡| 欧美日韩国产精选| 欧美一区二区三区四区五区六区| 日韩人妻一区二区三区| 国产高中女学生第一次| 欧美白人猛性xxxxx交69| 日韩在线视频网| 国产在线欧美日韩| 男女啪啪免费体验区| 国产精品日韩高清| 欧美日韩国产综合视频| www.国产自拍| 久久99热这里只有精品国产| 国产精品麻豆va在线播放| 3344国产永久在线观看视频| 国产私人尤物无码不卡| 日韩一区二区免费在线观看| 亚洲国产精品久久久久久6q| 国产成人精品一区二区免费视频| 成人国产精品日本在线| а√天堂官网中文在线| 欧美日韩一区二区免费视频| 国产精品久久国产精品99gif| 亚洲一区二区三区国产| 亚洲人成人无码网www国产| 亚洲一区视频在线播放| 杨幂一区二区国产精品| 石原莉奈一区二区三区高清在线| www.中文字幕久久久| 久久成年人视频| 亚洲男人第一av网站| 性欧美free| 国产欧美在线视频| 中文字幕精品综合| 国产成人无码精品久久久性色| 久久久久久久麻豆| 国产一区二区精彩视频| 久久一二三国产| 日韩精品久久久久| 成人片黄网站色大片免费毛片| 麻豆freexxxx性91精品| 91丨精品丨国产| 午夜在线一区二区| 一级片在线免费看| 玛丽玛丽电影原版免费观看1977| 波多野结衣不卡视频| 日韩精品在线第一页| 精品久久久久久久久久久国产字幕| 一区二区三区国产好的精华液| 亚洲综合色激情五月| 亚洲我射av| 色哟哟欧美精品| 亚洲精品自拍偷拍| 黄色网址在线免费| 无码av天堂一区二区三区| 国产91大片| 国产鲁鲁视频在线观看特色| 狠狠色综合网站久久久久久久| 久久九九精品99国产精品| 黄色av网址在线播放| 免费看污黄网站在线观看| 欧美黑人疯狂性受xxxxx喷水| 大胆国模一区二区三区| 绯色av一区| 欧美视频在线观看一区二区三区| 久久精品视频8| 爱啪导航一精品导航站| 免费网站永久免费观看| 免费日韩一区二区三区| 粗暴蹂躏中文一区二区三区| 亚洲成va人在线观看| 欧美成人免费观看视频| 天堂av2020| 亚洲精品性视频| 国产精品久久久久久久免费大片| 色哟哟亚洲精品一区二区| 日韩欧美极品在线观看| 国产一区二区三区在线免费| 日韩在线视频观看免费| 草草在线观看| 日韩欧美亚洲日产国产| 国产老妇伦国产熟女老妇视频| 69xxxx欧美| 精品国产乱码久久久久久88av| 国产精品一区二区久久精品| www.日韩高清| 91麻豆精品91久久久久久清纯| 99视频在线精品| 亚洲精品日本| 亚洲精品在线网址| 7m精品国产导航在线| 国产麻豆91精品| 99国产一区| 国产精品高潮呻吟AV无码| 女同一区二区三区| 波多野结衣的一区二区三区| 国产91美女视频| 黄色大片网站在线观看| 成年人网站在线| 欧美无乱码久久久免费午夜一区| 亚洲一二三区在线观看| 久草在.com| 人人做人人草| 国产91精品对白在线播放| 日韩av网址大全| 日本欧美精品久久久| av黄色在线免费观看| 337p日本欧洲亚洲大胆精品| 懂色av一区二区| 黄色一级免费| 亚洲a成人v| 性色av无码久久一区二区三区| 亚洲女优在线观看| 国产xxxxx视频| 天天影视天天精品| 欧美激情欧美激情在线五月| 在线看a视频| 久久久久久久久久看片| 欧美日韩在线精品| 少妇光屁股影院| 国产精品三级av| 亚洲色图久久久| 麻豆chinese极品少妇| 日本在线www| 欧美一区二区三区四区五区六区| 久久青草久久| 黑人极品ⅴideos精品欧美棵| 亚洲精品一区二区三区精华液| 好男人看片在线观看免费观看国语| 99在线精品免费视频九九视| 九九免费精品视频| 露脸国产精品自产在线播| 青丝免费观看高清影视| 精品一二三区| 中文字幕日本视频| 国产视频视频一区| 羞羞的视频在线| 中文字幕色一区二区| 欧美日韩国产探花| 日本中文字幕在线免费观看| 久久发布国产伦子伦精品| 国产一级片毛片| 日韩欧美一区二区三区不卡视频| 国产精品久久久久久久久久久久午夜片| 538任你躁在线精品视频网站| 四虎在线看片| www.99热这里只有精品| 成人av.网址在线网站| 亚洲一区中文字幕| 精品久久久久久久久久久国产字幕| 国产白丝精品91爽爽久久| 成人淫片在线看| 欧美高清电影在线看| 日本一区美女| 极品销魂美女一区二区三区| 99热在这里有精品免费| 欧美日本韩国在线| 成人午夜私人影院| 日日骚av一区二区| av资源在线免费观看| ****av在线网毛片| 亚洲一线二线三线久久久| 色播五月综合| 国产一区二区视频在线播放| 国产一区二区网| 色乱码一区二区三区熟女| 久久超碰97人人做人人爱| 成人黄网18免费观看的网站| 污视频免费在线观看网站| 午夜电影久久久| 怡红院在线观看| 亚洲精品国产精华液| 一区二区三区在线高清| 国内精品久久久久影院薰衣草| 波多野结衣av在线免费观看| 亚洲成人毛片| 免费黄色在线看| 你懂的免费在线观看视频网站| 国产午夜精品在线| 亚洲欧美日韩精品一区二区| 欧美性猛交xxxx免费看手交| 国产在线拍揄自揄视频不卡99| 国模冰冰炮一区二区| 欧美一区二区三区男人的天堂| 色免费在线视频| 自拍自偷一区二区三区| 亚洲一区激情| 国产1卡2卡三卡四卡网站| xxx性欧美在线| 欧美videosex性欧美黑吊| 亚洲青青青在线视频| 国产精品高清网站| 久久久久久久久久久亚洲| 四虎精品一区二区免费| 日本中文字幕久久看| 欧美日韩视频在线第一区| 成人免费观看cn| 亚洲一区二区三区在线视频| 91免费公开视频| 日韩在线第一区| 久久综合影音| bdsm精品捆绑chinese女| 同性gay免费| 久久精品丝袜高跟鞋| 欧美日韩一区二区在线播放| 久久精品嫩草影院| 日韩在线影视| 日韩亚洲欧美在线观看| 精品一区二区三区五区六区| 国产日韩欧美中文在线| 五月婷婷综合在线观看| 欧美视频亚洲色图| 中文字幕99| 国产成人在线视频| 亚州精品天堂中文字幕| 亚洲欧美日韩综合国产aⅴ| 男女超爽视频免费播放| 国产欧美一区二| 777午夜精品视频在线播放| 精品一区二区三区在线观看l| 成人影院天天5g天天爽无毒影院| 久久亚洲国产成人精品无码区| 天堂久久久久va久久久久| 日韩少妇高潮抽搐| 久久久久在线观看| 国产精品亚洲综合一区在线观看| 污视频在线观看免费| 亚洲另类中文字| 亚洲视频碰碰| 国产精品毛片a∨一区二区三区|国| 手机在线视频你懂的| 日本在线视频www| 日韩精品久久理论片| 成人在线视频免费播放| 成人aa视频在线观看| 国产精品久久久av久久久| www成人在线视频| 欧美精品国产精品久久久| 国产精品a成v人在线播放| 国产精品高清在线| 东热在线免费视频| 国精品**一区二区三区在线蜜桃| 欧美日韩在线播放视频| 久久精品视频国产| 国产短剧电视剧免费观看| 97涩涩爰在线观看亚洲| 免费av福利| 久久一区二区三区超碰国产精品| 欧美一区视久久| 亚洲精品免费在线视频| 欧美激情二区三区| 日韩欧美视频一区二区| 国产日产精品一区二区三区四区| 91制片厂在线| 天天做天天摸天天爽天天爱| 国产一区二区在线观看免费播放| 国产永久免费高清在线观看| 午夜精品aaa| 国产精品高潮呻吟av| 北岛玲heyzo一区二区| 欧美123区| 天天在线视频色| 91精品国产91久久久久久一区二区|