日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

php框架费尔康,GitHub - majixian/study-phalcon: phalcon(费尔康)框架学习笔记

發(fā)布時間:2025/3/15 php 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php框架费尔康,GitHub - majixian/study-phalcon: phalcon(费尔康)框架学习笔记 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

phalcon(費爾康)框架學(xué)習(xí)筆記

以實例程序invo為例(invo程序放在網(wǎng)站根目錄下的invo文件夾里,推薦php版本>=5.4)

環(huán)境不支持偽靜態(tài)網(wǎng)址時的配置

第一步:

在app\config\config.ini文件中的[application]節(jié)點內(nèi)修改baseUri參數(shù)值為/invo/index.php/或/invo/index.php?_url=/,并增加一個參數(shù)staticBaseUri,值設(shè)為/invo/。

例如:

;支持非偽靜態(tài)網(wǎng)址

baseUri = "/invo/index.php?_url=/"

;靜態(tài)資源文件網(wǎng)址

staticBaseUri = /invo/

如果將baseUri設(shè)置為/invo/index.php/的話,需要在router服務(wù)中作如下設(shè)置,才能正常工作:

$di -> set('router', function () {

$router = new Router();

$router->setUriSource(Router::URI_SOURCE_SERVER_REQUEST_URI);//重要

return $router;

});

第二步:

在文件app\config\services.php中找到$di->set('url',所在位置,在其中的匿名函數(shù)內(nèi)return語句前增加一行,輸入$url->setStaticBaseUri($config->application->staticBaseUri);

這里使用的是phalcon v2.0.2,此版本在使用非偽靜態(tài)網(wǎng)址的過程中,發(fā)現(xiàn)存在一個bug:當(dāng)在模板中使用$this->tag->linkTo('products/search?page=1')函數(shù)生成網(wǎng)址時,由于第一個參數(shù)中包含了問號,再加上配置文件中的baseUri中也包含問號,這樣生成的網(wǎng)址中就包含兩處問號,只能通過自己擴(kuò)展Url類來修復(fù)了,下面是修復(fù)步驟。

在文件app\config\services.php中添加以下代碼:

/**

* 重寫Url,修復(fù)動態(tài)網(wǎng)址中關(guān)于問號的bug

*

* @author:S.W.H

* @E-mail:swh@admpub.com

* @update:2015/6/9

*/

class MyUrl extends UrlProvider{

static public $hasDynamicUrl=null;

public function get($uri=null, $args=null, $local=null){

if(self::$hasDynamicUrl && strpos($uri,'?')!==false){

$uri=str_replace('?','&',$uri);

}

return parent::get($uri, $args, $local);

}

}

并將代碼:

$url = new UrlProvider();

替換為:

$url = new \MyUrl();

\MyUrl::$hasDynamicUrl=strpos($config->application->baseUri,'?')!==false;

即可解決。

路由規(guī)則

添加路由規(guī)則:

use Phalcon\Mvc\Router;

// Create the router

$router = new Router();

//Define a route

$router->add(

"/admin/:controller/a/:action/:params",

array(

"controller" => 1, //匹配第一個占位符(/:controller)

"action" => 2, //匹配第二個占位符(/:action)

"params" => 3, //匹配第三個占位符(/:params)

)

);

支持的占位符有:

占位符

正則表達(dá)式

Usage

/:module

/([a-zA-Z0-9_-]+)

Matches a valid module name with alpha-numeric characters only

/:controller

/([a-zA-Z0-9_-]+)

Matches a valid controller name with alpha-numeric characters only

/:action

/([a-zA-Z0-9_]+)

Matches a valid action name with alpha-numeric characters only

/:params

(/.*)*

Matches a list of optional words separated by slashes. Use only this placeholder at the end of a route

/:namespace

/([a-zA-Z0-9_-]+)

Matches a single level namespace name

/:int

/([0-9]+)

Matches an integer parameter

Controller名稱是采用駝峰命名法(camel),這意味著“-”和“_”將會被刪除并將其后的一個字符大寫。

例如,some_controller 會被轉(zhuǎn)換為 SomeController。

指定參數(shù)名稱

方式一,在數(shù)組中指定:

$router->add(

"/news/([0-9]{4})/([0-9]{2})/([0-9]{2})/:params",

array(

"controller" => "posts",

"action" => "show",

"year" => 1, // ([0-9]{4})

"month" => 2, // ([0-9]{2})

"day"=> 3, // ([0-9]{2})

"params" => 4, // :params

)

);

在上面的例子中,路由沒有定義“controller”和“action”部分,而是被指定為“posts”和“show”,這樣,用戶將不知道控制器的真實請求路徑。

在controller中,這些被命名的參數(shù)可以用如下方式這樣訪問:

use Phalcon\Mvc\Controller;

class PostsController extends Controller{

public function indexAction(){

}

public function showAction(){

// Return "year" parameter

$year = $this->dispatcher->getParam("year");

// Return "month" parameter

$month = $this->dispatcher->getParam("month");

// Return "day" parameter

$day = $this->dispatcher->getParam("day");

}

}

方式二,在路由中指定:

$router->add(

"/documentation/{chapter}/{name}.{type:[a-z]+}",

array(

"controller" => "documentation",

"action" => "show"

)

);

看見了嗎?花括號中的chaper、name和type就是相對應(yīng)的名稱了。

總結(jié):路由中的匹配項,可以使用

占位符

正則表達(dá)式

帶命名的正則表達(dá)式(命名與正則表達(dá)式間用冒號“:”隔開,并整個用花括號括起來)

{命名}

指定名稱空間的例子:

$router->add("/login", array(

'namespace' => 'Backend\Controllers',

'controller' => 'login',

'action' => 'index'

));

鉤子事件

轉(zhuǎn)換某個參數(shù)的值:

//The action name allows dashes, an action can be: /products/new-ipod-nano-4-generation

$router->add('/products/{slug:[a-z\-]+}', array(

'controller' => 'products',

'action' => 'show'

))->convert('slug', function($slug) {

//Transform the slug removing the dashes

return str_replace('-', '', $slug);

});

除了convert方法之外,還支持:

匹配回調(diào)函數(shù)

->beforeMatch(function($uri, $route) {

//Check if the request was made with Ajax

if ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'xmlhttprequest') {

return false;

}

return true;

});//參數(shù)可以是匿名函數(shù),也可以采用數(shù)組的方式指定某個對象的方法:array(new AjaxFilter(), 'check')

限制主機(jī)名

->setHostName('([a-z+]).company.com');

路由分組

use Phalcon\Mvc\Router;

use Phalcon\Mvc\Router\Group as RouterGroup;

$router = new Router();

//Create a group with a common module and controller

$blog = new RouterGroup(array(

'module' => 'blog',

'controller' => 'index'

));

//All the routes start with /blog

$blog->setPrefix('/blog');

//Add another route to the group

$blog->add('/edit/{id}', array(

'action' => 'edit'

));

//Add the group to the router

$router->mount($blog);

或者:

use Phalcon\Mvc\Router\Group as RouterGroup;

class BlogRoutes extends RouterGroup{

public function initialize(){

//Default paths

$this->setPaths(array(

'module' => 'blog',

'namespace' => 'Blog\Controllers'

));

//All the routes start with /blog

$this->setPrefix('/blog');

//Add another route to the group

$this->add('/edit/{id}', array(

'action' => 'edit'

));

}

}

Then mount the group in the router:

//Add the group to the router

$router->mount(new BlogRoutes());

路由命名

$route = $router->add("/posts/{year}/{title}", "Posts::show");

$route->setName("show-posts");

//或者這樣

$router->add("/posts/{year}/{title}", "Posts::show")->setName("show-posts");

然后,我們就可以根據(jù)命名來生成符合這條路由的網(wǎng)址了:

// returns /posts/2012/phalcon-1-0-released

echo $url->get(array(

"for" => "show-posts",//路由名稱

"year" => "2012",//參數(shù)year的值

"title" => "phalcon-1-0-released" //參數(shù)title的值

));

指定URI來源

use Phalcon\Mvc\Router;

...

$router->setUriSource(Router::URI_SOURCE_GET_URL); // use $_GET['_url'] (default)

$router->setUriSource(Router::URI_SOURCE_SERVER_REQUEST_URI); // use $_SERVER['REQUEST_URI'] (default)

限制HTTP請求方式

當(dāng)您使用路由的add方法時,意味著不限制HTTP請求方式。

有時我們可以限制一個路由使用一個特定的方式來訪問,這在創(chuàng)建RESTful應(yīng)用程序時將非常有用:

// This route only will be matched if the HTTP method is GET

$router->addGet("/products/edit/{id}", "Products::edit");

// This route only will be matched if the HTTP method is POST

$router->addPost("/products/save", "Products::save");

// This route will be matched if the HTTP method is POST or PUT

$router->add("/products/update")->via(array("POST", "PUT"));

限制http請求方式:$router->addGet()、$router->addPut()、$router->addPost()……

設(shè)置默認(rèn)

可以為通用路徑中的 module, controller, action 定義默認(rèn)值。當(dāng)一個路由缺少其中任何一項時,路由器可以自動用默認(rèn)值填充:

//Setting a specific default

$router->setDefaultModule('backend');

$router->setDefaultNamespace('Backend\Controllers');

$router->setDefaultController('index');

$router->setDefaultAction('index');

//Using an array

$router->setDefaults(array(

'controller' => 'index',

'action' => 'index'

));

匿名路由

此組件提供了一個與注解服務(wù)集成的變體。使用此策略可以在控制器中直接寫路由。

use Phalcon\Mvc\Router\Annotations as RouterAnnotations;

$di['router'] = function() {

//Use the annotations router

$router = new RouterAnnotations(false);

//Read the annotations from ProductsController if the uri starts with /api/products

$router->addResource('Products', '/api/products');

return $router;

};

可以按如下方式定義注解:

/**

* @RoutePrefix("/api/products")

*/

class ProductsController

