五月天激情丁香,国产精品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 并嘗試尋找對應的控制器進行響應處理。

主站蜘蛛池模板: 男人猛躁进女人免费视频夜月 | 久久黄色片网站 | 日本在线播放视频 | 黄频视频在线观看 | 1000部禁片18勿进又色又爽 | 丰满少妇被猛男猛烈进入久久 | 国产91高潮流白浆在线麻豆 | 91国内在线观看 | 国产乱弄免费视频 | 国产办公室秘书无码精品99 | 国产视频每日更新 | 日韩成人无码中文字幕 | 尤物videos另类xxxx | 亚洲欧美影院 | 最新日本黄色网址 | √天堂资源在线中文8在线最新版 | 黄色小视频在线播放 | 国产久操视频 | 国产偷抇久久精品a片69 | 国产偷v国产偷v精品视频 | 91精品网站 | 国产精品21区 | 日韩免费看片 | 丁香五月缴情综合网 | 人善交另类亚洲重口另类 | 久热精品在线 | 精品粉嫩bbwbbwbbw | 羞羞啪啪调教play男男黄 | 国产精品久久久久久久小唯西川 | 亚洲精品3区| 黑白配在线观看免费观看 | 激情综合影院 | 久久精品天天中文字幕人妻 | 一级片黄色毛片 | 在线一区av | 一本之道之高码清乱码加勒比 | 中文字幕一区二区三区久久 | 日韩一区二区三区视频在线观看 | 蜜臀久久久久久999 免费 成 人 黄 色 | 黑人操白妞 | 一本色道久久综合亚洲精品小说 | 国产欧美精品区一区二区三区 | 色婷婷综合久久久久中文一区二区 | 激情网站网址 | 在线观看91精品国产网站 | 亚洲国产三级在线观看 | 欧洲自拍偷拍 | 丁香婷婷在线观看 | 亚洲a级女人内射毛片 | 国产精品一区二区av | 爱搞国产 | 国产亚洲精久久久久久无码77777 | 另类欧美日韩 | 日吊视频 | 亚洲日韩精品无码专区加勒比 | 在线观看黄 | 国产最猛性xxxx | 青青草成人免费视频 | 国产极品美女高潮无套久久久 | 久久98精品久久久久久久性 | 综合激情五月婷婷 | 亚洲国产又黄又爽女人高潮的 | 丰满的继牳3中文字幕系列 丰满的少妇xxxxx人伦理 | 国模妙妙超大尺度啪啪人体 | 亚洲国产精品一区二区成人片国内 | 中文字幕无码视频手机免费看 | 亚洲国产成人久久综合一区77 | 白嫩情侣偷拍呻吟刺激 | 欧美一区二区在线观看视频 | 北条麻妃二三区 | 波多野结衣网站 | 在线观看欧美一区二区 | 天天插综合| 婷婷激情视频 | 久久久久免费精品国产小说色大师 | 韩国三级丰满少妇高潮 | 91日韩视频 | 国产精品成人一区二区三区 | 尤物久久av一区二区三区亚洲 | 少妇又紧又深又湿又爽视频 | 午夜视频免费看 | 日韩福利小视频 | 黑人巨大精品欧美一区二区三区 | 欧美三级a做爰在线观看 | 久久99精品国产自在现线小黄鸭 | 日韩一区二区三区精品视频 | 交专区videossex农村 | 亚洲综合色在线 | 大地资源中文第二页日本 | 在线操 | 北条麻妃一区二区三区在线 | 亚洲欧美日韩国产成人精品 | 成年人视频网址 | 国产精品一级无遮挡毛片 | 成人毛片网| 日本一级少妇免费视频乌克兰裸体 | 国产精品综合久久久精品综合蜜臀 | 国产白嫩护士被弄高潮 | 亚洲一区二区三区视频在线 | 99久久精品国产毛片 | 久久一级视频 | 久草青青视频 | 日韩一级伦理片 | 成人精品999 | 日产牛牛在线 | 青青草91视频| 欧美99久久精品乱码影视 | 日本韩国欧美一区二区三区 | 日本a在线天堂 | 嫩草视频| 中文字幕有码视频 | 国产乱码精品一区二区三区精东 | 一区二区视屏 | 中文字幕一区二区不卡 | av毛片在线免费观看 | 成人做爰69片免费 | 人人看操 | 香蕉影院在线观看 | 91精品国产一区二区在线观看 | 伊人一级 | 动漫av在线 | 夜夜躁很很躁日日躁麻豆 | 久草www| 久久无码高潮喷水 | 国外成人在线视频网站 | 黄频在线观看 | 国产精品13p| 日韩精品www | а 天堂 在线 | 激情久久综合 | 大波大乳videos巨大 | 少妇又紧又色又爽又刺激的视频 | 久久国产精品偷任你爽任你 | 久久久久无码精品国产不卡 | 久草中文在线 | 三级毛片在线看 | 佐佐木明希奶水喷出在线视频 | 日韩精品在线播放 | 91淫黄大片 | 少妇高潮灌满白浆毛片免费看 | 蜜臀av性久久久久蜜臀aⅴ麻豆 | 九九久久久 | 日本中文字幕网站 | 在线精品视频一区二区三四 | 人人射人人爱 | 精品国产精品三级精品av网址 | 无码h黄肉动漫在线观看网站 | 国产麻豆剧传媒精品国产av | 日本三级午夜理伦三级三 | 久久99在线| 一级大片在线观看 | 四虎永久在线视频 | 91麻豆精品国产91久久久无需广告 | 九九热播视频 | 国产成人精品优优av | 欧美大片免费 | 狐狸视频污| 性av网站| 日韩欧美一级在线 | 国产欧美日韩三区 | www久久撸撸网 | av福利在线| 免费黄色激情视频 | 久人久人久人久久久久人 | 日韩色av| 9色在线| 成年无码av片 | av噜噜| 少妇太爽了在线观看 | 影音先锋中文在线 | 日本免费一区二区三区高清视频 | 伊人久久久久久久久久久 | 日韩中文字幕在线 | 精品午夜视频 | 青青草无码免费一二三区 | 无套内谢大学处破女福利 | 中文字幕日本在线 | 另类欧美日韩 | 91视频看| 久久中文字幕伊人小说小说 | 天堂久久天堂av色综合 | 亚洲免费视频一区二区三区 | 120秒日本爱爱动态图 | 欧美乱妇在线观看 | 无码国模国产在线观看 | 欧美大片xxx | 亚洲午夜久久久久 | 五月天婷婷在线视频 | 国产叼嘿视频在线观看 | 在线国产不卡 | 日韩欧美精品在线 | 我不卡午夜| 强迫凌虐淫辱の牝奴在线观看 | 屁屁影院ccyy备用地址 | 国产性一乱一性一伧一色 | 欧美有码在线观看 | 国产伦精品一区二区三区无广告 | 男人扒开女人腿桶到爽免费 | 人人妻人人澡av天堂香蕉 | 91在线精品播放 | 荫蒂被男人添的好舒服爽免费视频 | 国产福利一区二区 | 中文字幕精品亚洲无线码一区应用 | 88国产精品视频一区二区三区 | 51国偷自产一区二区三区 | 精人妻无码一区二区三区 | 久久久精品二区 | 日日干日日操 | 麻豆果冻传媒2021精品传媒一区下载 | 久久麻豆视频 | 日本大香伊一区二区三区 | 激情六月综合 | 国产福利姬喷水福利在线观看 | 51自拍视频在线观看 | 欧美日韩国产高清视频 | 操欧美女人 | 国产欧美精品一区二区 | 日日久 | 久久99精品久久久久 | 五十路亲子中出在线观看 | av成人免费| 日本一区午夜艳熟免费 | 欧美日韩一区二区在线观看 | 看免费黄色大片 | 又粗又大内射免费视频小说 | 粉嫩精品国产色综合久久不8 | 99精品免费观看 | 国产真实乱对白精彩久久老熟妇女 | 国产三级精品在线观看 | 欧美噜噜久久久xxx 久久精品一区二区免费播放 | 操操操插插插 | 中字幕视频在线永久在线观看免费 | 国产真实交换夫妇视频 | h欧美 | 日本视频网 | 97国产婷婷综合在线视频 | 欧美丰满少妇xxxxx | 91av导航| 久久成人在线视频 | 精品日韩欧美一区二区在线播放 | 天天干,天天干 | 不卡中文字幕 | 国产视频精品一区二区三区 | 国色天香久久久久久久小说 | 国产精品自在在线午夜出白浆 | 精精国产xxxx视频在线播放 | 麻豆av一区二区三区 | 波多野吉衣av无码 | h视频免费在线 | 久久久久人妻一区二区三区 | 久久婷婷精品一区二区三区日本 | 日韩精品一区二区三区在线观看 | 国产又黄又爽又色的免费 | 国产成人av一区二区三区在线观看 | 欧美综合在线观看 | 青娱乐超碰在线 | 亚洲午夜1000理论片aa | 婚后日日高h文孕 | 欧美极品三级 | 视频一区亚洲 | 日韩一级在线 | 99免费在线观看 | 尤物视频网站在线观看 | 国产精品久久久久久久免费软件 | 亚洲精品日韩av | 中文字幕在线观看第二页 | 97夜色| 精品国产一区二区三区久久久狼 | 日韩av在线看 | 国产爽爽久久影院潘金莲 | www.香蕉视频在线观看 | 51精品国产人成在线观看 | 国产精品www老牛影视 | 最近免费中文字幕中文高清百度 | 中文字幕一区二区三区乱码不卡 | 日韩精品久久一区二区 | 毛片毛片毛片毛片毛片毛片毛片 | 国产午夜精品一区理论片飘花 | www色黄 | 国产在线视频第一页 | 成人无码视频在线观看网站 | 国产寡妇亲子伦一区二区三区 | 毛多水多www偷窥小便 | 一本色综合亚洲精品蜜桃冫 | 日本亚洲网站 | 欧美一区二区最爽乱淫视频免费看 | 成色视频 | 色欲久久久天天天综合网 | 中日韩精品视频在线观看 | 五月伊人网| 男女做爰猛烈叫床爽爽免费网站 | 精品国产乱码久久久久久精东 | 亚洲欧美日韩中文在线制服 | 天堂在线www天堂在线 | √天堂资源在线 | 妲己艳史淫片免费看 | av鲁丝一区鲁丝二区鲁丝三区 | 国产在线观看免费视频今夜 | 欧美成人国产精品高潮 | 中文字幕综合在线分类 | 国产精品亚洲一区二区三区在线 | 国产精选一区二区 | 天天综合日日夜夜 | 久久天天躁夜夜躁狠狠85麻豆 | 亚洲欧美日韩国产综合精品二区 | 久久精品国产一区二区三区 | jzz在线观看| 免费的污网站 | 久久99精品久久久久久 | 欧美黑人性猛交大片 | 亚洲va中文在线播放免费 | 久久视奸| 蜜桃久久精品成人无码av | 日韩av不卡一区 | 国色天香成人网 | 中文字字幕在线 | 国产黑色丝袜呻吟在线91 | 免费高潮视频95在线观看网站 | 国产xxxx成人精品免费视频频 | 深夜视频在线看 | 91欧美精品| 久久99精品国产麻豆婷婷小说 | 久久久精品网 | 97免费视频在线观看 | 中文字幕人妻少妇引诱隔壁 | 国产三区在线成人av | 东京热一精品无码av | 美女粉嫩饱满的一线天mp4 | 人妻 日韩精品 中文字幕 | 久久久精品久久日韩一区综合 | 激情六月天 | 国产偷国产偷亚洲高清app | 青青草视频免费观看 | 看全黄大色黄大片美女人 | 黄片毛片在线看 | 欧美综合激情网 | 日本五十路岳乱在线观看 | 亚洲第一黄色片 | 无码人妻精品一区二区三区东京热 | 亚洲伦理久久 | 午夜黄色福利视频 | a√在线| 久久久久久亚洲国产精品 | 夜夜精品无码一区二区三区 | 欧美激情综合亚洲一二区 | 国产一区二区三区视频网站 | 国产视频一区二 | 免费在线黄色av | 夜夜嗨网址 | 国产japanhdxxxx麻豆| 日韩视频在线观看一区 | 女人张开腿让男人桶爽 | 国产精品第一 | 国产亚洲精品久久久久久青梅 | 单亲与子性伦刺激对白视频 | 深夜av在线播放 | 一区二区三区中文字幕在线 | 国产精品久久一区性色av图片 | 欧美亚洲精品一区二区三区 | 91精品国产乱码在线观看 | 国产污污网站 | 久久激情综合网 | 啪啪福利| 青青草无码精品伊人久久 | 自拍偷拍第二页 | 婷婷伊人综合亚洲综合网 | 51精产品一区一区三区 | 成人性做爰aaa片免费看曹查理 | 久久综合久久自在自线精品自 | 国产三级农民怕怕乡下姝4 国产三级欧美三级 | 国产精品国产免费无码专区不卡 | 亚洲成人av免费 | 国产妇女乱一性一交 | 日韩午夜高清 | 日韩精品视频在线 | 欧美第十页| 少妇厨房愉情理9仑片视频 纯爱无遮挡h肉动漫在线播放 | 91精品国产色综合久久不卡98 | 久草在线新时代视觉体验 | 精品久久久久一区二区 | 无码精品黑人一区二区三区 | 日本内谢少妇xxxxx少交 | 136fldh导航福利视频 | 粉嫩91精品久久久久久久99蜜桃 | yw视频在线观看 | 男主和女配啪慎入h闺蜜宋冉 | 五月色区| 精品欧美一区二区精品久久久 | 扒开双腿被两个男人玩弄视频 | 中文日韩在线观看 | 成人免费视频软件网站 | 国产做无码视频在线观看 | 天天插天天干天天操 | 在线免费看av片 | 国产第一页精品 | 国产欧美激情 | 国产精品嫩草影院8vv8 | 人人干av | 成人3d动漫在线观看 | 成人黄色短片 | 成人伊人网 | 久久国产热精品波多野结衣av | xxxx色| 经典三级久久 | av在线资源站 | 亚洲产国偷v产偷v自拍涩爱 | 日韩人妻熟女毛片在线看 | 久久久久久久久久一级 | 99精品国产自在现线10页 | 亚洲综合激情另类小说区 | 夜夜操影视| 日本人裸体艺术aaaaaa | 91香焦视频 | 久久亚洲精品ab无码播放 | 女警一级淫片免费放 | 无码一区二区三区在线观看 | 人与嘼av免费 | 亚洲色成人网站www永久四虎 | www.av网 | 护士脱了内裤让我爽了一夜视频 | 秋霞av鲁丝片一区二区 | 精品无码av人在线观看 | 精品综合久久久久久98 | 精品国产18久久久久久 | 欧美成人精品三级在线观看播放 | 一区二区欧美精品 | 97无码免费人妻超级碰碰夜夜 | 欧洲精品免费一区二区三区 | 少妇丰满极品嫩模白嫩 | 精品免费久久久 | 国产麻豆剧果冻传媒星空视频 | 亚洲欧洲中文日韩久久av乱码 | 国产青青 | 九九热在线免费视频 | 亚洲精品白浆 | 性猛交xxxx免费看蜜桃 | 久久国产精品久久国产精品 | 国产精品久久婷婷六月丁香 | 亚洲激情另类 | 亚洲人成亚洲人成在线观看 | a级在线观看 | 亚洲最大成人在线观看 | 国产成人免费高潮激情视频 | 精品亚洲国产成av人片传媒 | 手机日韩av | 久久99精品国产麻豆91樱花 | 制服丝袜在线一区 | 日韩a一级 | 久久成人午夜 | 亚洲美女午夜一区二区亚洲精品 | 亚洲 欧美 清纯 校园 另类 | 一级生性活片免费视频片 | 爱情岛论坛成人 | 欧美精品videosex极品 | 国产精品99久久久久久董美香 | 午夜探花视频 | 少妇下蹲露大唇无遮挡 | 一二三四在线视频观看社区 | 乱色欧美激惰 | 成人年人免费看xxxxxxx | 中国女人和老外的毛片 | 午夜免费福利视频 | 成人交配视频 | 自拍偷拍第| 高清国产精品人妻一区二区 | 亚洲一区二区三区四区五区乱码 | 丰满少妇高潮久久三区 | 国产一区二区三区在线免费 | 中文字幕在线观看亚洲日韩 | 精品国产一区二区三区四区 | 少妇白浆高潮无码免费区 | 四虎永久网址 | 日本www视频在线观看 | 欧美日韩精品亚洲精品 | 久久av免费 | www九色com| 久久精品国产视频 | 亚洲天堂伦理 | 全黄一级裸片视频 | 国内精品久久久久久久日韩 | 日韩欧美极品 | 大桥未久女教师在线观看bd22 | 中文字幕有码av | av网站免费线看 | 高清无码视频直接看 | 亚洲va久久久噜噜噜久牛牛影视 | 国产极品美女高潮无套久久久 | 中文字幕免费在线视频 | 男女互操视频网站 | 凹凸精品一区二区三区 | 好色婷婷| 日韩一级免费毛片 | 欧美人与性禽动交情品 | 毛片毛片毛片毛片 | xxxx黄色| 久操视频在线免费观看 | 午夜免费福利小电影 | 自拍视频一区二区 | 女厕厕露p撒尿八个少妇 | 国产精品嫩草在线 | 亚洲无卡| 免费中文视频 | 国产毛片久久久久久国产毛片 | 一本久道久久综合狠狠爱 | 精品熟人妻一区二区三区四区不卡 | 就操成人网 | 天天鲁一鲁摸一摸爽一爽视频 | 欧性猛交ⅹxxx乱大交 | 精品无码中文字幕在线 | 欧美日韩在线成人 | 人妻夜夜爽天天爽爽一区 | 国产91玉足脚交在线播放 | 日韩欧美中文字幕一区 | 伊人天天 | 热久久这里只有精品 | 亚洲国产中文字幕在线 | 色综合久久久久久 | 久久免费在线观看 | 国内精品国产三级国产在线专 | 999久久久国产精品 国产精品视频全国免费观看 | 大奶子情人 | 亚洲永久免费视频 | 男女啪啪无遮挡免费网站 | 艹逼在线观看 | 无套中出极品少妇白浆 | 国产精品粉嫩懂色av | 国产精品亚洲lv粉色 | 大又大粗又爽又黄少妇毛片 | 性征服新婚少妇69xx | 波多野结衣aⅴ在线 | 人人干人人模 | 国产三级三级三级精品8ⅰ区 | 精品久久国产视频 | 亚洲一区二区三区视频 | 狠狠婷婷 | 精品一区二区三区四区五区六区 | 超碰在线日韩 | 男人猛躁进女人免费播放 | 精品国产一区二区国模嫣然 | 少妇做爰免费视频播放 | 超碰97人 | 久久亚洲精品无码av | 国产人成高清在线视频99最全资源 | 免费久久精品视频 | 在线观看日本中文字幕 | 99er热精品视频 | 日韩成人午夜 | 久久久亚洲欧洲日产国码aⅴ | 亚洲 欧美 激情 小说 另类 | 国产人成看黄久久久久久久久 | 久久综合久久久久 | 欧洲成人综合网 | 亚洲免费片 | 任你躁久久久久久妇女av | 爱性久久久久久久久 | 国产片av国语在线观看 | 国产人与zoxxxx另类 | 日韩免费福利视频 | 公用小sao货h | 毛片网页| 神马香蕉久久 | 国产视频欧美 | 人人舔人人 | 日韩69永久免费视频 | 免费黄色91| 中文字幕亚洲乱码熟女一区二区 | caoporn国产一区二区 | 性69交片免费看 | 国产高清美女一级a毛片久久w | 顶级少妇做爰视频在线观看 | 绝顶高潮videos合集 | 日韩国产精品一区二区 | а√天堂资源国产精品 | 中文字幕成人网 | 日本裸体丰满少妇一丝不丝 | 国产毛片在线视频 | 亚洲高清在线播放 | www.欧美激情 | 精品一区二区三区毛片 | 麻豆成人久久精品二区三区小说 | 涩涩涩综合 | 欧美精品v | 亚洲国产精一区二区三区性色 | 亚洲国产精品久久久久久6q | 182tv在线观看免费午夜免费线路 | 2019精品手机国产品在线 | 日本免费人成视频在线观看 | 国产精品丝袜高跟鞋 | 久久久久久98 | 亚洲天堂中文字幕 | 丰满肥臀噗嗤啊x99av | 99免费在线| 国产做爰免费观看视频 | 午夜精品国产精品大乳美女 | 欧亚一区二区三区 | 久久久人成影片一区二区三区 | 欧美大片在线观看免费视频 | 国产精品熟女人妻 | 日韩资源| 日韩欧美卡一卡二卡新区 | 6080av| 国产精品成人免费一区二区视频 | 天堂av资源在线 | 日韩性av| 一级片麻豆 | 亚洲18色成人网站www | 九一精品视频 | 久久精品一区二区三区四区 | 久久久精品影院 | 19禁国产精品福利视频 | www黄色免费| 欧美极品少妇xxxxⅹ免费视频 | 黄色的网站在线免费观看 | 午夜激情一区二区 | 3d毛片|