tp中mode中写的规则磁力菇为什么不起作用用

TP中的Behavior(行为)总结! - ThinkPHP框架
首先解释一下什么是钩子 (hook)?什么是行为?
看TP的源码看得出,hook是一个抽象的概念,是一套触发机制。钩子应该具有的基本方法应该有:
行为就是继承了Behavior的行为类,类名以Behavior结尾,实现run方法。也可以称之为 钩子函数。
第一步设置钩子,也就是埋设陷阱。把你的钩子想象成一个陷阱,放到系统流程可能经过的路上,如果陷阱被系统踩到,就会执行你的行为,当执行完后,系统会根据你的程序的结果继续运行。
在Thinkphp Behavior中,我们把这些行为发生作用的位置(陷阱)称之为标签(位)(tag),当应用程序运行到这个标签的时候,就会被拦截下来,统一执行相关的行为。
在tp中,典型的例子就是:thinkphp/conf/mode/common.php'tags'&&=&&&array(
&&&&&&&&'app_init'&&&&&&=&&&array(
&&&&&&&&),
&&&&&&&&'app_begin'&&&&&=&&&array(
&&&&&&&&&&&&'Behavior\ReadHtmlCache',&//&读取静态缓存
&&&&&&&&),
&&&&&&&&'app_end'&&&&&&&=&&&array(
&&&&&&&&&&&&'Behavior\ShowPageTrace',&//&页面Trace显示
&&&&&&&&),
&&&&&&&&'path_info'&&&&&=&&&array(),
&&&&&&&&'action_begin'&&=&&&array(),
&&&&&&&&'action_end'&&&&=&&&array(),
&&&&&&&&'view_begin'&&&&=&&&array(),
&&&&&&&&'view_parse'&&&&=&&&array(
&&&&&&&&&&&&'Behavior\ParseTemplate',&//&模板解析&支持PHP、内置模板引擎和第三方模板引擎
&&&&&&&&),
&&&&&&&&'template_filter'=&&array(
&&&&&&&&&&&&'Behavior\ContentReplace',&//&模板输出替换
&&&&&&&&),
&&&&&&&&'view_filter'&&&=&&&array(
&&&&&&&&&&&&'Behavior\WriteHtmlCache',&//&写入静态缓存
&&&&&&&&),
&&&&&&&&'view_end'&&&&&&=&&&array(),
&&&&),第二部,触发钩子。 在需要添加行为的函数里 ,直接Hook::Listen(tags,prarm),注意param一定要传变量,不需要传常量。触发行为的关键方法是Hook类中的listen方法,它通过遍历某个行为标签下的所有行为,依次实例化并调用run方法.
在tp中,典型的例子就是:App.class.phpstatic&public&function&run()&{
&&&&&&&&//&应用初始化标签
&&&&&&&&Hook::listen('app_init');
&&&&&&&&App::init();
&&&&&&&&//&应用开始标签
&&&&&&&&Hook::listen('app_begin');
&&&&&&&&//&Session初始化
&&&&&&&&if(!IS_CLI){
&&&&&&&&&&&&session(C('SESSION_OPTIONS'));
&&&&&&&&//&记录应用初始化时间
&&&&&&&&G('initTime');
&&&&&&&&App::exec();
&&&&&&&&//&应用结束标签
&&&&&&&&Hook::listen('app_end');
&&&&&&&&return&;
&&&&}第三部,执行行为。 找到行为类,类名以Behavior结尾,实现run方法。class&ReadHtmlCacheBehavior&{
&&&&//&行为扩展的执行入口必须是run
&&&&public&function&run(&$params){
&&&&&&&&//&开启静态缓存
&&&&&&&&if(IS_GET&&&&C('HTML_CACHE_ON'))&&{
&&&&&&&&&&&&$cacheTime&=&$this-&requireHtmlCache();
&&&&&&&&&&&&if(&false&!==&$cacheTime&&&&$this-&checkHTMLCache(HTML_FILE_NAME,$cacheTime))&{&//静态页面有效
&&&&&&&&&&&&&&&&//&读取静态页面输出
&&&&&&&&&&&&&&&&echo&Storage::read(HTML_FILE_NAME,'html');
&&&&&&&&&&&&&&&&exit();
&&&&&&&&&&&&}
&&&&}钩子在MVC模式下十分重要,他实现了在不改变源代码的前提下提升系统的灵活性,如,在文章输出前打印版权信息,在文章输出后生成二维码信息,app运行前检查用户权限,还有更多产品经理提出的变态要求,都可以。
--------------------------------------------下面讲一下tp内部实现-------------------------------------------------------
源代码位于ThinkPHP/Library/Think/Hook.class.php,Hook类中全是静态方法,其中有唯一静态属性$tags,他是一个数组,键为钩子,值为行为。
其中有两个方法可以用于绑定,前者是单个,后者是是批量。static&private&&$tags&&&&&&&=&&&array();
&&&&&*&动态添加插件到某个标签
&&&&&*&@param&string&$tag&标签名称
&&&&&*&@param&mixed&$name&插件名称
&&&&&*&@return&void
&&&&static&public&function&add($tag,$name)&{
&&&&&&&&if(!isset(self::$tags[$tag])){
&&&&&&&&&&&&self::$tags[$tag]&&&=&&&array();
&&&&&&&&if(is_array($name)){
&&&&&&&&&&&&self::$tags[$tag]&&&=&&&array_merge(self::$tags[$tag],$name);
&&&&&&&&}else{
&&&&&&&&&&&&self::$tags[$tag][]&=&&&$
&&&&&*&批量导入插件
&&&&&*&@param&array&$data&插件信息
&&&&&*&@param&boolean&$recursive&是否递归合并
&&&&&*&@return&void
&&&&static&public&function&import($data,$recursive=true)&{
&&&&&&&&if(!$recursive){&//&覆盖导入
&&&&&&&&&&&&self::$tags&&&=&&&array_merge(self::$tags,$data);
&&&&&&&&}else{&//&合并导入
&&&&&&&&&&&&foreach&($data&as&$tag=&$val){
&&&&&&&&&&&&&&&&if(!isset(self::$tags[$tag]))
&&&&&&&&&&&&&&&&&&&&self::$tags[$tag]&&&=&&&array();&&&&&&&&&&&&
&&&&&&&&&&&&&&&&if(!empty($val['_overlay'])){
&&&&&&&&&&&&&&&&&&&&//&可以针对某个标签指定覆盖模式
&&&&&&&&&&&&&&&&&&&&unset($val['_overlay']);
&&&&&&&&&&&&&&&&&&&&self::$tags[$tag]&&&=&&&$
&&&&&&&&&&&&&&&&}else{
&&&&&&&&&&&&&&&&&&&&//&合并模式
&&&&&&&&&&&&&&&&&&&&self::$tags[$tag]&&&=&&&array_merge(self::$tags[$tag],$val);
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&}&&&&&&&&&&&&
&&&&}TP Hook::listen方法,该方法会查找$tags中有没有绑定app_start事件的方法,然后用foreach遍历$tags属性,并执行Hook:exec方法。
Hook:exec方法会检查行为名称,如果包含Behavior关键字,那么入口方法必须为run方法,而执行run方法的参数在调用Hook::listen时指定。/**
&&&&&*&监听标签的插件
&&&&&*&@param&string&$tag&标签名称
&&&&&*&@param&mixed&$params&传入参数
&&&&&*&@return&void
&&&&static&public&function&listen($tag,&&$params=NULL)&{
&&&&&&&&&&if(isset(self::$tags[$tag]))&{
&&&&&&&&&&&&if(APP_DEBUG)&{
&&&&&&&&&&&&&&&&G($tag.'Start');
&&&&&&&&&&&&&&&&trace('[&'.$tag.'&]&--START--','','INFO');
&&&&&&&&&&&&}
&&&&&&&&&&&&foreach&(self::$tags[$tag]&as&$name)&{
&&&&&&&&&&&&&&&&APP_DEBUG&&&&G($name.'_start');
&&&&&&&&&&&&&&&&$result&=&&&self::exec($name,&$tag,$params);
&&&&&&&&&&&&&&&&if(APP_DEBUG){
&&&&&&&&&&&&&&&&&&&&G($name.'_end');
&&&&&&&&&&&&&&&&&&&&trace('Run&'.$name.'&[&RunTime:'.G($name.'_start',$name.'_end',6).'s&]','','INFO');
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&if(false&===&$result)&{
&&&&&&&&&&&&&&&&&&&&//&如果返回false&则中断插件执行
&&&&&&&&&&&&&&&&&&&&return&;
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&}
&&&&&&&&&&&&if(APP_DEBUG)&{&//&记录行为的执行日志
&&&&&&&&&&&&&&&&trace('[&'.$tag.'&]&--END--&[&RunTime:'.G($tag.'Start',$tag.'End',6).'s&]','','INFO');
&&&&&&&&&&&&}
&&&&&*&执行某个插件
&&&&&*&@param&string&$name&插件名称
&&&&&*&@param&string&$tag&方法名(标签名)&&&&&
&&&&&*&@param&Mixed&$params&传入的参数
&&&&&*&@return&void
&&&&static&public&function&exec($name,&$tag,&$params=NULL)&{
&&&&&&&&if('Behavior'&==&substr($name,-8)&){
&&&&&&&&&&&&//&行为扩展必须用run入口方法
&&&&&&&&&&&&$tag&&&&=&&&'run';
&&&&&&&&$addon&&&=&new&$name();
&&&&&&&&return&$addon-&$tag($params);
&&&&}----------------------------------交流tp的可以加群:---------------------
ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。Keywords: Resin, Printing Process (1) Synthetic resin TP: In the autoclave, according to 1mol melamine, lmol 3mol trimerization application of polyethylene glycol aldehyde and the ratio of 200 feeding, the pH value adjusted to 9.5,90 ℃ reaction to cl
这篇文章主要介绍了android4.0与2.3版本的TP代码区别,需要的朋友可以参考下 通常来说在android2.3上调试TP时,只需要把linux驱动调通,android就可以正常使用了.但是到了android4.0上又有些不同了,针对linux驱动,需添加如下一些内容: 1.在手指按下时需调用如下函数上报Key Down: input_report_key(struct input_dev *input, BTN_TOUCH, 1); 2.在手指释放时需调用如下函数上报Key Up: in
续上篇,这篇还是我担任阿里举办的电商真人秀&超级赢家&比赛总评委时接受采访的内容,本篇是关于TP(电商服务提供商)部分的节录: [问]您对TP这个领域的发展怎么看? [刘兴亮]TP这个领域,是电商行业发展到一定阶段的必然产物.有了TP这个领域,从倒推来证明我们的电商行业是越来越成熟了.就好象挖金矿一样,表面上来看,热闹的是挖金矿的,但是在挖金矿的过程中,还需要其他辅助成分,我们是不是需要卖矿泉水的,我们是不是需要卖盒饭的,我们拿什么去挖金矿呢,我们需要铲子吧.TP就是干这样的活儿.这个
php tp验证表单与自动填充函数代码,需要的朋友可以参考下 &?php class FormModel extends Model { // 自动验证设置 /* * 一:自动验证 自动验证的定义是这样的:array(field,rule,message,condition,type,when,params) field:代表是数据库的字段名: rule:代表是规则: 它的值要看type的类型而定: 如果是condition 是function(callback),rule是一个函数名 cond
李华明Himi 原创,转载务必在明显处注明: [黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2d/465.html 前几节由于时间紧张,只是将一些遇到的问题拿出来进行分享经验,那么今天抽空写一篇常用的精灵以及精灵常用和注意的一些知识:那么由于cocos2d教程基本很完善,那么今天Himi介绍一些注意点和细节点分享大家: 首先对于使用过精灵的童鞋很熟悉CCSpriteBatchNode,至少大家都会知道它能优化精灵,但是至于优化原理
由于时间关系,此系列共同学习教程更新的速度会比较慢些,请多见谅,上一章节的内容请看这里. http://bbs.thinkphp.cn/viewthread.php?tid=4673&extra=page%3D1 ------------------------------------- PHP开发,无非是对数据库使用了逻辑控制的增删改查和使用模板输出数据内容. 通常数据的插入都是通过表单来进行添加.表单提交涉及到页面显示, 所以这一节我们暂时放下对数据库的操作讲解,先来简单学习一下TP的模板引
前言 TP的手册相当多,其实不必再出这样的贴子,论技术,我也是菜鸟一个,同时也在学习当中. 看到论坛上多了不少新朋友,不少在抱怨手册看不懂,那我就姑且抛砖引玉,尝试与新朋友们更简单地.手把手地进入TP的应用中去.讲解过程中有错的地方,大家帮忙指正. 这个系列,初步定下的目标为,从零开始,以TP示例中心中的Form为例进行讲解,以实践为主,理论为辅, 将TP的最基本内容逛一遍,至少让我们一起学会如何进行最简单的对数据进行查.增.改.删操作并输出到模板. 由于我们说的是循序渐进,所以我用步骤式来说明
pvr2png工具 说明:可以自动拆分texutrepack打包的pvr和png文件为原始的单独png文件,理论上支持tp打包的各种格式,使用cocos2d的rendertexture实现,解压出的单独png文件大小不能超过程序的窗口大小...如有特殊要求,可以修改窗口大小:) 使用方法:在mac用户的图片目录下,手动建立prvToPng目录,将要解析的pvr和plist文件放入,然后在任意位置运行pvrToPng,就能得到单独的png文件,解析得到的png与原始的pvr文件放在同一目录. 使用
TP自带有一个跳转功能函数success(): $this-&success('提示信息','jumpurl'); 直接使用会导致一个错误发生: ①需要将 ThinkPHP Tpl/dispatch_jump.tpl文件复制到 项目目录中 ②在config中做配置 拷贝convention文件中的 'TMPL_ACTION_ERROR' =& THINK_PATH.'Tpl/dispatch_jump.tpl', // 默认错误跳转对应的模板文件 'TMPL_ACTION_SUCCESS' =
中图法分类号(计算机专业) T 工业技术 TP 自动化技术.计算机技术 TP3 计算技术.计算机技术 TP3-0 计算机理论与方法 TP3-05 计算机与其他学科的关系 TP30 一般性问题 TP301 理论.方法 TP301.1 自动机理论 TP301.2 形式语言理论 TP301.4 可计算性理论 TP301.5 计算复杂性理论 TP301.6 算法理论 TP302 设计与性能分析 TP302.1 总体设计.系统设计 TP302.2 逻辑设计 TP302.4 制图 TP302.7 性能分析.
最近公司需要搭建一个TP站点,闲来无事,自己也搭了一个,不知道怎么样,大家帮忙看看,拾荒者,有意者,可以交换下友链啊
// URL Assembly support different modes and routing
Update function U($url,$params=false,$redirect=false,$suffix=true) { // Normal mode if(false==strpos($url,'/')){ $url .='//'; } // Populate the default parameter $urls = explode('/',$url);
0. Vim Introduction As the world's most important open source editor (the other one is the Emacs), Vim its powerful features and customization capabilities are loved by many developers. Perhaps it is because the function of Vim too strong to really g
Be involved in project management competence in operational problems, the most direct way is to hide the menu does not have permission, thinkphp eq has a label, fine. . So, if you wrote a smarty plug-ins under the eq / / Modifier_eq.php &? Php / ** *
0. Vim Introduction As the world's most important open source editor (the other is the Emacs), Vim its powerful features and capabilities can be customized loved by many developers. However, perhaps because Vim is too powerful, and to really make goo
小天鹅今日公布的2009年年度报告显示,该公司去年营收43.75亿元,比2008年增长1.92%,利润总额2.78亿元,比上年增长600.8%,归属于上市公司股东的净利润为2.22亿元,同比增长454.93%. 该报告表示,2009年,小天鹅洗衣机主业实现销售收入38.31亿元,比上年同期增长32%.其中,双缸洗衣机全年销售量占小天鹅洗衣机总销量的比例由2008年的41.85%下降到27.90%;全自动洗衣机全年销售量占比由2008年的46.05%上升到54.01%;滚筒洗衣机全年销售量占比由2
GUI is composed via Javascript and CSS with Win8 like styles.
[ 概述 ] Input类是新版新增的一个输入数据管理类,提供了一些输入数据的管理和过滤. [ 方法 ] getInstance 实例化Input类 filter 设置数据过滤方法 以下方法都是动态方法: get 获取get数据 post 获取post数据 request 获取request数据 server 获取server数据 cookie 获取cookie数据 session 获取session数据 files 获取files数据 config 获取配置参数 lang 获取语言参数 glo
分析一下 Android 是如何读取按键及Touch Panel 的驱动的.主要在 $(ANDROID_DIR)/frameworks/base/libs/ui/EventHub.cpp 这个文件中,这是在 HAL 层,将一步步分析 Android 上层是如何接受事件的. 一, 先看一下 Android HAL Class EventHub 在 $(ANDROID_DIR)/frameworks/base/include/ui/eventhub.h 定义. i. scan_dir(const c
系统优化是一项复杂.繁琐.长期的工作,优化前需要监测.采集.测试.评估,优化后也需要测试.采集.评估.监测,而且是一个长期和持续的过程,不 是说现在优化了,测试了,以后就可以一劳永逸了,也不是说书本上的优化就适合眼下正在运行的系统,不同的系统.不同的硬件.不同的应用优化的重点也不同. 优化的方法也不同.优化的参数也不同.性能监测是系统优化过程中重要的一环,如果没有监测.不清楚性能瓶颈在哪里,怎么优化呢?所以找到性能 瓶颈是性能监测的目的,也是系统优化的关键.系统由若干子系统构成,通常修改一个子系
function uuid() { $charid = md5(uniqid(mt_rand(), true)); $hyphen = chr(45);// &-& $uuid = chr(123)// &{& .substr($charid, 0, 8).$hyphen .substr($charid, 8, 4).$hyphen .substr($charid,12, 4).$hyphen .substr($charid,16, 4).$hyphen .subs
function msubstr($str, $start=0, $length, $charset=&utf-8&, $suffix=true) { if(function_exists(&mb_substr&)) $slice = mb_substr($str, $start, $length, $charset); elseif(function_exists('iconv_substr')) { $slice = iconv_substr($str,$sta
Writing two days before to see the others, and feeling good on the turn over as a reference Portal portal in order to meet with the various subsystems of the demand for a unified sign, thus the use of CAS for SSO Single Sign-profile development. Deve
0. Preamble Long period of time programmers spend most of the development tools may be the editor, and a very convenient and efficient for developers editor is very effective. In unix / linux, the windows or even the next, vim can be said to be a ver
var Application = (); Application.uploadDialog = ( progressBarText: 'Uploading: (0), (1)% finish', statuBarText: 'File Number: (0), Size: (1)', fileQueued: function (file) ( var obj = Application.uploadD var filetype = (file.type.substr (1)). t
1. Overview As the spring security system development in the competence fill up after the closure of the so used only spring security in the provision of Complete features include: user verification, cancellation feature, Session
java.util.concurrent was written by Doug Lea: on the Java world, the most influential individuals in the jdk1.5 You must be familiar with him before the backport-util-concurrent.jar. &hanging from the bridge of the nose glasses, Retention De Wang Wil
Problem Statement You are given an even number of points in the plane. You want to find a rectangle whose corners have integer coordinates and sides are parallel to the axes, such that at least half of the given points lie in the interior of the rect
package com.cc.bvc.socket.service. import java.io.F import java.io.FileInputS import java.io.IOE import java.io.PrintW import java.net.URLD import java.text.ParseE import java.text.SimpleDateF impor
1, CAS client HTTPS change HTTP method 1. Casclient.jar modify all the items used to package edu.yale.its.tp.cas.util.SecureURL.class in the jar files (need to decompile java class files into a &SecureURL.java&), will be below code for https acc
First built a menu object , Processing JTree control mouse events , Then set the menu displayed JPopupMenu popup = new JPopupMenu(); JMenuItem modify = new JMenuItem(&modify&); modify.setActionCommand(&modify&); modify.addActionListene
Objective: Using single sign-on system, integrated management of various subsystems of the user log on log out, and provide a unified integration of the page to facilitate users to quickly switch between the various systems. Environment: cas-server-3
1 CAS is a Yale University launched an open source project, aimed at Web application system to provide a reliable method of single sign-on, CAS in December 2004 became a JA-SIG's a project. CAS has the following characteristics: 1. Open source enterp
In practice, built environment, found that many students will encounter SSO environment, integration, in fact, in many cases is the SSO of the digital certificate issue. Details of today to talk about the relevant content. As the &Application& a
Abstract: This application note gives a function for random number generation using the MAX7651/52 microcontroller with 12-bit analog-to-digital converter (ADC). Applications such as spread-spectrum communications, security, encryption and modems req
Introduction If you are such a person: up and running WebSphere (R) Application Server after the busy with other matters, but no time for study and performance optimization of the relevant documentation (see Resources). So, you come to the right place
International domain name: . com (commercial organizations),. net (network service),. org (nonprofit organization) com General on behalf of profit-making institutions, such as corporate, edu, said educational institutions cn is the area code, on beha
Do these two days, when the project encountered a problem, tree structure, the structure of my tree there is no level of restriction can be automatically extended, so that there is a problem, there is no way to directly subordinate position to their
In JDK1.5 in, String class adds a very useful function of the static format (String format, Objece ... argues), types of data can be formatted as a string and output. Which format parameter specifies the output format is the most complex and most dif
Time has come to Joomla! 1.5 platform, in front of this method not work. However, Joomla! Development team has long been given a better program, summed up is a three letters: MVC. MVC in php Programming MVC, and several other concepts MVC is a Model-
4 state: null
20:23:53,296 DEBUG [java.sql.Connection] - &ooo Connection Opened&
20:23:53,312 DEBUG [java.sql.Connection] - &xxx Connection Closed&
20:23:53,312 ERROR [freemarker.runtime] - && Expression
&script& var c = new Array (); var orderdata = [12,43,5,96]; var orderLength = orderdata. var temp, for (var l = 0; l &orderL l + +) c [l] = for (var i = 0; i &orderL i + +) ( for (var j = 0; j &orderLength - i-1;
The demo guide provides detailed instructions for setting up a multi-domain SSO demonstration for a quick start with CAS. If unreadable in IE (no line wrap), try Firefox or just use the PDF utility. Problem Statement You would like to show-off Single
In accordance with the following configuration successful: 1 First of all I opened tomcat5.5 of SSL Modify the Tomcat configuration file server.xml, removing the comment for SSL, that is opening up ports 8443 modified the relevant code is as follows:
This article outlines the cas based on very simple single sign-on configuration. 1. First, download the CAS of the server side, as well as client-side. http://www.jasig.org/cas/download http://www.ja-sig.org/downloads/cas-clients/ 2. Configure the ne
Object-relational ReceiptUnqualifiedRecord - poDetail - Po - Company Detail the relationship is as follows: ReceiptUnqualifiedRecord In /** * Order details * * @hibernate.many-to-one * * @struts.dynaform-field * @return */ public PoDetail getPoDetail
JA-SIG (CAS) Study Notes 3 Keywords: cas sso uniform identity authentication java ja-sig Technical background knowledge: JA-SIG CAS service environment to build, please refer to: JA-SIG (CAS) study notes a JA-SIG CAS business architecture
org.hibernate.LazyInitializationException: could not initialize proxy - no Session at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:86) at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLaz
import java.awt.AlphaC import java.awt.C import java.awt.Graphics2D; import java.awt.P import java.awt.R import java.awt.T import java.awt.datatransfer.DataF import java.awt.datatransfer.StringS i
Note: New works: 1. The web.xmx an increase of 2 filters, CasFilter, LoginFilter. &filter& &filter-name& CASFilter &/ filter-name& &filter-class& edu.yale.its.tp.cas.client.filter.CASFilter &/ filter-class& &/ filter& &
Copyright (C) , All Rights Reserved.
版权所有 闽ICP备号
processed in 0.063 (s). 11 q(s)}

我要回帖

更多关于 为什么要遵守规则 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信