{

/**

* @Get("/")

*/

public function indexAction() {}

/**

* @Get("/edit/{id:[0-9]+}", name="edit-robot")

*/

public function editAction($id) {}

/**

* @Route("/save", methods={"POST", "PUT"}, name="save-robot")

*/

public function saveAction() {}

/**

* @Route("/delete/{id:[0-9]+}", methods="DELETE",

* conversors={id="MyConversors::checkId"})

*/

public function deleteAction($id) {}

public function infoAction($id) {}

}

支持的注解有:

Name

Description

Usage

RoutePrefix

A prefix to be prepended to each route uri. This annotation must be placed at the class’ docblock

@RoutePrefix(“/api/products”)

Route

This annotation marks a method as a route. This annotation must be placed in a method docblock

@Route(“/api/products/show”)

Get

This annotation marks a method as a route restricting the HTTP method to GET

@Get(“/api/products/search”)

Post

This annotation marks a method as a route restricting the HTTP method to POST

@Post(“/api/products/save”)

Put

This annotation marks a method as a route restricting the HTTP method to PUT

@Put(“/api/products/save”)

Delete

This annotation marks a method as a route restricting the HTTP method to DELETE

@Delete(“/api/products/delete/{id}”)

Options

This annotation marks a method as a route restricting the HTTP method to OPTIONS

@Option(“/api/products/info”)

用注解添加路由時,支持以下參數(shù):

Name

Description

Usage

methods

Define one or more HTTP method that route must meet with

@Route(“/api/products”, methods={“GET”, “POST”})

name

Define a name for the route

@Route(“/api/products”, name=”get-products”)

paths

An array of paths like the one passed to Phalcon\Mvc\Router::add

@Route(“/posts/{id}/{slug}”, paths={module=”backend”})

conversors

A hash of conversors to be applied to the parameters

@Route(“/posts/{id}/{slug}”, conversors={id=”MyConversor::getId”})

如果要將路由映射到模塊中的控制器,可以使用addModuleResource方法:

use Phalcon\Mvc\Router\Annotations as RouterAnnotations;

$di['router'] = function() {

//Use the annotations router

$router = new RouterAnnotations(false);

//Read the annotations from Backend\Controllers\ProductsController if the uri starts with /api/products

$router->addModuleResource('backend', 'Products', '/api/products');

return $router;

};

###路由執(zhí)行事件

依次按以下順序執(zhí)行:

dispatch:beforeDispatchLoop

開始循環(huán)匹配路由

dispatch:beforeDispatch

dispatch:beforeNotFoundAction

dispatch:beforeExecuteRoute

beforeExecuteRoute($dispatcher)

initialize() -> dispatch:afterInitialize

執(zhí)行路由到的方法

dispatch:afterExecuteRoute

dispatch:afterDispatch

afterExecuteRoute($dispatcher)

結(jié)束循環(huán)匹配路由

dispatch:afterDispatchLoop

其中,以“dispatch:”開頭的均為eventManager中定義的事件名稱。“xxx(...)”這種格式的均為控制器中的方法。

控制器命名

默認(rèn)調(diào)用IndexController控制器中的indexAction方法。

控制器名稱需要加Controller后綴,動作名稱需要加Action后綴。

控制器的首字母要大寫且繼承自Phalcon\Mvc\Controller。

控制器的文件名稱與控制器全名完全相同并加擴(kuò)展名“.php”。

視圖渲染

Phalcon\Mvc\View 默認(rèn)采用PHP本身作為模板引擎,此時應(yīng)該以.phtml作為視圖文件擴(kuò)展名。

可以在控制器方法中使用$this->view->setVar("postId", $postId);來傳遞變量到視圖,然后在視圖中用php來使用此變量,比如:<?php echo $postId;?>,setVar方法也可以通過接收關(guān)鍵字索引數(shù)組來一次傳遞多個值(類似于smarty中assign的批量賦值)。

Phalcon\Mvc\View 支持視圖分層。

分層渲染

第一步、渲染模板:

視圖文件目錄/小寫的控制器名(不含后綴)/方法名(不含后綴).phtml

并保存結(jié)果。級別代號LEVEL_ACTION_VIEW。

可在此模板中通過調(diào)用<?php echo $this->getContent() ?>輸出控制器中的輸出內(nèi)容(比如在控制器中使用echo輸出一些內(nèi)容)。

第二步、渲染模板(如果有):

視圖文件目錄/layouts/小寫的控制器名(不含后綴).phtml

并保存結(jié)果。級別代號LEVEL_LAYOUT。

可在此模板中通過調(diào)用<?php echo $this->getContent() ?>輸出第一步的模板結(jié)果。

第三步、渲染模板(如果有):

視圖文件目錄/index.phtml

并保存結(jié)果。級別代號LEVEL_MAIN_LAYOUT。

同樣的,可在此模板中通過調(diào)用<?php echo $this->getContent() ?>輸出第二步的模板結(jié)果。

最后保存的結(jié)果就是視圖的最終結(jié)果。

可以在控制器方法中使用$this->view->setTemplateAfter('common');來在第三步之前插入一個渲染操作,比如這里渲染模板:視圖文件目錄/layouts/common.phtml

渲染級別控制

可以在控制器方法中使用$this->view->setRenderLevel(View::LEVEL_NO_RENDER);來關(guān)閉渲染,或者僅僅渲染某個級別$this->view->setRenderLevel(View::LEVEL_ACTION_VIEW);

也可以使用$this->view->disableLevel(View::LEVEL_MAIN_LAYOUT);來禁止某個級別的渲染。

可以用$this->view->pick('index/pick');選擇視圖:

如果pick方法接收到一個不包含“/”的字符串則僅僅設(shè)置LEVEL_ACTION_VIEW級視圖;如果包含“/”則同時還會把第一個“/”前面的部分作為LEVEL_LAYOUT級視圖,比如這里會使用“視圖文件目錄/layouts/index.phtml”文件

如果接收到一個數(shù)字索引數(shù)組,則會將編號為0的元素作為LEVEL_ACTION_VIEW級視圖,將編號為1的元素作為LEVEL_LAYOUT級視圖

關(guān)閉視圖

如果你的控制器不在視圖里產(chǎn)生(或沒有)任何輸出,你可以禁用視圖組件來避免不必要的處理:

$this->view->disable();

在模板中包含局部模板

<?php $this->partial('shared/login');?>

或者同時傳遞變量給局部模板,每一個索引最終會作為變量在局部模板中被賦值:

$this->partial('shared/login',array(

'var1'=>'val1',

'var2'=>'val2'

));

?>

緩存視圖

在控制器方法中的代碼例子:

//Check whether the cache with key "downloads" exists or has expired

if ($this->view->getCache()->exists('downloads')) {

//Query the latest downloads

$latest = Downloads::find(array(

'order' => 'created_at DESC'

));

$this->view->latest = $latest;

}

//Enable the cache with the same key "downloads"

$this->view->cache(array(

'service' => 'myCache',//使用自己的緩存服務(wù),不設(shè)置時默認(rèn)為viewCache

'lifetime' => 86400,//緩存時間

'key' => 'downloads'//緩存索引名

));

注冊緩存服務(wù):

use Phalcon\Cache\Frontend\Output as OutputFrontend;

use Phalcon\Cache\Backend\Memcache as MemcacheBackend;

//Set the views cache service

$di->set('viewCache', function() {

//Cache data for one day by default

$frontCache = new OutputFrontend(array(

'lifetime' => 86400

));

//Memcached connection settings

$cache = new MemcacheBackend($frontCache, array(

'host' => 'localhost',

'port' => '11211'

));

return $cache;

});

其中“Phalcon\Cache\Frontend”中包含了對前臺數(shù)據(jù)的處理操作(比如數(shù)據(jù)格式編碼等);

“Phalcon\Cache\Backend”中包含了對各種后臺緩存引擎的操作。

使用模板引擎

在控制器方法中指定模板引擎:

// Using more than one template engine

$this->view->registerEngines(

array(

'.my-html' => 'MyTemplateAdapter',

'.phtml' => 'Phalcon\Mvc\View\Engine\Php'

)

);

方法Phalcon\Mvc\View::registerEngines()接受一個包含定義模板引擎數(shù)據(jù)的數(shù)組。每個引擎的鍵名是一個區(qū)別于其他引擎的拓展名。模板文件和特定的引擎關(guān)聯(lián)必須有這些擴(kuò)展名。

Phalcon\Mvc\View::registerEngines()會按照相關(guān)模板引擎定義的順序來執(zhí)行。如果Phalcon\Mvc\View發(fā)現(xiàn)視圖文件具有相同名稱但擴(kuò)展名不同,它只會使用第一個。

在注冊view服務(wù)時全局指定模板引擎:

use Phalcon\Mvc\View;

//Setting up the view component

$di->set('view', function() {

$view = new View();

//A trailing directory separator is required

$view->setViewsDir('../app/views/');

$view->registerEngines(array(

'.my-html' ='MyTemplateAdapter' //元素值可以是類名、服務(wù)名或返回模板引擎對象的匿名函數(shù)

));

return $view;

}, true);

Volt 視圖最終會被編譯成純PHP代碼

Volt模板引擎語法

3種不同含義的起始標(biāo)簽

{% ... %}包裹的標(biāo)簽用于賦值或執(zhí)行for循環(huán)、if條件判斷等語句

{{ ... }}包裹的標(biāo)簽用于打印表達(dá)式的結(jié)果到模板

