五月天激情丁香,国产精品2019,国产成人精品亚洲2020,国产精品免费视频一区二区三区,开心久久婷婷综合中文字幕,天堂视频在线观看免费完整版

動態路由

動態路由就是把 url 的請求優雅地對應到你想要執行的操作方法。 EasySwoole 的動態路由是基于 FastRoute 實現,與其路由規則保持一致。

示例代碼

新建文件 App\HttpController\Router.php,(從框架 3.4.x 版本開始,用戶可能不需要新建此文件。如果用戶在安裝時選擇了釋放 Router.php 則不必新建,如果沒有,請自行新建):

<?php
namespace App\HttpController;

use EasySwoole\Component\Context\ContextManager;
use EasySwoole\Http\AbstractInterface\AbstractRouter;
use EasySwoole\Http\Request;
use EasySwoole\Http\Response;
use FastRoute\RouteCollector;

class Router extends AbstractRouter
{
    function initialize(RouteCollector $routeCollector)
    {
        $routeCollector->get('/user', '/user');

        $routeCollector->get('/user1', '/User/user1');

        $routeCollector->get('/rpc', '/Rpc/index');

        $routeCollector->get('/', function (Request $request, Response $response) {
            $response->write('this is router home');
            return false; // 不再往下請求,結束此次響應
        });
        // $routeCollector->get('/', '/index');

        $routeCollector->get('/test', function (Request $request, Response $response) {
            $response->write('this is router test.');
            return '/child';
        });
        $routeCollector->get('/child', function (Request $request, Response $response) {
            $response->write('this is router child.');
            return false; // 不再往下請求,結束此次響應
        });

        $routeCollector->get('/mtest1', '/a/b/c/d/index/index');
        $routeCollector->get('/mtest2', '/A/B/C/D/Index/index');

        // 從 `easyswoole/http 2.x 版本開始,綁定的參數將由框架內部進行組裝到框架的 `Context(上下文)` 數據之中,具體使用請看下文。
        $routeCollector->get('/user/{id:\d+}', function (Request $request, Response $response) {
            // 獲取 id 參數
            $context = ContextManager::getInstance()->get(Router::PARSE_PARAMS_CONTEXT_KEY);
            $id = $context['id'];
            $response->write("this is router user, id is {$id}");
            return false; // 不再往下請求,結束此次響應
        });
    }
}

創建路由

EasySwoole 路由接受一個 URI 和一個 Handler(這個 Handler 可以是一個 閉包callback 或者一個 字符串string),提供了一個簡單優雅的方法來定義路由和行為,而不需要復雜的路由配置文件:

<?php
namespace App\HttpController;

use EasySwoole\Http\AbstractInterface\AbstractRouter;
use EasySwoole\Http\Request;
use EasySwoole\Http\Response;
use FastRoute\RouteCollector;

class Router extends AbstractRouter
{
    function initialize(RouteCollector $routeCollector)
    {
        $routeCollector->get('/greeting', function (Request $request, Response $response) {
            $response->write('Hello World');
            return false;
        });
    }
}

從上面可以看到,創建匹配 HTTP 請求方法 GET 的路由的方法很簡單,如下:

$routeCollector->get($uri, $handler);
  • $uri字符串string 格式
  • $handler閉包callback 或者 字符串string 格式,當為 字符串 格式時則表示是與控制類的 action 相關聯。

針對上述方法的參數的含義說明如下:

  • $handler/xxx 時,則對應關聯執行 App\HttpController\Index.php 類的 xxx() 方法。
  • $handler/xxx/xxx/xxx/xxx 或者 /Xxx/Xxx/Xxx/xxx 時,二者其實等價,都對應關聯執行 App\HttpController\Xxx\Xxx\Xxx.php 類的 xxx() 方法。
  • $handler/xxx/xxx/xxx/Xxx 或者 /Xxx/Xxx/Xxx/Xxx 時,二者也等價,都對應關聯執行 App\HttpController\Xxx\Xxx\Xxx.php 類的 Xxx() 方法。

綜上所述,其實 $handler 中最后一個 / 后的名稱一定為控制器類的 action 名稱 (且不會轉換大小寫),前面的則為對應控制器所在命名空間及路徑,控制器名稱及文件夾名稱請務必以 大寫字母 開頭,否則路由將不能匹配到對應的執行方法。而對于 $uri 則沒有特殊要求。$handler 指定路由匹配成功后需要處理的方法,可以傳入一個閉包,當傳入閉包時一定要 注意處理完成之后要處理結束響應,否則請求會繼續 Dispatch 尋找對應的控制器來處理,當然如果利用這一點,也可以對某些請求進行處理后再交給控制器執行邏輯。

用戶在新建控制器類和文件夾時,請使用 大駝峰法 命名。如果使用回調函數方式處理路由,return false; 代表不繼續往下請求。

默認路由文件

默認路由文件位于 App\HttpController 目錄的 Router.php 文件。在 Router.php 文件可以定義我們常用的路由。對于大多數應用程序,也都是在 Router.php 文件定義路由。例如,你可以在瀏覽器中輸入 http://example.com/user 來訪問以下路由:

<?php
namespace App\HttpController;

use EasySwoole\Http\AbstractInterface\AbstractRouter;
use FastRoute\RouteCollector;

class Router extends AbstractRouter
{
    function initialize(RouteCollector $routeCollector)
    {
        // 下面定義的路由將 /user URI 與 App\HttpController\User 類 的 index() action 相關聯
        $routeCollector->get('/user', '/User/index');
    }
}

添加額外的路由文件

上述已經提到 EasySwoole 框架默認的路由文件為 App\HttpController 目錄的 Router.php 文件。當我們想要添加額外的路由文件時,我們可以在 App 目錄新建一個目錄 Route 用來統一存放額外的路由,然后在 App\HttpController 目錄的 Router.php 文件中進行注冊。如下:

App\Route 目錄(前提:已自行創建好此目錄),新增 ApiRouter.php 文件,該文件內容如下:

<?php
namespace App\Route;

use FastRoute\RouteCollector;

class ApiRouter
{
    public function initialize(RouteCollector &$routeCollector)
    {
        $routeCollector->addGroup('/api/v1/user', function (RouteCollector $routeCollector) {
            $routeCollector->post('/create', '/Api/User/create');
            $routeCollector->post('/delete/{id:\d+}', '/Api/User/delete');
            $routeCollector->post('/update/{id:\d+}', '/Api/User/update');
            $routeCollector->post('/query', '/Api/User/query');
        });
    }
}

App\HttpController 目錄的 Router.php 文件中進行注冊額外的路由:

<?php
namespace App\HttpController;

use App\Route\ApiRouter;
use EasySwoole\Http\AbstractInterface\AbstractRouter;
use FastRoute\RouteCollector;

class Router extends AbstractRouter
{
    function initialize(RouteCollector $routeCollector)
    {
        // 注冊額外的路由
        (new ApiRouter())->initialize($routeCollector);
    }
}

依賴注入

在路由的回調方法中,框架會自動將當前的 HTTP 請求和 HTTP 響應注入依賴到你的路由回調中:

<?php
namespace App\HttpController;

use EasySwoole\Http\AbstractInterface\AbstractRouter;
use EasySwoole\Http\Request;
use EasySwoole\Http\Response;
use FastRoute\RouteCollector;

class Router extends AbstractRouter
{
    function initialize(RouteCollector $routeCollector)
    {
        $routeCollector->get('/greeting', function (Request $request, Response $response) {
            $response->write('Hello World');
            return false;
        });
    }
}

注入的 HTTP 請求對象可用來讀取請求參數等,注入的 HTTP 響應對象可用來指定返回給客戶端的響應內容。

匹配 HTTP 方法

路由器允許你注冊能響應任何 HTTP 請求的路由

$routeCollector->get($uri, $handler);
// 等價于
$routeCollector->addRoute('GET', $uri, $handler);

$routeCollector->post($uri, $handler);
// 等價于
$routeCollector->addRoute('POST', $uri, $handler);

$routeCollector->put($uri, $handler);
// 等價于
$routeCollector->addRoute('PUT', $uri, $handler);

$routeCollector->patch($uri, $handler);
// 等價于
$routeCollector->addRoute('PATCH', $uri, $handler);

$routeCollector->delete($uri, $handler);
// 等價于
$routeCollector->addRoute('DELETE', $uri, $handler);

$routeCollector->head($uri, $handler);
// 等價于
$routeCollector->addRoute('HEAD', $uri, $handler);

$routeCollector->addRoute('OPTIONS', $uri, $handler);

有的時候你可能需要注冊一個可響應多種 HTTP 請求的路由,這時你可以使用 addRoute 方法注冊一個實現響應多種 HTTP 請求的路由:

$routeCollector->addRoute(['GET', 'POST'], $uri, $handler);

addRoute 方法說明

方法格式如下:

$routeCollector->addRoute($http, $uri, $handler);
  • $httpMethdHTTP 請求方法)參數必須是 大寫HTTP 請求方法字符串或者字符串數組,如 GETPOSTPUTPATCHDELETEHEADOPTIONS

  • $uri 參數需要傳入一個 URI,格式如: /路徑名稱/{參數名稱:匹配規則},占位符 : 用于限制約束路由參數。

  • $handler 參數需要傳入一個字符串或閉包,上述已說明,就不做過多闡述。

示例如下:

$routeCollector->addRoute('GET', $uri, $handler);
$routeCollector->addRoute(['GET', 'POST'], $uri, $handler);

路由參數

必需參數

有時你將需要捕獲路由內的 URI 段。例如,你可能需要從 URL 中捕獲用戶的 ID。你可以通過定義路由參數來做到這一點:

<?php
namespace App\HttpController;

use EasySwoole\Component\Context\ContextManager;
use EasySwoole\Http\AbstractInterface\AbstractRouter;
use EasySwoole\Http\Request;
use EasySwoole\Http\Response;
use FastRoute\RouteCollector;

class Router extends AbstractRouter
{
    function initialize(RouteCollector $routeCollector)
    {
        $routeCollector->get('/user/{id}', function (Request $request, Response $response) {
            $context = ContextManager::getInstance()->get(Router::PARSE_PARAMS_CONTEXT_KEY);
            $id = $context['id'];
            $response->write("User {$id}");
            return false;
        });
    }
}

也可以根據你的需要在路由中定義多個參數:

<?php
namespace App\HttpController;

use EasySwoole\Component\Context\ContextManager;
use EasySwoole\Http\AbstractInterface\AbstractRouter;
use EasySwoole\Http\Request;
use EasySwoole\Http\Response;
use FastRoute\RouteCollector;

class Router extends AbstractRouter
{
    function initialize(RouteCollector $routeCollector)
    {
        $routeCollector->get('/posts/{post}/comments/{comment}', function (Request $request, Response $response) {
            $context = ContextManager::getInstance()->get(Router::PARSE_PARAMS_CONTEXT_KEY);
            $post = $context['post'];
            $comment = $context['comment'];
            $response->write("post: {$post}, comment: {$comment}");
            return false;
        });
    }
}

路由的參數通常都會被放在 {} ,并且參數名只能為字母。

可選參數

有時,你可能需要指定一個路由參數,但你希望這個參數是可選的。你可以在加上 [] 標記將 /{參數} 包含起來來實現:

<?php
namespace App\HttpController;

use EasySwoole\Component\Context\ContextManager;
use EasySwoole\Http\AbstractInterface\AbstractRouter;
use EasySwoole\Http\Request;
use EasySwoole\Http\Response;
use FastRoute\RouteCollector;