{# ... #}包裹注釋,前后標(biāo)簽可以處于不同行

語法詳解

{{ post.title }}相當(dāng)于$post->title;

{{ post.getTypes().name }}相當(dāng)于$post->getTypes()->name;

{{ post['title'] }}相當(dāng)于$post['title'];

{{ post.title|e }}使用過濾器,豎線左邊表達(dá)式的值將會作為過濾器的第一個參數(shù);

{{ '%.2f'|format(post.price) }}相當(dāng)于執(zhí)行sprintf('%.2f', $post->price);

默認(rèn)過濾器列表:

Filter

Description

e

Applies Phalcon\Escaper->escapeHtml to the value

escape

Applies Phalcon\Escaper->escapeHtml to the value

escape_css

Applies Phalcon\Escaper->escapeCss to the value

escape_js

Applies Phalcon\Escaper->escapeJs to the value

escape_attr

Applies Phalcon\Escaper->escapeHtmlAttr to the value

trim

Applies the trim PHP function to the value. Removing extra spaces

left_trim

Applies the ltrim PHP function to the value. Removing extra spaces

right_trim

Applies the rtrim PHP function to the value. Removing extra spaces

striptags

Applies the striptags PHP function to the value. Removing HTML tags

slashes

Applies the slashes PHP function to the value. Escaping values

stripslashes

Applies the stripslashes PHP function to the value. Removing escaped quotes

capitalize

Capitalizes a string by applying the ucwords PHP function to the value

lower

Change the case of a string to lowercase

upper

Change the case of a string to uppercase

length

Counts the string length or how many items are in an array or object

nl2br

Changes newlines \n by line breaks (
). Uses the PHP function nl2br

sort

Sorts an array using the PHP function asort

keys

Returns the array keys using array_keys

join

Joins the array parts using a separator join

format

Formats a string using sprintf.

json_encode

Converts a value into its JSON representation

json_decode

Converts a value from its JSON representation to a PHP representation

abs

Applies the abs PHP function to a value.

url_encode

Applies the urlencode PHP function to the value

default

Sets a default value in case that the evaluated expression is empty

(is not set or evaluates to a falsy value)

convert_encoding

Converts a string from one charset to another

for循環(huán)用法

基礎(chǔ)用法:

{% for robot in robots %}

{{ robot.name|e }}

{% endfor %}

嵌套循環(huán):

{% for robot in robots %}

{% for part in robot.parts %}

Robot: {{ robot.name|e }} Part: {{ part.name|e }}

{% endfor %}

{% endfor %}

獲取索引值

{% set numbers = ['one': 1, 'two': 2, 'three': 3] %}

{% for name, value in numbers %}

Name: {{ name }} Value: {{ value }}

{% endfor %}

用if進(jìn)行篩選

{% for value in numbers if value < 2 %}

Value: {{ value }}

{% endfor %}

{% for name, value in numbers if name != 'two' %}

Name: {{ name }} Value: {{ value }}

{% endfor %}

else、elsefor

{% for robot in robots %}

Robot: {{ robot.name|e }} Part: {{ part.name|e }}

{% else %}{# else也可以寫成elsefor #}

There are no robots to show

{% endfor %}

可以在for結(jié)構(gòu)中使用{% break %}和{% continue %}來跳出和執(zhí)行下一次循環(huán)

if條件判斷

基本用法

{% if robot.type == "cyborg" %}

{{ robot.name|e }}

{% endif %}

{% if robot.type == "cyborg" %}

{{ robot.name|e }}

{% else %}

{{ robot.name|e }} (not a cyborg)

{% endif %}

{% if robot.type == "cyborg" %}

Robot is a cyborg

{% elseif robot.type == "virtual" %}

Robot is virtual

{% elseif robot.type == "mechanical" %}

Robot is mechanical

{% endif %}

if中可以使用的內(nèi)置變量:

Variable

Description

loop.index

The current iteration of the loop. (1 indexed)

loop.index0

The current iteration of the loop. (0 indexed)

loop.revindex

The number of iterations from the end of the loop (1 indexed)

loop.revindex0

The number of iterations from the end of the loop (0 indexed)

loop.first

True if in the first iteration.

loop.last

True if in the last iteration.

loop.length

The number of items to iterate

賦值

單個變量賦值:

{% set fruits = ['Apple', 'Banana', 'Orange'] %}

{% set name = robot.name %}

多個變量賦值:

{% set fruits = ['Apple', 'Banana', 'Orange'], name = robot.name, active = true %}

支持的字面值:

字面值

說明

“this is a string”

被單引號或雙引號括起來的內(nèi)容作為字符串

100.25

帶小數(shù)部分的數(shù)字作為(double/float)

100

不帶小數(shù)的數(shù)字作為整數(shù)(integer)

false

靜態(tài)內(nèi)容“false”作為布爾值中false

true

Constant “true” is the boolean true value

null

Constant “null” is the Null value

數(shù)組可以用中括號或花括號定義

{# Other simple array #}

{{ ['Apple', 1, 2.5, false, null] }}

{# Multi-Dimensional array #}

{{ [[1, 2], [3, 4], [5, 6]] }}

{# Hash-style array #}

{{ ['first': 1, 'second': 4/2, 'third': '3'] }}

{% set myArray = {'Apple', 'Banana', 'Orange'} %}

{% set myHash = {'first': 1, 'second': 4/2, 'third': '3'} %}

算術(shù)運算符和比較符與PHP語法中的一致,邏輯運算符為:or,and,not

if中的is測試操作

內(nèi)置支持的測試:

Test

Description

defined

Checks if a variable is defined (isset)

empty

Checks if a variable is empty

even

Checks if a numeric value is even

odd

Checks if a numeric value is odd

numeric

Checks if value is numeric

scalar

Checks if value is scalar (not an array or object)

iterable

Checks if a value is iterable. Can be traversed by a “for” statement

divisibleby

Checks if a value is divisible by other value

sameas

Checks if a value is identical to other value

type

Checks if a value is of the specified type

{%- macro my_input(name, class="input-text") %}

{% return text_field(name, 'class': class) %}

{%- endmacro %}

{# Call the macro #}

{{ '

' ~ my_input('name') ~ '

' }}

{{ '

' ~ my_input('name', 'input-text') ~ '

' }}

由以上代碼可見,模板中字符串間連接符為~!

Method

Volt function

Phalcon\Tag::linkTo

link_to

Phalcon\Tag::textField

text_field

Phalcon\Tag::passwordField

password_field

Phalcon\Tag::hiddenField

hidden_field

Phalcon\Tag::fileField

file_field

Phalcon\Tag::checkField

check_field

Phalcon\Tag::radioField

radio_field

Phalcon\Tag::dateField

date_field

Phalcon\Tag::emailField

email_field

Phalcon\Tag::numberField

number_field

Phalcon\Tag::submitButton

submit_button

Phalcon\Tag::selectStatic

select_static

Phalcon\Tag::select

select

Phalcon\Tag::textArea

text_area

Phalcon\Tag::form

form

Phalcon\Tag::endForm

end_form

Phalcon\Tag::getTitle

get_title

Phalcon\Tag::stylesheetLink

stylesheet_link

Phalcon\Tag::javascriptInclude

javascript_include

Phalcon\Tag::image

image

Phalcon\Tag::friendlyTitle

friendly_title

函數(shù)

Name

Description

content

Includes the content produced in a previous rendering stage

get_content

Same as ‘content’

partial

Dynamically loads a partial view in the current template

super

Render the contents of the parent block

time

Calls the PHP function with the same name

date

Calls the PHP function with the same name

dump

Calls the PHP function ‘var_dump’

version

Returns the current version of the framework

constant

Reads a PHP constant

url

Generate a URL using the ‘url’ service

模板的繼承

父模板(templates/base.volt)

`{% block title %}默認(rèn)標(biāo)題{% endblock %}`

子模板

{% extends "templates/base.volt" %}

{% block title %}重新定義的標(biāo)題{% endblock %}

父模板中塊(block)內(nèi)的內(nèi)容會被子模板中的同名塊中的內(nèi)容替換,除非在子模板中不存在該塊的定義。

如果想要保留或引用父模板中某block的內(nèi)容,可以在子模板的同名塊中使用`{{ super() }}`

新增模板函數(shù)

use Phalcon\Mvc\View\Engine\Volt;

$volt = new Volt($view, $di);

$compiler = $volt->getCompiler();

//This binds the function name 'shuffle' in Volt to the PHP function 'str_shuffle'

$compiler->addFunction('shuffle', 'str_shuffle');//第二個參數(shù)可以是函數(shù)名或匿名函數(shù)

新增過濾器

//This creates a filter 'hash' that uses the PHP function 'md5'

$compiler->addFilter('hash', 'md5');//第二個參數(shù)可以是函數(shù)名或匿名函數(shù)

緩存視圖片段

{% cache ("article-" ~ post.id) 3600 %}

{{ post.title }}

{{ post.content }}

{% endcache %}

可以在模板中直接通過服務(wù)名訪問通過DI注冊的服務(wù)。

在php模板中使用“$this->服務(wù)名”來訪問。

設(shè)計表單

模型

模型類的名稱使用表名稱且首字母大寫(如果表名稱含下劃線“_”,需要刪除下劃線并將原下劃線位置后的一個字符大寫),繼承于Phalcon\Mvc\Model。

例如,我們有數(shù)據(jù)表member_account,那么我們需要創(chuàng)建一個模型類MemberAccount。

模型類的文件名稱與模型類名稱一致。

數(shù)據(jù)庫操作方法

查找: find() findFirst()

$robots = Robots::find(array(

"type = 'virtual'",

"order" => "name",

"limit" => 100

));

foreach ($robots as $robot) {

echo $robot->name, "\n";

}

$robots = Robots::find(array(

"conditions" => "type = ?1",

"bind" => array(1 => "virtual") //綁定參數(shù)(數(shù)字占位符)

));

$robot = Robots::findFirst(array("type = 'virtual'", "order" => "name"));

echo "The first virtual robot name is ", $robot->name, "\n";

可用的查詢選項如下:

參數(shù)

描述

舉例

conditions

查詢操作的搜索條件。用于提取只有那些滿足指定條件的記錄。默認(rèn)情況下 Phalcon\Mvc\Model 假定第一個參數(shù)就是查詢條件。

"conditions" => "name LIKE 'steve%'"

columns

只返回指定的字段,而不是模型所有的字段。 當(dāng)用這個選項時,返回的是一個不完整的對象。

"columns" => "id, name"

bind

綁定與選項一起使用,通過替換占位符以及轉(zhuǎn)義字段值從而增加安全性。

"bind" => array("status" => "A", "type" => "some-time")

bindTypes

當(dāng)綁定參數(shù)時,可以使用這個參數(shù)為綁定參數(shù)定義額外的類型限制從而更加增強(qiáng)安全性。

"bindTypes" => array(Column::BIND_TYPE_STR, Column::BIND_TYPE_INT)

order

用于結(jié)果排序。使用一個或者多個字段,逗號分隔。

"order" => "name DESC, status"

limit

限制查詢結(jié)果的數(shù)量在一定范圍內(nèi)。

"limit" => 10 / "limit" => array("number" => 10, "offset" => 5)

group

從多條記錄中獲取數(shù)據(jù)并且根據(jù)一個或多個字段對結(jié)果進(jìn)行分組。

"group" => "name, status"

for_update

通過這個選項, Phalcon\Mvc\Model 讀取最新的可用數(shù)據(jù),并且為讀到的每條記錄設(shè)置獨占鎖。

"for_update" => true

shared_lock

通過這個選項, Phalcon\Mvc\Model 讀取最新的可用數(shù)據(jù),并且為讀到的每條記錄設(shè)置共享鎖。

"shared_lock" => true

cache

緩存結(jié)果集,減少了連續(xù)訪問數(shù)據(jù)庫。

"cache" => array("lifetime" => 3600, "key" => "my-find-key")

hydration

Sets the hydration strategy to represent each returned record in the result

"hydration" => Resultset::HYDRATE_OBJECTS

如果你愿意,除了使用數(shù)組作為查詢參數(shù)外,還可以通過一種面向?qū)ο蟮姆绞絹韯?chuàng)建查詢(更多可用類方法詳見源碼phalcon/mvc/model/criteria.zep):

$robots = Robots::query()

->where("type = :type:")

->andWhere("year < 2000")

->bind(array("type" => "mechanical")) //綁定參數(shù)(字符串占位符)

->order("name")

->execute();

最后,還有一個 findFirstBy() 方法。這個方法擴(kuò)展了前面提及的 “findFirst()” 方法。它允許您利用方法名中的屬性名稱,通過將要搜索的該字段的內(nèi)容作為參數(shù)傳給它,來快速從一個表執(zhí)行檢索操作。

的內(nèi)容為首字母大寫的數(shù)據(jù)表字段名(如果字段名稱含下劃線“_”,需要刪除下劃線并將原下劃線位置后的一個字符大寫)。

例如,數(shù)據(jù)表字段名為user_name,可以采用findFirstByUserName('admpub')方法查詢。

添加: create() 或 save()

//Creating a new robot

$robot = new Robots();

$robot->type = 'mechanical';

$robot->name = 'Astro Boy';

$robot->year = 1952;

$robot->create();

//Passing an array to create

$robot = new Robots();

$robot->create(array(

'type' => 'mechanical',

'name' => 'Astroy Boy',

'year' => 1952

));

更新: update() 或 save()

//Updating a robot name

$robot = Robots::findFirst("id=100");

$robot->name = "Biomass";

$robot->update();

//Passing an array to update

$robot->create(array(

'name' => 'Biomass'

),array('name'));//第二個參數(shù)用于指定允許設(shè)置的字段的名稱,不指定的話則表示允許數(shù)據(jù)表內(nèi)全部字段名稱的鍵。

如果傳入的數(shù)組的鍵與數(shù)據(jù)表字段名不一致,可以使用$robot->assign(, , )來賦值。例如:

$robot = new Robots();

$robot->assign(

array(

'name' ='Biomass'

),

array('name'=>'user_name'),

array('user_name')

);

$robot->create();

刪除: delete()

$robot = Robots::findFirst("id=100");

$robot->delete();

foreach (Robots::find("type = 'mechanical'") as $robot) {

$robot->delete();

}

運算:

count()

//How many robots are there?

$number = Robots::count();

echo "There are ", $number, "\n";

//How many mechanical robots are there?

$number = Robots::count("type='mechanical'");

echo "There are ", $number, " mechanical robots\n"

sum()

//How much are all robots?

$sum = Robots::sum(array('column' => 'price'));

echo "The total price of robots is ", $sum, "\n";

//How much are mechanical robots?

$sum = Robots::sum(array("type='mechanical'", 'column' => 'price'));

echo "The total price of mechanical robots is ", $sum, "\n";

average()

用法與sum類似

maximum()

用法與sum類似

minimum()

用法與sum類似

保存: save()

$robot = new Robots();

$robot->type = 'mechanical';

$robot->name = 'Astro Boy';

$robot->year = 1952;

if ($robot->save() == false) {

echo "Umh, We can't store robots right now ";

foreach ($robot->getMessages() as $message) {

echo $message;

}

} else {

echo "Great, a new robot was saved successfully!";

}

$robot = new Robots();

$robot->save(array('type'=>'mechanical'),array('type'));//參數(shù)分別為array data,array whiteList

指定數(shù)據(jù)返回類型

$findResult->setHydrateMode(Resultset::HYDRATE_ARRAYS);

可選的值有:Resultset::HYDRATE_ARRAYS、Resultset::HYDRATE_OBJECTS、Resultset::HYDRATE_RECORDS。

也可以這樣指定:

$robots = Robots::find(array(

'hydration' => Resultset::HYDRATE_ARRAYS

));

綁定參數(shù)

占位符

數(shù)字占位符在sql中的格式為“?數(shù)字”;

字符串占位符在sql中的格式為“:字符串:”。

參數(shù)類型

默認(rèn)的參數(shù)類型為\Phalcon\Db\Column::BIND_PARAM_STR。

支持的參數(shù)類型:

Column::BIND_PARAM_NULL 綁定null類型

Column::BIND_PARAM_INT 綁定整數(shù)類型

Column::BIND_PARAM_STR 綁定字符串類型

Column::BIND_PARAM_BOOL 綁定bool值類型

Column::BIND_PARAM_DECIMAL 綁定小數(shù)類型

$robots = Robots::find(array(

"conditions" => "name = :name: AND type = ?1",

"bind" => array('name'=>'admpub',1 => 'virtual'),

"bindTypes" => array(Column::BIND_TYPE_STR, Column::BIND_TYPE_STR)

));

模型關(guān)聯(lián)

有四種關(guān)聯(lián)類型:1對1,1對多,多對1,多對多。關(guān)聯(lián)可以是單向或者雙向的,每個關(guān)聯(lián)可以是簡單的(一個1對1的模型)也可以是復(fù)雜的(1組模型)。

在Phalcon中,關(guān)聯(lián)必須定義在某個模型的initialize()方法。通過方法belongsTo(),hasOne(),hasMany()和hasManyToMany()來定義當(dāng)前模型中字段到另一個模型中字段之間的關(guān)聯(lián)。上述每種方法都需要三個參數(shù):本地字段,引用的模型,引用的字段。

方法的具體含義:

Method

Description

hasMany

Defines a 1-n relationship

hasOne

Defines a 1-1 relationship

belongsTo

Defines a n-1 relationship

hasManyToMany

Defines a n-n relationship

多對多必須關(guān)聯(lián)3個模型,并分別設(shè)置它們的關(guān)聯(lián)字段

use Phalcon\Mvc\Model;

class Robots extends Model

{

public $id;

public $name;

public function initialize()

{

$this->hasManyToMany(

"id",//當(dāng)前模型中的字段

"RobotsParts",//關(guān)聯(lián)到的中間表模型

"robots_id", "parts_id",//分別為當(dāng)前模型id與中間表相關(guān)聯(lián)的字段和中間表與第三張表關(guān)聯(lián)的字段,這兩個字段都在中間表內(nèi)

"Parts",//第三張表模型名

"id"//第三張表中與中間表關(guān)聯(lián)的字段

);

}

}

對于使用名稱空間的情況下,可以設(shè)置別名,或在model類中使用以下方法,但是對于多對多的情況,對于第三張表由于無法設(shè)置別名,只能使用以下方法:

$this->getRelated('Robots\Parts');

驗證信息

Phalcon\Mvc\Model可以生成如下驗證類型信息:

Type

Description

PresenceOf

Generated when a field with a non-null attribute on the database is trying to insert/update a null value

ConstraintViolation

Generated when a field part of a virtual foreign key is trying to insert/update a value that doesn’t exist in the referenced model

InvalidValue

Generated when a validator failed because of an invalid value

InvalidCreateAttempt

Produced when a record is attempted to be created but it already exists

InvalidUpdateAttempt

Produced when a record is attempted to be updated but it doesn’t exist

###事件

Phalcon\Mvc\Model會根據(jù)各個操作依序各自執(zhí)行如下事件:

操作

事件名

是否能終止執(zhí)行?

說明

Inserting/Updating

beforeValidation

YES

Is executed before the fields are validated for not nulls/empty strings or foreign keys

Inserting

beforeValidationOnCreate

YES

Is executed before the fields are validated for not nulls/empty strings or foreign keys when an insertion operation is being made

Updating

beforeValidationOnUpdate

YES

Is executed before the fields are validated for not nulls/empty strings or foreign keys when an updating operation is being made

Inserting/Updating

onValidationFails

YES (already stopped)

Is executed after an integrity validator fails

Inserting

afterValidationOnCreate

YES

Is executed after the fields are validated for not nulls/empty strings or foreign keys when an insertion operation is being made

Updating

afterValidationOnUpdate

YES

Is executed after the fields are validated for not nulls/empty strings or foreign keys when an updating operation is being made

Inserting/Updating

afterValidation

YES

Is executed after the fields are validated for not nulls/empty strings or foreign keys

Inserting/Updating

beforeSave

YES

Runs before the required operation over the database system

Updating

beforeUpdate

YES

Runs before the required operation over the database system only when an updating operation is being made

Inserting

beforeCreate

YES

Runs before the required operation over the database system only when an inserting operation is being made

Updating

afterUpdate

NO

Runs after the required operation over the database system only when an updating operation is being made

Inserting

afterCreate

NO

Runs after the required operation over the database system only when an inserting operation is being made

Inserting/Updating

afterSave

NO

Runs after the required operation over the database system

驗證數(shù)據(jù)

use Phalcon\Mvc\Model;

use Phalcon\Mvc\Model\Validator\Uniqueness;

use Phalcon\Mvc\Model\Validator\InclusionIn;

class Robots extends \Phalcon\Mvc\Model

{

public function validation()

{

$this->validate(new InclusionIn(

array(

"field" => "type",

"domain" => array("Mechanical", "Virtual")

)

));

$this->validate(new Uniqueness(

array(

"field" => "name",

"message" => "The robot name must be unique"

)

));

return $this->validationHasFailed() != true;

}

}

Phalcon\Mvc\Model\Validator包含以下驗證:

Email

Exclusionin

Inclusionin

Numericality

PresenceOf

Regex

StringLength

Uniqueness

Url

字段注解策略

use Phalcon\Mvc\Model;

class Robots extends Model

{

/**

* @Primary

* @Identity

* @Column(type="integer", nullable=false)

*/

public $id;

/**

* @Column(type="string", length=70, nullable=false)

*/

public $name;

/**

* @Column(type="string", length=32, nullable=false)

*/

public $type;

/**

* @Column(type="integer", nullable=false)

*/

public $year;

}

支持如下注解:

Name

Description

Primary

Mark the field as part of the table’s primary key

Identity

The field is an auto_increment/serial column

Column

This marks an attribute as a mapped column

注解@Column支持如下參數(shù):

Name

Description

type

The column’s type (string, integer, decimal, boolean)

length

The column’s length if any

nullable

Set whether the column accepts null values or not

PHQL

在執(zhí)行操作之前必須要有相應(yīng)的model文件存在。

創(chuàng)建 PHQL 查詢

方式一、直接通過創(chuàng)建Phalcon\Mvc\Model\Query類的實例來查詢:

use Phalcon\Mvc\Model\Query;

// Instantiate the Query

$query = new Query("SELECT * FROM Cars", $this->getDI());

// Execute the query returning a result if any

$cars = $query->execute();

方式二、在控制器或視圖中,通過modelsManager(模型管理器)來查詢:

//Executing a simple query

$query = $this->modelsManager->createQuery("SELECT * FROM Cars");

$cars = $query->execute();

//With bound parameters

$query = $this->modelsManager->createQuery("SELECT * FROM Cars WHERE name = :name:");

$cars = $query->execute(array('name' => 'Audi'));

也可以簡化的寫為:

//Executing a simple query

$cars = $this->modelsManager->executeQuery("SELECT * FROM Cars");

//Executing with bound parameters

$cars = $this->modelsManager->executeQuery("SELECT * FROM Cars WHERE name = :name:", array('name' => 'Audi'));

注意:FROM后面的那個不是表名稱而是模型類名稱,這與真正的SQL語句是不同的。由于是模型類名稱,所以也可以帶名稱空間。

executeQuery($phql)與Cars::find()的查詢結(jié)果是一樣的;

executeQuery($phql)->getFirst()與Cars::findFirst()結(jié)果一樣。

插入數(shù)據(jù):

// Inserting using placeholders

$phql = "INSERT INTO Cars (name, brand_id, year, style) "

. "VALUES (:name:, :brand_id:, :year:, :style:)";

$status=$manager->executeQuery($sql,

array(

'name' => 'Lamborghini Espada',

'brand_id' => 7,

'year' => 1969,

'style' => 'Grand Tourer',

)

);

//Create a response

#$response = new Response();

//Check if the insertion was successful

if ($status->success() == true) {

//Change the HTTP status

#$response->setStatusCode(201, "Created");

#$robot->id = $status->getModel()->id;

#$response->setJsonContent(array('status' => 'OK', 'data' => $robot));

} else {

//Change the HTTP status

#$response->setStatusCode(409, "Conflict");

//Send errors to the client

$errors = array();

foreach ($status->getMessages() as $message) {

$errors[] = $message->getMessage();

}

#$response->setJsonContent(array('status' => 'ERROR', 'messages' => $errors));

}

更新、刪除數(shù)據(jù)與插入數(shù)據(jù)類似。

使用查詢構(gòu)建器創(chuàng)建查詢

//Getting a whole set

$robots = $this->modelsManager->createBuilder()

->from('Robots')

->join('RobotsParts')

->orderBy('Robots.name')

->getQuery()

->execute();

//Getting the first row

$robots = $this->modelsManager->createBuilder()

->from('Robots')

->join('RobotsParts')

->orderBy('Robots.name')

->getQuery()

->getSingleResult();

綁定參數(shù)

//Passing parameters in the query construction

$robots = $this->modelsManager->createBuilder()

->from('Robots')

->where('name = :name:', array('name' => $name))

->andWhere('type = :type:', array('type' => $type))

->getQuery()

->execute();

//Passing parameters in query execution

$robots = $this->modelsManager->createBuilder()

->from('Robots')

->where('name = :name:')

->andWhere('type = :type:')

->getQuery()

->execute(array('name' => $name, 'type' => $type));

轉(zhuǎn)義保留字

將保留字用中括號括起來。例如:

$phql = "SELECT * FROM [Update]";

$result = $manager->executeQuery($phql);

$phql = "SELECT id, [Like] FROM Posts";

$result = $manager->executeQuery($phql);

其它

URL重定向

重定向用來在當(dāng)前的處理中跳轉(zhuǎn)到其它的處理流:

// 此路由重定向到其它的路由

$app->post('/old/welcome', function () use ($app) {

$app->response->redirect("new/welcome")->sendHeaders();

});

$app->post('/new/welcome', function () use ($app) {

echo 'This is the new Welcome';

});

有以下跳轉(zhuǎn)方式:

//設(shè)置一個內(nèi)部跳轉(zhuǎn)

$this->response->redirect( 'posts/index' );

// 外部跳轉(zhuǎn)url

$this->response->redirect( 'http://www.admpub.com/blog', true );

// 設(shè)置跳轉(zhuǎn) http狀態(tài)

$this->resopnse->redirect( 'http://www.admpub.com/blog' , true , 301 );

重定向不會禁用視圖組件。因此,如果你想從一個controller/action重定向到另一個controller/acton上,視圖將正常顯示。當(dāng)然,你也可以使用 $this->view->disable() 禁用視圖輸出。

存儲/獲取 Session數(shù)據(jù)

$this->session->set("session_name", "session_value");

$this->session->has("session-name");

$this->session->get("session-name");

$this->session->remove("session-name");

$this->session->destroy();

From 表單接收

//獲取$_POST['name'],第二個參數(shù)是過濾器,還可以傳遞第三個參數(shù)作為默認(rèn)值,第四個參數(shù)為是否允許為空。

//如果第一個參數(shù)為null或不傳遞任何參數(shù)的話,返回$_POST,以下getXXX()方法類似。

$name= $this->request->getPost("name", "string");

//獲取$_GET['email']

$email=$this->request->getQuery("email", "email");

//獲取$_REQUEST['email']

$email=$this->request->get("email", "email");

還有 $this->request->getPut、$this->request->getServer等等。

要判斷某個鍵的元素是否存在只需要將這里的get換成has即可。

比如:hasQuery('email')、has('email')、hasPost('email')、hasPut('email')、hasServer('HTTP_REFERER')。

支持的過濾器有:

email

absint

int

int!

使用intval函數(shù)處理

string

float

float!

使用doubleval函數(shù)處理

alphanum

trim

striptags

lower

upper

request的更多方法請參考phalcon源代碼:phalcon/http/request.zep

從容器中獲取的服務(wù)的最簡單方式就是只用get方法,它將從容器中返回一個新的實例:

<?php $request = $di->get('request'); ?>

或者通過下面這種魔術(shù)方法的形式調(diào)用:

<?php $request = $di->getRequest(); ?>

處理Not-Found

當(dāng)用戶訪問未定義的路由時, 微應(yīng)用會試著執(zhí)行 "Not-Found"處理器。

$app->notFound(function () use ($app) {

$app->response->setStatusCode(404, "Not Found")->sendHeaders();

echo 'This is crazy, but this page was not found!';

});

微應(yīng)用

事件名

觸發(fā)

是否可中止操作?

before

應(yīng)用請求處理之前執(zhí)行,常用來控制應(yīng)用的訪問權(quán)限

Yes

after

請求處理后執(zhí)行,可以用來準(zhǔn)備回復(fù)內(nèi)容

No

finish

發(fā)送回復(fù)內(nèi)容后執(zhí)行, 可以用來執(zhí)行清理工作

No

### REST API

[https://docs.phalconphp.com/zh/latest/reference/tutorial-rest.html](https://docs.phalconphp.com/zh/latest/reference/tutorial-rest.html)

使用 phalcon devtools

如果提醒無法找到類這樣的錯誤提示,需要在phalcon.php文件中添加以下代碼:

spl_autoload_register(function($className){

$classDir = __DIR__.'/scripts/';

$classFile = $classDir . str_replace('\\', '/', $className) . '.php';

if (file_exists($classFile)) require_once($classFile);

});

把所有文件復(fù)制到現(xiàn)有phalcon項目下新建的“devtools”文件夾中,并將其中的webtools.php復(fù)制到public文件夾下,并在public文件夾內(nèi)新建文件webtools.config.php,內(nèi)容為:

define('PTOOLSPATH',__DIR__.'/../devtools/');

define('PTOOLS_IP','127.0.0.1');

spl_autoload_register(function($className){

$classDir = PTOOLSPATH.'/scripts/';

$classFile = $classDir . str_replace('\\', '/', $className) . '.php';

if (file_exists($classFile)) require_once($classFile);

});

修改public文件夾下的webtools.php文件,將其中的require 'webtools.config.php';剪切到文件最開頭的<?php下一行 。

經(jīng)過測試,該工具對PHP版本要求較高,我在PHP5.4下無法使用。

#End

總結(jié)

以上是生活随笔為你收集整理的php框架费尔康,GitHub - majixian/study-phalcon: phalcon(费尔康)框架学习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

国产成人一区二区三区在线观看 | 1区2区视频| 欧美国产日韩久久 | 国产黄色电影 | 97视频在线免费播放 | 国产精品视频一二三 | 91人人人 | 免费在线成人av电影 | 中文字幕一区二区三区四区 | 天天操夜夜曰 | 天天色天天干天天色 | 在线成人免费电影 | 在线直播av| 久久中文欧美 | 久久国产亚洲精品 | 欧美国产高清 | 国产中文字幕在线观看 | 日韩成人不卡 | 97精品国产91久久久久久久 | 亚洲电影在线看 | 日本丰满少妇免费一区 | 福利视频第一页 | 色88久久| 午夜影院先 | 国产日韩在线一区 | 国产不卡av在线播放 | www.狠狠色 | 精品久久久久久久 | 91视频这里只有精品 | 久久伊人精品一区二区三区 | 日韩免费电影在线观看 | 爱情影院aqdy鲁丝片二区 | 久久综合日 | 亚洲一区黄色 | 热久久视久久精品18亚洲精品 | 亚洲天天综合网 | 在线精品国产 | 国内精品亚洲 | 探花视频在线观看 | 国产不卡在线视频 | 精品久久九九 | 亚洲国内精品视频 | 玖玖在线精品 | 麻豆传媒视频在线播放 | 久草在线免费看视频 | 久久久精品欧美一区二区免费 | 天天摸天天干天天操天天射 | 91资源在线观看 | 久久精品免费 | 四虎影视久久久 | 六月丁香激情综合色啪小说 | 久久夜色精品国产欧美一区麻豆 | 伊人首页| 丁五月婷婷 | 操久久网 | 午夜精品一区二区三区在线播放 | 久久久久久久久久久免费av | 国产一级淫片免费看 | 少妇性aaaaaaaaa视频 | 久草在在线视频 | 国产免费小视频 | 国产又粗又猛又爽 | 国产高清视频在线播放 | 欧美aa级| 久草视频观看 | 韩日精品在线观看 | 波多野结衣电影久久 | 日韩成人欧美 | 亚洲日韩中文字幕 | 亚洲成人999| 在线成人免费电影 | 国产精品com | 婷婷5月色 | 亚洲国产精品久久久久婷婷884 | 成人av资源网 | 欧美一级久久 | 国产精品美女久久久久久 | 久久超碰97 | 国产亚洲视频在线观看 | 91福利专区| 亚洲 成人 一区 | 一区二区三区三区在线 | 亚洲人xxx| 中文字幕乱码在线播放 | av在线8| 在线国产日韩 | 99精品视频网站 | 久久国产精品系列 | 果冻av在线 | 91在线蜜桃臀 | 99精品99| 中文字幕中文字幕 | 久久大香线蕉app | 亚洲国产高清在线 | 亚洲综合色站 | 国产在线播放一区二区 | 国产精品欧美激情在线观看 | 在线观看91精品国产网站 | av中文字幕第一页 | 国产精品影音先锋 | 欧美91成人网 | 精品久久片 | 国产在线 一区二区三区 | 91丨九色丨国产在线观看 | 日韩精品一区在线播放 | 韩国三级一区 | 九色91av | 久久综合九色综合97婷婷女人 | 国产精品中文在线 | 日韩一二区在线 | 国产精品久久久久久吹潮天美传媒 | 精品久久免费看 | 久久精品看 | 欧美一区二区三区免费观看 | 国产香蕉在线 | 成人黄色大片在线免费观看 | 干综合网 | 欧美亚洲精品一区 | 国产精品二区在线 | 国产日韩在线一区 | 久久99热精品这里久久精品 | 国产精品久久久久久久久久久杏吧 | 午夜影视一区 | 九九热免费在线视频 | 国产精品久久久久久久久搜平片 | 免费电影一区二区三区 | 国产在线观看av | 久久久久久久久久久精 | 日韩av图片 | 久久影院中文字幕 | 国产精品自产拍在线观看网站 | 国产高清免费观看 | 香蕉视频国产在线 | 亚洲日本在线视频观看 | 九九热免费视频在线观看 | 激情五月五月婷婷 | 久久伦理电影 | 国产视频精品免费 | 亚洲视频在线观看免费 | 国产在线免费观看 | 欧美综合久久 | 在线播放亚洲 | 欧美男男激情videos | 久久精品女人毛片国产 | 韩国av电影网 | 97在线观看视频 | 51久久夜色精品国产麻豆 | 亚洲人人精品 | 91激情视频在线观看 | 在线播放日韩 | 久久国产精品一区二区三区 | 超碰在线9 | 99爱这里只有精品 | 少妇bbb搡bbbb搡bbbb′ | 黄色软件在线观看 | 2023国产精品自产拍在线观看 | 免费观看福利视频 | 在线免费黄色 | 91看片网址 | 免费在线观看av电影 | 国产精品成人一区二区三区吃奶 | 99久久久久久国产精品 | 九九亚洲精品 | 女人久久久久 | 精品亚洲一区二区三区 | 欧美精品一二 | 五月天久久 | 色在线中文字幕 | 欧美精品一区二区免费 | 综合网在线视频 | 日韩视频一区二区三区 | 日本爽妇网 | 日韩av一区二区三区 | 在线视频日韩一区 | 久久久久久久99 | 13日本xxxxxⅹxxx20| 免费电影一区二区三区 | 一本一本久久a久久精品综合小说 | 亚洲年轻女教师毛茸茸 | 国产一级黄色av | www.777奇米 | 欧美日韩一区二区三区在线免费观看 | 国产91对白在线播 | 日韩成人中文字幕 | 色欲综合视频天天天 | 久久人人爽人人爽 | 99电影456麻豆 | 九九爱免费视频在线观看 | 久久手机免费观看 | 成人a免费视频 | 精品国产1区二区 | 国产亚洲精品久久久久5区 成人h电影在线观看 | 波多野结衣小视频 | 欧美精品免费在线观看 | 亚洲视频高清 | 国产又粗又猛又黄又爽 | 国产一区二区免费 | 69国产精品视频免费观看 | 91精品亚洲影视在线观看 | 免费a级大片 | 99热9| 成人久久久精品国产乱码一区二区 | 国产做爰视频 | 男女精品久久 | 九九导航 | 久99久视频| 青青河边草免费视频 | 在线观看亚洲视频 | 一区二区精品视频 | 精品一区二区三区在线播放 | 国产精品免费一区二区三区在线观看 | 国产一级片免费视频 | 在线国产中文 | 色一色在线| 色婷在线 | 麻豆成人精品视频 | 久久久久国产精品www | 婷婷六月天在线 | 久久精品这里热有精品 | 国产一级精品绿帽视频 | 免费看的国产视频网站 | 国产白浆视频 | 国产一区二区精品久久 | 国产亚洲在线观看 | 99热最新精品 | 久久国产一区二区 | 国产精品中文字幕av | 国产亚洲人成网站在线观看 | 欧美激精品 | 国产女v资源在线观看 | 免费成人黄色av | 亚洲a资源| 日日操夜夜操狠狠操 | 亚洲精品免费观看 | 青青草在久久免费久久免费 | 激情偷乱人伦小说视频在线观看 | www.久久久com | 中文字幕 国产视频 | 69国产精品成人在线播放 | 日韩动漫免费观看高清完整版在线观看 | 手机色站| 国产拍揄自揄精品视频麻豆 | 中文字幕 国产专区 | 欧美大片www | av三级av| 99视频在线精品国自产拍免费观看 | 丁香婷婷综合网 | 国产亚洲视频在线观看 | 午夜视频在线观看一区二区三区 | 黄色视屏在线免费观看 | 中文字幕亚洲精品日韩 | 免费av观看网站 | 欧美成人中文字幕 | 色丁香色婷婷 | 国产无遮挡又黄又爽馒头漫画 | 国产成人综合图片 | 免费看久久久 | 99国产情侣在线播放 | 成人影片在线免费观看 | 久久国产精品99久久久久久进口 | 久久久国际精品 | 日韩二区三区在线 | 久久久久免费精品 | 日日夜夜爱| 色视频网站在线观看一=区 a视频免费在线观看 | 青青草国产在线 | a午夜电影 | 久久久.com | 成全在线视频免费观看 | 久久av中文字幕片 | 精品久久1 | 日韩一区二区在线免费观看 | 韩国av永久免费 | 国产第一页在线观看 | 特级毛片网站 | 狠狠狠的干 | 国产二区av | 亚洲影音先锋 | 国产精品国产亚洲精品看不卡 | 一区二区三区免费在线观看视频 | 亚洲国产成人在线观看 | 欧美一级欧美一级 | 日本特黄一级片 | 99tvdz@gmail.com | 亚洲 欧美 综合 在线 精品 | 射射射av| 深爱激情五月网 | 精品久久福利 | 久久久久久久久久久网站 | 天天色综合久久 | 午夜精品久久久久久久久久 | 日日爱影视 | 99免费精品视频 | 国产日韩欧美网站 | 欧美少妇的秘密 | 久久婷五月 | 91日韩在线专区 | 91九色视频网站 | 久久乱码卡一卡2卡三卡四 五月婷婷久 | 日日夜夜干 | 午夜精品久久久久久久久久 | 中文字幕第一页av | 久久五月婷婷丁香社区 | 欧美日韩国产亚洲乱码字幕 | 毛片美女网站 | 国产精品久久久久aaaa | 最新色视频 | 欧美日韩国产精品久久 | 国产精品99久久久久久人免费 | 国产精品九九久久99视频 | 久青草国产在线 | 久久久久久国产精品999 | 亚洲色图27p | 国产黄免费看 | 午夜精品导航 | 欧美精品久久久久久 | 亚洲视频精选 | 999久久国产精品免费观看网站 | 亚洲开心色 | 不卡的av中文字幕 | 久久精品国产成人 | 久久久久网址 | 久久艹免费 | 久久国产精品99精国产 | www日日夜夜 | 久久久首页 | 69xx视频| 久久电影中文字幕视频 | 在线99| 国产精品6 | 久久亚洲欧美 | 人人爽人人射 | 国产精品久久网站 | 在线导航av | 免费在线观看av网站 | 成人在线视频在线观看 | 最近免费中文视频 | 999男人的天堂 | 亚洲天堂网视频 | 日韩欧美精品在线 | 日本精品视频一区二区 | 精品无人国产偷自产在线 | 成人黄色在线播放 | 顶级欧美色妇4khd | 日韩欧美视频免费看 | 亚洲天堂毛片 | 亚洲国产免费网站 | 欧美精品一区二区性色 | 欧美福利久久 | 久久精品这里热有精品 | 中文字幕国产视频 | 97国产情侣爱久久免费观看 | 人人干在线 | 久久亚洲区 | 亚洲精品国产拍在线 | 成人免费网站在线观看 | av在线专区| 精品国产自在精品国产精野外直播 | 国产成人一区二区三区电影 | 国产aa免费视频 | 欧美日产一区 | 91麻豆精品国产91久久久更新时间 | 国产小视频在线看 | 91视频链接 | 国产精品入口66mio女同 | 日韩视频一区二区在线观看 | 九色在线| 911香蕉视频 | 天天射天天操天天色 | 天天操夜夜叫 | 激情网综合 | 精品美女久久久久久免费 | 亚洲网站在线 | av丁香花| 日韩啪啪小视频 | 午夜精品三区 | 黄色成人av | 色婷婷中文| 国产福利网站 | 国产蜜臀av| 色橹橹欧美在线观看视频高清 | 精品在线观看国产 | 最近中文国产在线视频 | 国产一区二区不卡在线 | 久久精国产| 亚洲国产久| 色网免费观看 | 欧美a视频在线观看 | 日本不卡一区二区 | 又黄又刺激视频 | 天天射天天爱天天干 | 99视频免费观看 | 在线免费高清视频 | 福利一区二区三区四区 | 国产成人精品一二三区 | 久久久久久欧美二区电影网 | 日本系列中文字幕 | 日本资源中文字幕在线 | 久久免费视频网 | 婷婷五天天在线视频 | 天天射天天艹 | 成人免费网站在线观看 | 97成人精品视频在线播放 | 在线免费黄色毛片 | 中文字幕日本在线观看 | 国产精品一区二区在线观看 | 亚洲精品免费在线播放 | 久久电影日韩 | 在线观看免费中文字幕 | a'aaa级片在线观看 | 日本精品xxxx| 婷婷丁香狠狠爱 | 在线视频观看你懂的 | 亚洲电影图片小说 | 日韩二区在线观看 | 亚洲aⅴ免费在线观看 | 欧美aa在线观看 | 国产精品美女免费 | www免费 | 中文在线免费一区三区 | 国产精华国产精品 | 亚洲欧洲精品一区二区 | 在线观看岛国 | 正在播放日韩 | 911国产 | 久草在线免费新视频 | 天天射天天搞 | 操少妇视频| 精品免费99久久 | 成人黄色在线观看视频 | 久久国产精品久久精品 | 激情久久影院 | 日韩欧美视频免费在线观看 | 成年人在线视频观看 | 亚洲欧美视频一区二区三区 | 日韩视频免费在线观看 | 96在线 | 91精品小视频 | 精品超碰| 99精品黄色片免费大全 | 国产精品一区二区三区免费视频 | 啪嗒啪嗒免费观看完整版 | 中文网丁香综合网 | 日韩av电影免费观看 | 在线观看网站黄 | 天天草综合 | 午夜精品成人一区二区三区 | 国产 日韩 在线 亚洲 字幕 中文 | 一区二区激情 | 日韩视频一 | 国产视频第二页 | 久久午夜影院 | 国产色拍拍拍拍在线精品 | 天天射天天射天天射 | 天天操天天操天天操天天操 | 99热精品国产一区二区在线观看 | 免费在线观看视频a | 亚洲欧美视频 | www.成人sex | 中文字幕九九 | 一区二区视频电影在线观看 | 婷婷久久一区二区三区 | 国产精品麻豆99久久久久久 | 亚洲精品中文在线 | 奇米四色影狠狠爱7777 | 久久九九久久精品 | 日韩精品aaa | 国产资源在线免费观看 | 在线观看精品黄av片免费 | 国产网红在线观看 | 丁香婷婷激情国产高清秒播 | av大片免费| 日韩精品三区四区 | 亚洲春色奇米影视 | 亚洲欧美日韩精品久久久 | 精品美女久久久久久免费 | 五月激情五月激情 | 久久电影色 | 69性欧美| 亚洲高清网站 | 国产精品一区二区av麻豆 | 91在线视频播放 | 亚洲在线a | 色综合久| 欧美性生交大片免网 | 中文字幕无吗 | 国产香蕉在线 | 日日爽日日操 | 国产精品av在线免费观看 | 九九久久久久99精品 | 中文字幕 91 | 日韩av一区二区在线 | 亚洲成人免费 | 午夜精品久久一牛影视 | 欧美日韩高清一区 | 天天草天天操 | 国产成人黄色网址 | 激情黄色一级片 | 色av资源网 | 亚洲少妇激情 | 日韩欧美在线综合网 | 天天操天天干天天综合网 | 色久五月| 欧美久久久久久久久中文字幕 | 欧美国产亚洲精品久久久8v | 激情婷婷六月 | 国产亚洲成人网 | 超级碰碰碰视频 | 五月天亚洲精品 | 黄色成人av在线 | 国产理论一区二区三区 | 欧美激情精品久久久 | 蜜桃视频在线观看一区 | 国产午夜三级一区二区三 | 色综合色综合色综合 | 99久久精品国产一区二区三区 | 一级性av | 精品九九九 | 国产精品久久久久久欧美 | 久久免费视频1 | 久久天堂影院 | 一区二区三区视频在线 | 91完整版观看| 国产精品久久电影网 | 国产精品女人久久久久久 | 成人动态视频 | 综合激情网... | 2021国产在线视频 | 国产精品男女 | 涩涩色亚洲一区 | 久久经典国产 | 66av99精品福利视频在线 | 久久久国产精品一区二区中文 | 久久人网 | 四虎海外影库www4hu | 久久视频免费在线观看 | 999视频在线播放 | 99久精品视频 | 欧美 日韩 性 | 久久伊人精品一区二区三区 | 国产精品一区在线观看你懂的 | 日韩欧美视频在线免费观看 | 精品亚洲网 | 欧美日韩一区二区三区视频 | 久草观看 | 色婷婷综合久久久中文字幕 | 91高清免费 | 一区二区三区在线不卡 | 在线精品视频免费播放 | www五月天婷婷 | 欧美成人理伦片 | 亚洲日本va午夜在线电影 | 天天爱天天操天天射 | 日韩免费在线观看视频 | 国产 精品 资源 | 久久免费99精品久久久久久 | 在线播放一区二区三区 | 97av影院| 国内偷拍精品视频 | 久久国产高清 | 久久99网| 日韩欧美精品免费 | 久久人网| 亚洲91av| 91精品国产九九九久久久亚洲 | 日本aaa在线观看 | 在线岛国av | 国内免费久久久久久久久久久 | 女人魂免费观看 | 综合色综合 | 天天夜夜狠狠操 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 国产一区成人 | 六月婷操 | 成人高清在线观看 | 国产亚洲精品久久久久动 | 天天射天天干天天爽 | 热久久视久久精品18亚洲精品 | 三日本三级少妇三级99 | 色综合久久久久久久久五月 | 欧美看片 | 亚洲最新合集 | 久久精品精品 | 日韩电影黄色 | 国产污视频在线观看 | 欧美日韩xxxxx | 黄网站大全 | 婷婷激情站 | 在线涩涩 | 久久精品三 | 婷婷在线网 | 少妇资源站 | 成人羞羞免费 | 日日夜夜天天久久 | 中文字幕在线看视频国产 | 97品白浆高清久久久久久 | 天天操天天干天天综合网 | 99精品热视频只有精品10 | 毛片永久免费 | 国产在线精品一区二区三区 | 久久情侣偷拍 | 黄色av免费电影 | 亚洲精品视频在线免费 | 天天色天天爱天天射综合 | 国产精品久久久av | 婷婷丁香在线视频 | 亚洲aⅴ乱码精品成人区 | 午夜黄色影院 | 中文字幕在线免费观看 | 91精品久久久久久综合乱菊 | 亚洲精品午夜国产va久久成人 | 久久久午夜电影 | 免费在线国产黄色 | 国产精品自拍在线 | 五月天国产精品 | 国产欧美精品一区aⅴ影院 99视频国产精品免费观看 | 免费久久99精品国产婷婷六月 | 中文字幕在线观看视频一区 | 韩日精品中文字幕 | 日韩综合在线观看 | 日韩v在线 | 亚洲午夜久久久影院 | 国产天天综合 | 日本中文字幕电影在线免费观看 | 三级黄免费看 | 九九免费精品视频在线观看 | 97在线超碰 | 欧美精品午夜 | 亚洲婷婷丁香 | 日本精品一区二区三区在线播放视频 | 91九色在线视频观看 | 亚洲三级在线免费观看 | 在线观看91视频 | 日韩中文免费视频 | 高清不卡毛片 | 91手机视频 | 国产香蕉久久精品综合网 | 国产精彩在线视频 | 这里只有精品视频在线观看 | 久久精品在线免费观看 | 久久久性| 国产一区二区在线播放视频 | 免费观看国产成人 | 亚洲女在线| 国产成人av在线影院 | 国产黄色理论片 | 欧美另类一二三四区 | 国产一区二区精品91 | 又爽又黄又刺激的视频 | 国产精品成人av电影 | 成人av亚洲 | 日韩免费精品 | 国产精品1区2区3区 久久免费视频7 | 中文一区在线 | 91视频免费观看 | 天天拍天天操 | 美女在线免费视频 | 又紧又大又爽精品一区二区 | 成人av在线电影 | 成年人视频在线免费观看 | 日韩影视在线 | 精品在线不卡 | 成人国产精品一区 | 亚洲电影久久 | 91精品导航 | 97精品在线视频 | 久久99国产精品久久99 | 在线 国产 亚洲 欧美 | 亚洲欧美日韩精品一区二区 | 天堂av在线中文在线 | 91免费在线播放 | 中文字幕av免费观看 | 婷婷国产视频 | 精品1区二区 | 黄污在线看| 91精品国产九九九久久久亚洲 | 欧美韩国日本在线 | 久一久久 | 欧美-第1页-屁屁影院 | 美女网站色在线观看 | 天天操天天射天天舔 | 久久99九九99精品 | av免费观看网站 | 天堂av高清 | 五月宗合网 | 成人蜜桃 | 亚洲在线黄色 | 久久理论电影网 | 亚洲专区在线播放 | 国产探花视频在线播放 | 国产又粗又长又硬免费视频 | 精品一区二区三区香蕉蜜桃 | 久久久久成人精品 | 国际av在线 | 国产精品va在线观看入 | 国产精品色在线 | 欧美黑人xxxx猛性大交 | 国产成人一区在线 | 久久久久久久电影 | 狠狠干,狠狠操 | 天天干夜夜夜操天 | 亚洲色图22p | 欧美一区二区三区免费观看 | 精品国产一区二区在线 | 91在线观看黄 | 久久久久国产精品视频 | 国产黄色视 | 夜夜视频 | 久草视频在线免费播放 | 99热高清 | 在线观看韩日电影免费 | 亚洲国产小视频在线观看 | 日韩理论在线观看 | 精品国产欧美一区二区 | 狂野欧美激情性xxxx欧美 | 丰满少妇麻豆av | 人人精品 | 国产网站色 | 香蕉影视app | 综合网av | 99精品国产福利在线观看免费 | 丁香六月在线 | 日韩精品一区二区三区第95 | 亚洲成av人片一区二区梦乃 | 久久久久久久国产精品 | 中文字幕久久精品 | 欧美日韩午夜在线 | 欧美午夜精品久久久久久孕妇 | 精品福利网| 欧美日韩精品在线播放 | 成人在线播放av | 91超在线 | 久久一级电影 | 亚洲专区 国产精品 | 欧美日一级片 | 在线成人免费电影 | 免费色黄 | 国产色影院 | 日韩 国产| 99热这里只有精品免费 | www.人人草 | 日韩视频二区 | 国产精品系列在线观看 | 亚洲视频 中文字幕 | 国产精品久久久久免费 | 免费观看日韩av | 人人狠狠综合久久亚洲 | 视频二区在线视频 | 天天干夜夜夜操天 | 久久影视中文字幕 | 国产区在线视频 | 国产麻豆剧果冻传媒视频播放量 | 国产精品96久久久久久吹潮 | 久久黄色成人 | 午夜精品剧场 | 国产精品日韩在线观看 | 久久精品1区 | 日韩福利在线观看 | www黄色软件 | 在线精品视频在线观看高清 | 国产精品夜夜夜一区二区三区尤 | 国产不卡在线 | 丝袜+亚洲+另类+欧美+变态 | 中文字幕婷婷 | 国产网红在线观看 | 国产精品一区久久久久 | 91精品国产乱码久久桃 | 免费观看午夜视频 | 成人a大片| 久久这里只有精品9 | 亚洲最大av在线播放 | 久久免费视频8 | 五月婷婷丁香网 | 精品中文字幕在线播放 | 国产69久久 | 99在线热播精品免费 | www.69xx| 人人插人人 | 99产精品成人啪免费网站 | 黄色大片入口 | 国产日产精品久久久久快鸭 | 一级一片免费看 | 久久久天天操 | 久久久国产精品成人免费 | 免费高清无人区完整版 | 九九国产精品视频 | 激情网在线观看 | 中文字幕一区二区三区四区 | 欧美a√在线 | av超碰在线观看 | 亚洲日b视频 | 人人澡人摸人人添学生av | 亚洲精品视频在线观看免费视频 | 免费午夜在线视频 | 日韩视频免费在线观看 | 国产成人一区二区三区在线观看 | www.com黄| 亚洲精品国产免费 | 免费在线观看不卡av | 夜夜夜夜猛噜噜噜噜噜初音未来 | 狠狠躁夜夜躁人人爽超碰91 | 成年人视频在线免费 | 97av色| 天天爽夜夜爽人人爽曰av | 久久久www成人免费毛片 | 99爱精品视频 | 夜夜摸夜夜爽 | 69国产精品视频免费观看 | 91成人看片 | 日韩av一区二区三区在线观看 | 日本韩国中文字幕 | 精品在线视频播放 | 在线观看免费成人 | 91精品入口 | 美女视频黄网站 | 在线精品视频免费观看 | 国产资源 | 中文av一区二区 | 麻豆网站免费观看 | 欧美精品免费在线观看 | a天堂最新版中文在线地址 久久99久久精品国产 | 色综合在 | 国产一区二区久久久久 | 国产aaa大片 | 日韩免费观看一区二区 | 黄色精品网站 | 玖操| 久久婷婷激情 | 欧美日韩在线电影 | 成年人免费在线 | 日韩精品中文字幕在线不卡尤物 | 日韩中文字幕在线看 | 国产精品每日更新 | 色婷婷av一区二 | 免费高清在线一区 | 国产精品久久久久久久久久久久久久 | 天天干天天做 | 亚洲精品视频在线免费播放 | 天天干天天怕 | 日韩免费在线观看网站 | 九九色视频 | 国产高清精 | 欧美日韩一区二区在线 | 91传媒视频在线观看 | 91精品专区 | 日韩一区二区在线免费观看 | 在线免费黄色av | 国产无吗一区二区三区在线欢 | 国产片网站 | www.在线观看av | 久久国产精品99久久人人澡 | 国产高清在线a视频大全 | 国产精品成人一区二区 | 97视频在线免费观看 | 久久久午夜电影 | 狠狠色丁香久久婷婷综合_中 | 久草在线手机观看 | 亚洲第一色 | 91视频在线免费 | 在线观看视频你懂 | 国模精品在线 | 国产色在线| 中文字幕日韩国产 | 亚洲最新av在线 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 日韩av在线影视 | 91爱爱免费观看 | 日日干干 | www.com操| 婷婷亚洲最大 | 五月天色综合 | 日韩精品欧美视频 | 日批视频在线播放 | 精品视频www | 国产又黄又爽无遮挡 | 国产精品一区二区久久久 | av片在线观看| 亚洲精品女| 人人干人人搞 | a国产精品| 91日韩在线播放 | 草久久久| 免费黄色网址大全 | 日本精品中文字幕在线观看 | 成人资源在线观看 | 亚洲国产精品电影在线观看 | 欧美日韩在线精品 | 国产精品mm | 国产一级一级国产 | 欧美日韩一级久久久久久免费看 | 日韩欧美中文 | 午夜av在线 | 日本久久精品视频 | 国产福利精品在线观看 | 在线观看免费av网站 | 精品国产乱码久久久久久1区二区 | 一区二区三区四区在线免费观看 | 国产男女爽爽爽免费视频 | 人人爽人人片 | 久久成电影 | 日韩精品在线观看视频 | 欧美性黑人 | 人人澡人人爽欧一区 | 欧美a免费 | 综合av在线 | 国产视频欧美视频 | 国产99久久精品 | 国产电影黄色av | 深爱开心激情网 | 97国产一区二区 | 亚洲va在线va天堂va偷拍 | 日韩欧美一区二区三区视频 | 国产91在线播放 | 国产91综合一区在线观看 | 国产一区二三区好的 | 国产精品成人自产拍在线观看 | 欧美色婷 | 精品国产乱码久久久久久天美 | 九九热只有这里有精品 | 97超碰中文 | 五月综合激情网 | 久久精品4 | av福利超碰网站 | 日韩电影一区二区在线 | 日日婷婷夜日日天干 | 色欧美88888久久久久久影院 | 国内丰满少妇猛烈精品播放 | 久久久久激情 | 一区二区三区视频在线 | 国产 日韩 在线 亚洲 字幕 中文 | 麻豆成人小视频 | 日韩在线视频免费观看 | 中文字幕在线观看av | 国产一区在线免费观看视频 | 欧美一级小视频 | 国产精品国产自产拍高清av | 亚洲成人黄色 | 国产91国语对白在线 | 亚洲在线日韩 | 98福利在线| 亚洲综合色丁香婷婷六月图片 | 草莓视频在线观看免费观看 | 亚洲无吗天堂 | 在线观看v片 | 国产九九热视频 | 国产欧美在线一区二区三区 | 免费三级骚| av免费在线免费观看 | 一级精品视频在线观看宜春院 | 日本久久影视 | 亚洲一区二区精品视频 | 成人免费毛片aaaaaa片 | 精品一区二区综合 | 黄色美女免费网站 | 久久综合婷婷国产二区高清 | 久草视频免费在线播放 | 97福利在线观看 | 婷婷av综合 | 91av免费观看 | 91九色porny在线 | 亚洲精品国产日韩 | 日韩黄视频 | 国产成人精品三级 | 久久色在线观看 | 蜜臀av麻豆| 中文字幕一区在线观看视频 | 色吊丝在线永久观看最新版本 | 操天天操 | 五月激情综合婷婷 | 狠狠色丁香婷婷综合久小说久 | 亚洲一级二级三级 | 中文字幕丝袜美腿 | 麻豆免费视频 | 日韩精品久久久久久久电影竹菊 | 精品国产乱码久久久久久浪潮 | av久久在线| 久久综合欧美 | 色狠狠狠 | 夜夜视频欧洲 | 亚洲精品一区二区三区在线观看 | 天天天干夜夜夜操 | 日韩欧美一区二区在线观看 | 99久久久国产精品免费99 | 亚洲精品一区二区精华 | 涩涩色亚洲一区 | 亚洲精品9 | 色网站在线免费观看 | 97超碰人人看 | 久久久久久免费毛片精品 | 欧美最新大片在线看 | 午夜视频黄| 国产资源在线播放 | 亚洲精品1区2区3区 超碰成人网 | 在线 国产 日韩 | 黄色成人av| 午夜.dj高清免费观看视频 | 精品高清视频 | 欧美疯狂性受xxxxx另类 |