class Router extends AbstractRouter
{
    function initialize(RouteCollector $routeCollector)
    {
        $routeCollector->get('/user[/{name}]', function (Request $request, Response $response) {
            $context = ContextManager::getInstance()->get(Router::PARSE_PARAMS_CONTEXT_KEY);
            $name = $context['name'] ?? '';
            $response->write("name: {$name}");
            return false;
        });

        // 上述路由等價于下面2個路由
        $routeCollector->get('/user', function (Request $request, Response $response) {
            // your code
            return false;
        });
        $routeCollector->get('/user/{name}', function (Request $request, Response $response) {
            $context = ContextManager::getInstance()->get(Router::PARSE_PARAMS_CONTEXT_KEY);
            $name = $context['name'];
            $response->write("name: {$name}");
            return false;
        });

        $routeCollector->get('/user[/{id}[/{name}]]', function (Request $request, Response $response) {
            $context = ContextManager::getInstance()->get(Router::PARSE_PARAMS_CONTEXT_KEY);
            $name = $context['name'] ?? '';
            $response->write("name: {$name}");
            return false;
        });
    }
}

獲取路由參數

從 Context 中獲取路由參數(路由參數的默認獲取機制)

可以從 \EasySwoole\Component\Context\ContextManager::getInstance()->get(Router::PARSE_PARAMS_CONTEXT_KEY) 上下文中獲取路由參數。此配置項是easyswoole/http 2.x 版本開始的默認配置。如需設置需在 App\HttpController\Router.php 添加如下代碼:

$this->parseParams(\EasySwoole\Http\AbstractInterface\AbstractRouter::PARSE_PARAMS_IN_CONTEXT);

具體使用示例:

<?php
namespace App\HttpController;

use EasySwoole\Component\Context\ContextManager;
use EasySwoole\Http\AbstractInterface\AbstractRouter;
use EasySwoole\Http\Request;
use EasySwoole\Http\Response;
use FastRoute\RouteCollector;

class Router extends AbstractRouter
{
    function initialize(RouteCollector $routeCollector)
    {
        // /user/1
        $routeCollector->get('/user/{id}', function (Request $request, Response $response) {
            $context = ContextManager::getInstance()->get(Router::PARSE_PARAMS_CONTEXT_KEY);
            $id = $context['id']; // 1
            $response->write("id: {$id}");
            return false;
        });
    }
}

從 Query Param 中獲取路由參數

如果想從 Query Param 中獲取路由參數,可使用這個 $this->request()->getQueryParams() 方法進行獲取,但是需要先在 App\HttpController\Router.php 中進行設置:

$this->parseParams(\EasySwoole\Http\AbstractInterface\AbstractRouter::PARSE_PARAMS_IN_GET);

具體設置如下:

<?php
namespace App\HttpController;

use EasySwoole\Http\AbstractInterface\AbstractRouter;
use EasySwoole\Http\Request;
use EasySwoole\Http\Response;
use FastRoute\RouteCollector;

class Router extends AbstractRouter
{
    function initialize(RouteCollector $routeCollector)
    {
        $this->parseParams(Router::PARSE_PARAMS_IN_GET);

        // /user/1
        $routeCollector->get('/user/{id:\d+}', function (Request $request, Response $response) {
            $id = $request->getQueryParam('id'); // 1
            $response->write("id: {$id}");
            return false;
        });
    }
}

從 POST 請求參數中獲取路由參數

如果想從 POST 請求參數中獲取路由參數,可使用這個 $this->request()->getParsedBody() 方法進行獲取,但是需要先在 App\HttpController\Router.php 中進行設置:

$this->parseParams(\EasySwoole\Http\AbstractInterface\AbstractRouter::PARSE_PARAMS_IN_POST);

具體設置如下:

<?php
namespace App\HttpController;

use EasySwoole\Http\AbstractInterface\AbstractRouter;
use EasySwoole\Http\Request;
use EasySwoole\Http\Response;
use FastRoute\RouteCollector;

class Router extends AbstractRouter
{
    function initialize(RouteCollector $routeCollector)
    {
        $this->parseParams(Router::PARSE_PARAMS_IN_POST);

        // /user/1
        $routeCollector->get('/user/{id:\d+}', function (Request $request, Response $response) {
            $id = $request->getParsedBody('id'); // 1
            $response->write("id: {$id}");
            return false;
        });
    }
}

NONE

不獲取路由參數時,可以在 App\HttpController\Router.php 中進行設置:

$this->parseParams(\EasySwoole\Http\AbstractInterface\AbstractRouter::PARSE_PARAMS_NONE);

注意:以上 4 種設置,用戶只能設置 1 種。Router 默認使用的設置是從請求上下文 Context 中獲取路由參數。

easyswoole/http 2.x 之前版本綁定的參數將由框架內部進行組裝到框架的 Query Param 數據之中,調用方式如下:

<?php
namespace App\HttpController;

use EasySwoole\Http\AbstractInterface\AbstractRouter;
use EasySwoole\Http\Request;
use EasySwoole\Http\Response;
use FastRoute\RouteCollector;

class Router extends AbstractRouter
{
    function initialize(RouteCollector $routeCollector)
    {
        // /user/1
        $routeCollector->get('/user/{id:\d+}', function (Request $request, Response $response) {
            $id = $request->getQueryParam('id'); // 1
            $response->write("id: {$id}");
            return false;
        });
    }
}

參數約束驗證

你可以在路由參數后面添加正則表達式來限制路由參數的格式:

<?php
namespace App\HttpController;

use EasySwoole\Component\Context\ContextManager;
use EasySwoole\Http\AbstractInterface\AbstractRouter;
use EasySwoole\Http\Request;
use EasySwoole\Http\Response;
use FastRoute\RouteCollector;

class Router extends AbstractRouter
{
    function initialize(RouteCollector $routeCollector)
    {
        $routeCollector->get('/user/{name:.+}', function (Request $request, Response $response) {
            $context = ContextManager::getInstance()->get(Router::PARSE_PARAMS_CONTEXT_KEY);
            $name = $context['name'];
            $response->write("name: {$name}");
            return false;
        });
        $routeCollector->get('/user1/{name:[A-Za-z]+}', function (Request $request, Response $response) {
            $context = ContextManager::getInstance()->get(Router::PARSE_PARAMS_CONTEXT_KEY);
            $name = $context['name'];
            $response->write("name: {$name}");
            return false;
        });

        // 將限制 `/users/` 后面的id參數,只能是數字 `[0-9]`
        $routeCollector->get('/user/{id:\d+}', function (Request $request, Response $response) {
            $context = ContextManager::getInstance()->get(Router::PARSE_PARAMS_CONTEXT_KEY);
            $id = $context['id'];
            $response->write("id: {$id}");
            return false;
        });
        $routeCollector->get('/user1/{id:[0-9]+}', function (Request $request, Response $response) {
            $context = ContextManager::getInstance()->get(Router::PARSE_PARAMS_CONTEXT_KEY);
            $id = $context['id'];
            $response->write("id: {$id}");
            return false;
        });

        $routeCollector->get('/user2/{id:[0-9]+}/{name:[a-z]+}', function (Request $request, Response $response) {
            $context = ContextManager::getInstance()->get(Router::PARSE_PARAMS_CONTEXT_KEY);
            $id = $context['id'];
            $name = $context['name'];
            $response->write("id: {$id}, name: {$name}");
            return false;
        });
    }
}

路由參數中的斜杠字符

路由允許除 / 之外的所有字符出現在路由參數值中。 你必須使用正則表達式明確允許 / 成為占位符的一部分:

<?php
namespace App\HttpController;

use EasySwoole\Component\Context\ContextManager;
use EasySwoole\Http\AbstractInterface\AbstractRouter;
use EasySwoole\Http\Request;
use EasySwoole\Http\Response;
use FastRoute\RouteCollector;

class Router extends AbstractRouter
{
    function initialize(RouteCollector $routeCollector)
    {
        $routeCollector->get('/search/{search:.*}', function (Request $request, Response $response) {
            $context = ContextManager::getInstance()->get(Router::PARSE_PARAMS_CONTEXT_KEY);
            $search = $context['search'];
            $response->write("search: {$search}");
            return false;
        });
    }
}

路由分組

路由分組允許你共享 URI 前綴,而無需在每個單獨的路由上定義這些 URI` 前綴。

嵌套組嘗試智能地將 URI 前綴與其父組 “合并”。URI 前綴中的斜杠會在適當的地方自動添加。

<?php
use EasySwoole\Http\Request;
use EasySwoole\Http\Response;
use FastRoute\RouteCollector;

$routeCollector->addGroup('/admin', function (RouteCollector $collector) {
    $collector->addRoute('GET', '/do-something', function (Request $request, Response $response) {
        $response->write('this is do-something');
        return false;
    });
    $collector->addRoute('GET', '/do-another-thing', function (Request $request, Response $response) {
        $response->write('this is do-another-thing');
        return false;
    });
    $collector->addRoute('GET', '/do-something-else', function (Request $request, Response $response) {
        $response->write('do-something-else');
        return false;
    });
});

// 和上述路由等價
$routeCollector->addRoute('GET', '/admin/do-something', function (Request $request, Response $response) {
    $response->write('this is do-something');
    return false;
});
$routeCollector->addRoute('GET', '/admin/do-another-thing', function (Request $request, Response $response) {
    $response->write('this is do-another-thing');
    return false;
});
$routeCollector->addRoute('GET', '/admin/do-something-else', function (Request $request, Response $response) {
     $response->write('do-something-else');
     return false;
});

特殊的路由

從路由調度到其他路由

如果要定一個調度到另一個 URI 的路由,可以使用 return 的方式,可快速實現類似重定向的功能,而不需要去定義完整的路由或者控制器:

$routeCollector->addRoute('GET', '/here', function (Request $request, Response $response) {
     return '/there';
});
use EasySwoole\Http\Request;
use EasySwoole\Http\Response;
use FastRoute\RouteCollector;

$routeCollector->addGroup('/admin', function (RouteCollector $collector) {
    // /admin/test?version=1
    // /admin/test?version=2
    // /admin/test?version=3
    $collector->addRoute('GET', '/test', function (Request $request, Response $response) {
        $version = $request->getQueryParam('version');

        if ($version == 1) {
            $path = '/V1' . $request->getUri()->getPath(); // "/V1/admin/test"
        } else {
            // /V2/admin/test
            $path = '/V2' . $request->getUri()->getPath(); // "/V2/admin/test"
        }

        // return "/V1/admin/test";
        // return "/V2/admin/test";
        return $path;
    });
});

// 注意:/admins/index?version=x 不能匹配到下面這個 action 路由配置參數
// 需要單獨配置路由,如下所示:即執行對應的 App\HttpController\V1\Admins.php 類的 index() 方法
// $routeCollector->addRoute('GET', '/admins/index', '/V1/Admin/index');
$routeCollector->addGroup('/admins', function (RouteCollector $collector) {
    // /admin/test?version=1
    // /admin/test?version=2
    // /admin/test?version=3
    $collector->addRoute('GET', '/{action}', function (Request $request, Response $response) {
        $version = $request->getQueryParam('version');

        if ($version == 1) {
            $path = '/V1' . $request->getUri()->getPath(); // "/V1/admins/test"
        } else {
            $path = '/V2' . $request->getUri()->getPath(); // "/V2/admins/test"
        }

        // return "/V1/admin/test";
        // return "/V2/admin/test";
        return $path;
    });
});

全局模式攔截

Router.php 加入以下代碼,即可開啟全局模式攔截

$this->setGlobalMode(true);

全局模式攔截下,路由將只匹配 Router.php 中指定的 $handler 的控制器方法進行響應,將不會執行框架的默認解析。

異常錯誤處理

通過以下 2 個方法,可設置 路由HTTP請求方法無法匹配 以及 路由無法匹配 的處理機制:

Router.php 加入以下代碼:

<?php
use EasySwoole\Http\Request;
use EasySwoole\Http\Response;

// 路由HTTP請求方法無法匹配
$this->setMethodNotAllowCallBack(function (Request $request, Response $response) {
    $response->withStatus(404);
    return false; // 結束此次響應
});

// 路由未知,無法匹配
$this->setRouterNotFoundCallBack(function (Request $request, Response $response){
    $response->withStatus(404);
    return 'index'; // 重定向到 index 路由
});

該回調函數只針對于 fastRoute 未匹配狀況,如果回調里面不結束該請求響應,則該次請求將會繼續進行 Dispatch 并嘗試尋找對應的控制器進行響應處理。

主站蜘蛛池模板: 亚洲骚片 | 在线播放日韩av | 国产美女黄色片 | 国产精品成人在线 | 毛片久久久久久 | 国产绳艺sm调教室论坛 | 激情五月婷婷综合网 | 麻豆91精品 | 四虎影库永久在线 | 久久久久人人 | 爽交换快高h中文字幕 | 色综合天天综合色综合av | 亚洲精品日韩激情欧美 | 亚洲综合成人av | 美女131爽爽爽做爰视频 | avtt香蕉久久| 久久久久久国产精品美女 | 农村女人乱淫免费视频麻豆 | 日韩专区第一页 | 国内国内在线自偷第68页 | 特级毛片爽www免费版 | 极品美妇后花庭翘臀娇吟小说 | 49vv看片免费| 牛牛视频精品一区二区不卡 | av中文字幕潮喷人妻系列 | 99九九精品视频 | 亚洲精品天堂成人片av在线播放 | 欧美大片免费观看网址 | 91午夜剧场| 欧美性受xxxx黑人猛交88 | 男人吃奶视频 | 亚洲欧美综合另类自拍 | 少妇挑战三个黑人惨叫4p国语 | 天天躁夜夜躁狠狠躁2020色戒 | 亚洲欧美日韩久久 | 青青草色视频 | 91亚瑟视频 | 一区二区视频在线观看免费 | 亚洲天堂中文在线 | 99久久er热在这里只有精品15 | 国产婷婷一区二区三区久久 | 国产白丝jk捆绑束缚调教视频 | 成人免费淫片 | 欧美色图88| 香蕉久久久久 | 欧美亚洲视频一区二区 | 91精品国产乱码久久蜜臀 | 亚洲精品综合五月久久小说 | 国产精品一区二区含羞草 | 国产精品大全 | 国产亚洲精品精品精品 | 欧美无砖砖区免费 | 今夜无人入睡在线观看 | 国产乱淫av片免费看 | zzijzzij亚洲丰满少妇 | 美女国产免费 | 美腿丝袜高跟三级视频 | 亚洲国产精品无码久久 | 日韩一级特黄 | 亚洲人成电影在线播放 | 精品一区二区久久久 | 成人性视频欧美一区二区三区 | 欧美人做人爱a全程免费 | 久久成人a毛片免费观看网站 | 日韩一级伦理片 | 在线观看国产福利 | 国产亚洲第一页 | 美女胸又黄又水 | 日本在线黄色 | 中文字幕无码日韩欧毛 | 中国国语毛片免费观看视频 | 中国黄色a级片 | www.久久爱.com狼人 | 国产3p又大又爽又粗又硬免费 | 日韩视频在线观看免费 | 欧美午夜刺激影院 | 永久免费在线观看av | 91pony九色 | 久久久精品99久久精品36亚 | 成人午夜天| 婷婷久久久 | 亚洲精品美女久久久 | 韩国毛片一区二区三区 | 在线成人免费观看 | 精品美女久久久久 | 大陆极品少妇内射aaaaa | 中出内射颜射骚妇 | 日本一区二区三区中文字幕 | 中文字幕乱码人妻无码久久 | 天堂√最新版中文在线地址 | 情侣黄网站免费看 | 在线免费观看av网址 | 99国产在线播放 | 国产又黄又大视频 | 国产精品激情av久久久青桔 | 免费看成人啪啪 | 欧美人在线 | 91精品国产综合久久四虎久久 | 啪啪日韩 | 欧美精品极品 | 久久99精品久久久久婷婷 | 欧美18av| 中文字幕亚洲综合久久筱田步美 | 丰满多毛的大隂户视频 | 欧美与黑人午夜性猛交久久久 | av片免费观看 | 免费看污黄网站在线观看 | zzz444成人天堂7777| 亚洲一区二区无码偷拍 | 99国产精品久久久久 | 人妻系列无码专区无码中出 | 亚洲在线视频免费观看 | 亚洲午夜久久久精品一区二区三剧 | 日韩av在线不卡 | 好吊操视频这里只有精品 | 国产精品久久久久7777 | 免费黄网在线观看 | 99久久久精品免费观看国产 | 国产麻花豆剧传媒精品mv在线 | 午夜插插 | 久久五月激情 | a一级视频 | 日韩欧美中出 | 2一3sex性hd | 国产片久久久 | 男女猛烈激情xx00免费视频 | 爱爱三级视频 | 琪琪电影午夜理论片八戒八戒 | 国产老女人乱淫免费可以 | 爱爱爱爱网 | 中文字幕2019在线 | 久操不卡| 亚洲男人天堂视频 | 久久久精品免费看 | 人妻三级日本三级日本三级极 | 解开乳罩喂领导吃奶 | 欧美另类天堂 | 日韩丝袜一区 | 激情免费av | 国产又粗又硬又大爽黄老大爷视 | 天天操天天操天天操天天操 | 国产成人久久精品77777的功能 | 日日摸日日碰人妻无码 | 亚洲国产欧美在线观看 | 久久久久久国产精品免费免费男同 | 日本强好片久久久久久aaa | 中国凸偷窥xxxx自由视频妇科 | 99涩涩| 中文字幕亚洲乱码熟女在线萌芽 | 日韩综合第一页 | 日本脱内衣全部视频 | 欧洲精品在线播放 | 国产一区二区三区精品视频 | 国产激情з∠视频一区二区 | 欧美激情三区 | 亚洲一区二区三区含羞草 | 国产香港明星裸体xxxx视频 | 18禁美女裸体网站无遮挡 | 亚洲午夜福利在线观看 | 素人fc2av清纯18岁 | 四虎4hu永久免费网站影院 | 欧美黄色一区二区三区 | 亚洲乱码国产乱码精品精乡村 | 日韩精品第三页 | 欧美日本中文字幕 | 免费99精品国产自在在线 | 久久无码av中文出轨人妻 | 亚洲一区精品在线观看 | 250pp亚洲情艺中心欧美 | 欧美放荡性医生videos | 韩国精品一区二区三区 | 懂色中文一区二区三区在线视频 | 国产精品欧美一区二区三区奶水 | 国产一区在线免费 | 欧美人妻日韩精品 | 久久婷婷国产色一区二区三区 | 国产女人视频 | 欧美日韩va | 在线观看欧美精品 | av日韩免费在线观看 | 午夜精品久久久久久久白皮肤 | 女人爽到高潮潮喷18禁网站 | 亚洲欧美日韩在线一区 | 99久久精品免费看国产免费粉嫩 | av免费黄色 | 男人添女人下部高潮全视频 | 色婷婷久久久亚洲一区二区三区 | 真多人做人爱视频高清免费 | 国产三级精品三级在线观看 | 国产综合视频一区二区三区 | 美女隐私黄www网站免费 | 中文免费av | 亚洲第一伊人 | 色片免费观看 | 日韩av网站在线观看 | 国产高清性xxxxxxxx | 日韩三级一区二区三区 | 欧美精品一区二区蜜臀亚洲 | 狠狠干综合网 | 国产精品无码无在线观看 | 午夜狠狠干 | 裸露双乳挤奶无遮掩裸体网站 | 亚洲精品美女视频 | 亚洲综合av网 | 青草视频在线看 | 永久免费av| 国产精品18p | 国产aⅴ爽av久久久久成人 | 欧美人与性动交α欧美精品 | 手机看片久久 | 免费人成又黄又爽又色 | 高清性色生活片97 | 免费又黄又爽又猛大片午夜 | 狠狠干亚洲色图 | 在线人成 | 操一操日一日 | 在线免费观看午夜视频8 | 狠狠色依依成人婷婷九月 | 中文日韩亚洲欧美字幕 | 中文字幕国产在线观看 | 欧美aⅴ在线观看 | 国产亚av手机在线观看 | 国产尤物精品自在拍视频首页 | 免费网站看sm调教视频 | 精品国产自在精品国产浪潮 | 成人免费观看a | 自拍偷拍 亚洲 | 国产精品亚洲一区二区 | 国产欧美123 | 国产精品久久久久影院老司 | 手机在线看片国产 | 无码人妻精品一区二区三区99不卡 | 三级网站在线免费观看 | 伊人影院中文字幕 | 免费av片 | 亚洲a久久 | 国产免费黄色网址 | 亚洲中文字幕第一页在线 | 丁香啪啪综合成人亚洲小说 | 少妇精品蜜桃偷拍高潮系列 | 粉嫩av国产一区二区三区 | 国产99久久久国产精品免费高清 | 九一国产精品 | 成人免费大片在线观看 | 国产乱淫av免费 | 中文字幕精品久久久乱码乱码 | 久久久久99 | 欧美精品一区二区三区在线四季 | 亚洲噜噜狠狠网址蜜桃av9 | 嫩草影院ncyy入口 | 国产视频大全 | 日韩不卡一二三区 | 懂色a v | 深夜国产视频 | 亚洲欧洲日韩 | 国产成人夜色高潮福利影视 | 国产三级av在线 | 国产精品亚洲一区二区在线观看 | 国产精品久久久久久久久大全 | 成人h猎奇视频网站 | 国产做爰视频免费播放 | 忍不住的亲子中文字幕 | 国产午夜伦理 | 日本老小玩hd老少配 | www色av| 欧美又大又硬又粗bbbbb影院 | 成人午夜网站 | 99爱在线视频这里只有精品 | 女人扒开腿让男人桶到爽 | 偷拍网亚洲 | 国产又粗又黄又长又爽动漫 | 在线观看三级视频 | 久久久久久久久久久99 | 97夜夜澡人人爽人人喊91洗澡 | 欧美精品一区二区三区四区在线 | 制服中文字幕 | 一级做a爰黑人又硬又粗 | 在线观看成年人视频 | 四虎小视频 | 久久精品播放 | 精品成人在线 | 五月天婷婷色 | 波多野结衣办公室双飞 | 亚洲jizzjizz日本少妇软件 | 91精品国产综合婷婷香蕉 | 性欧美videos另类极品小说 | 天堂中文官网在线 | 国产一级做a爰片久久毛片99 | 国产精品99久久久久久武松影视 | 日本不卡高清一区二区三区 | 亚洲国产成人一区 | 国产欧美一区二区三区在线 | 大又大粗又爽又黄少妇毛片 | 97国产suv精品一区二区62 | 日日操夜夜骑 | 女人毛片a毛片久久人人 | 国产精品熟妇一区二区三区四区 | 亚洲综合视频在线 | 啦啦啦www在线观看免费视频 | 中文成人无字幕乱码精品区 | 亚洲精品国产精品自产a区红杏吧 | 国产人妖视频一区二区 | 久久久精品一区二区 | 中国特级毛片 | 日韩精品在线免费观看 | 国产一区二区毛片 | 欧美最猛性xxxxx免费 | 日韩精品免费在线视频 | 天堂一码二码三码四码区乱码 | 欧美 亚洲 一区 | 久久人人妻人人做人人爽 | 欧美日韩在线观看一区 | 欧美变态口味重另类在线视频 | 99色在线视频 | 久久精国 | 色综合天天天天做夜夜夜夜做 | 中文字幕羽月希黑人侵犯 | 东北少妇高潮抽搐 | 两个人看的www在线观看 | 黄色网在线 | 亚洲国产精品成人精品无码区在线 | 99久久婷婷国产综合精品草原 | 国产亚洲精品久久久久久久久动漫 | 噜噜噜亚洲色成人网站 | 老牛嫩草一区二区三区日本 | 一区二区高清视频 | 男女啪啪猛烈无遮挡猛进猛出 | 久久久久高清 | 涩涩久久 | 亚洲www在线 | 成人网站在线进入爽爽爽 | 日本一区二区三区视频免费看 | 亚洲va视频 | 国产a级全部精品 | 亚洲一区精品二人人爽久久 | 综合网伊人 | 无码人妻精品一区二区蜜桃网站 | 鲁夜天天末成午 | 日韩中文字幕观看 | 四虎国产精品免费观看视频优播 | 美女a视频| 一本色道综合久久欧美日韩精品 | 精品人妻伦一二三区久久 | 日韩精品区一区二区三vr | 99噜噜噜在线播放 | 麻豆成人久久精品二区三区小说 | 少妇无码一区二区二三区 | 女人的黄 色视频 | 香港三级澳门三级人妇99 | 少妇伦子伦精品无码styles | 少妇又紧又深又湿又爽视频 | 国产精品人成视频免费播放 | 神马久久久久久久久 | 久久这里有 | 麻豆精品一区二区综合av | 欧美一区二区三区四区视频 | 亚洲九九九九 | 日韩欧美成人免费视频 | 久久久成人999亚洲区美女 | 免费又黄又爽又色的视频 | 午夜在线观看影院 | 日本鲜嫩鲜嫩bbw | 欧美经典片免费观看大全 | 日本亲子乱子伦xxxx60岁 | 就去色综合| 青青福利视频 | 日本伦理一区 | 18禁裸体女免费观看 | 最新精品国偷自产在线 | 强奷乱码中文字幕 | 国产精品.xx视频.xxtv | 国产后入又长又硬 | 成人亚洲精品久久久久 | 国产亚洲欧美精品久久久久久 | 免费观看又色又爽又黄的传媒 | 国产精品久久久久久久久动漫 | 乳霸冲田杏梨中文字幕担心学生的 | 日韩欧美日本 | 日本大香伊一区二区三区 | 无码无套少妇毛多18p | 欧美1区2区| 欧美最猛性xxxxx大叫 | 欧美综合久久 | www国产精品内射老熟女 | 色婷婷一区二区三区四区成人网 | 免费日韩中文字幕 | 亚洲人成影院在线无码按摩店 | 爱啪啪网站 | 欧洲精品99毛片免费高清观看 | wwwxxx亚洲 | 日本久久久影视 | 日韩欧美不卡 | 久久婷婷成人综合色 | 日本精品高清一区二区 | 男人激烈吮乳吃奶爽文 | 我不卡av | 波多野结衣一区二区三区在线观看 | 中文字幕亚洲精品日韩一区 | 国产一区二区三区在线观看免费 | 亚洲瑟瑟 | 在线观看黄网 | 欧美日韩精品久久久 | 精品亚洲韩国一区二区三区 | 欧美a在线看 | 怡春院欧美 | 欧美大片一区二区 | 亚欧日韩在线 | 性色av浪潮av| 国产精品久久久久久久久久久新郎 | 亚洲国产一区二 | 国产在线观看一区二区三区 | 风韵丰满熟妇啪啪区老熟熟女 | 国产精品久久在线 | 国产精品亚洲一区二区三区 | 在线国产福利 | 在线免费成人网 | a视频在线观看 | 国产做爰xxxⅹ久久久精华液 | 日本高清视频在线www色 | 国产一区亚洲 | 中文在线√天堂 | 黄色小视频在线观看 | 区二区三区玖玖玖 | 日日摸夜夜添夜夜添国产精品 | 日本美女极度性诱惑卡不卡 | 日本网站在线看 | 色爱视频| 妇与子乱肉肉在线观看 | 狠狠干2017| 红杏亚洲影院一区二区三区 | 成人在线天堂 | 亚洲韩欧美第25集完整版 | 国产综合av | 亚洲欧美一二三 | 免费一级日韩欧美性大片 | 精品福利一区二区 | 成人精品啪啪欧美成 | 希岛婚前侵犯中文字幕在线 | 人人草在线 | 久久久久欠精品国产毛片国产毛生 | 中文字幕亚洲欧美专区 | 免费观看的av| 性一交一乱一区二区洋洋av | 天天色天天 | 北条麻妃一区二区三区在线 | 小视频在线看 | 伊人九九九有限公司 | 中文字幕第80页 | 久久国产精品久久精品国产 | 国产欧美日韩一区二区加勒比 | 看黄色a级片 | 性生交大片免费看 | 国产精品久久久久久久久久大牛 | 欧美经典影片视频中文 | 日本ts人妖系列在线专区 | 极品少妇xxxx精品少妇偷拍 | 国产揄拍国内精品对白 | 国产精品久久久久永久免费 | 成人特级片 | 亚洲视频色| 色屋视频| 色爱情人网站 | 亚洲精品在线网站 | 性做爰视频免费播放大全 | 国产91精品高清一区二区三区 | 久草手机在线视频 | 久久久精品久久久久久96 | 天堂在线中文网www 亚洲中文字幕在线第六区 日本高清不卡aⅴ免费网站 | 日韩精品区一区二区三vr | 久久99国产精品久久99果冻传媒 | 欧美成人精品一区二区三区 | 无码精品人妻一区二区三区免费看 | 午夜免费啪视频 | 粉嫩av一区二区夜夜嗨 | 国产精品一卡二卡三卡 | 羞羞色院91蜜桃 | 亚洲一级免费在线观看 | 视频在线日韩 | 与黑人高h系列辣文 | 欧美性娇小 | 欧美 日韩 国产 成人 在线 | 极品白嫩的小少妇 | 日韩精品视频在线免费观看 | 卡通动漫av | 亚洲免费不卡视频 | 2019中文字幕在线观看 | 欧美精品一区二区久久久 | 天堂在线中文资源 | 嫩草在线看 | 天天干天天爽 | 国产麻豆一区二区三区在线观看 | 波多野结衣一区二区三区 | 精品少妇人妻av免费久久久 | 蜜桃av蜜臀av色欲av麻 | 满春阁精品av在线导航 | 成人av网站免费 | 又色又爽又黄无遮挡的免费视频 | 91在线第一页 | www.五月天com| 伊人蕉| 三级全黄视频 | 欧美色就是色 | 在线精品亚洲一区二区佐佐木明希 | 久久夜色撩人精品国产av | 久久中文字幕人妻熟av女 | 色天天综合 | 蜜桃视频一区二区三区在线观看 | www.伊人网 | 午夜免费学生在线观看av | 国产九九九九九九九a片 | 国产18精品乱码免费看 | 精品国产一二 | 国产性色av| 国产经典一区 | 57pao国产成永久免费视频 | 激情久| 五月激情片 | 日日橹狠狠爱欧美二区免费 | 国产夫妻在线观看 | 刚添一下她就呻吟起来的视频 | 麻豆果冻传媒2021精品传媒一区下载 | 久久精品视频在线看15 | 帮老师解开蕾丝奶罩吸乳网站 | 青青青视频免费 | yy6080午夜八戒国产亚洲 | 免费看一区二区三区 | 国产精品妇女一二三区 | 一级久久久久 | 国产xxxx做受视频 | 国产乱子伦农村叉叉叉 | zzjizzji亚洲日本少妇 | 欧美一级特黄aaaaaa大片在线观看 | 久久精品国产露脸对白 | 亚洲视频国产视频 | 色窝窝无码一区二区三区成人网站 | 日本大尺度吃奶做爰视频 | 中文字幕第68页 | 高辣h文乱乳h文男男双性视频 | 一本一道dvd在线观看免费视频 | 狠狠干伊人网 | 欧美一区二区三区成人片在线 | 在线超碰av | 捆绑凌虐一区二区三区 | 不卡av在线 | 亚洲午夜国产一区99re久久 | 欧美xxxx黑人又粗又长 | 欧美丰满熟妇bbbbbb百度 | 成人中文字幕+乱码+中文字幕 | 激情视频区 | 久久久久久久久淑女av国产精品 | 国产成人免费片在线观看 | 国产aⅴ精品 | 欧美做爰爽爽爽爽爽爽 | 在线亚洲不卡 | 亚洲精品一区二区三区h | 亚洲麻豆一区 | 久久久在线 | 亚洲精品乱码久久久久v最新版 | 国产精品久久久久久白浆 | 欧美日韩精品一区二区在线播放 | 国产精品久久久久久69 | 伊人精品成人久久综合软件 | 亚洲一区精品视频在线观看 | 免费中文字幕视频 | 中文有码一区 | 色综合中文综合网 | 中文在线永久免费观看 | 国产a精品视频 | 亚洲天堂精品在线 | 男人免费视频 | 麻豆国产尤物av尤物在线观看 | 亚洲自偷自偷在线制服 | 激情久久久久 | 久久精品人人做人人爱爱站长工具 | 日本三级三级三级三级 | 国产精品wwwwww | 国模丽丽啪啪一区二区 | 狠狠做六月爱婷婷综合aⅴ 狠狠做深爱婷婷综合一区 狠久久 | 色翁荡息又大又硬又粗又爽 | 国产欧美一区二区在线观看 | 超碰这里只有精品 | 操人视频免费 | h视频在线看 | 久久精品人人做人人爽97 | 国产视频一区三区 | 狠狠撸在线 | 99国产欧美久久久精品 | 国产动作大片中文字幕 | 成人国产欧美大片一区 | 无码国产精品一区二区免费3p | 毛片视频软件 | 色综合影视| 色妹av| 久久久久亚洲精品男人的天堂 | 99久久久无码国产精品试看 | 欧美特级黄色大片 | 久久人爽人人爽人人片av | 熟女俱乐部五十路六十路 | 大尺度做爰床戏呻吟2046 | 一本一道av无码中文字幕﹣百度 | 免费黄色片网站 | 精品国产乱码久久久久久婷婷 | 四虎影视成人永久免费观看视频 | 91黄免费 | 波多野结衣av高清一区二区三区 | 欧美精选一区 | aaa人片在线 | 99久久亚洲精品 | 女裸全身无奶罩内裤内衣内裤 | 少妇激情视频 | 日韩精品一区二区三区四区新区 | 青青青爽视频在线观看 | 99re6在线视频精品免费 | 亚洲国产成人片在线观看无码 | 欧美亚洲日本国产黑白配 |