Onthink学习漫笔
Onthink学习随笔
-------------------------------------(写代码不孤独_小小代)
用Onthink写了一个网站暂时还没上线功能略显不全没,完全没有发挥出应有的强大拓展之处,各种地方略显蹩脚。
但是其强大的数据表控制还是显漏一角,鉴于此进军基于开发的thinphp3.2.2世界。。。
第一天 完成手册序言,基础,配置,架构,路由阅读。
第二天 完成控制器模型阅读 关于 附录阅读
下面是阅读随录
*************************************************
use 表示引入什么 命名空间便于直接引用
函数的命名方法使用小写字母和下划线的方式
方法的命名 使用的小写字母和下划线 下划线的代表的是(一般私有方法 )
双下划线 打头的函数或方法作为魔法方法 __call
养成使用I函数获取输入变量的好习惯;
更新或者环境改变后遇到问题首要问题是清空Runtime目录;
惯例配置 应用配置 模式配置 调试配置 状态配置 模块配置
惯例配置ThinkPHP/Conf/convention.php 应用配置是基于惯例配置的拓展
Application/Common/Conf/config.php调用所有模块之前都会先加载的公共配置文件
可选择的模式配置就是在应用配置文件夹新增 运行该模式才运行的文件config_应用名称.php
调试模式 开启就会加载ThinkPHP/Conf/debug.php和应用调试配置文件Application下的
状态配置就是手工分离
模块配置 Application/当前模块名/Conf/config.php
读取配置文件
定义了配置文件后,都统一使用系统提供C方法(可以借助Config)来读取或者设置
配置参数名称不能含有'.'和特殊字符,允许的字母,数字和下划线 C方法可以读取二维
配置 配置参数是全局有效的 通过c配置的参数值是当前有效地不会写入数据库
URL详情 pathinfo模式说明
serverName/index.php(或者其他应用入口文件)/模块/控制器/操作/[参数名/参数值...]
公共的配置文件config.php 公共函数文件function.php可以把路径加载到common_path中
在入口文件当中配置,如果定义过后Application下面就不需要在加载Application
3.2.2写在入口文件可以默认自动生成的模块,控制器。define('BIND_MODULE','xx')如
果想生成更多的控制器BUILD_CONTROLLER_LIST常量
// 绑定Admin模块到当前入口文件
define('BIND_MODULE','Admin');
define('BUILD_CONTROLLER_LIST','Index,User,Menu');
手动调用Think\Bulid类的方法来生成模型类\Think\Build::buildModel
('Admin','Role');
//禁止访问模块 配置禁止访问的模块列表(用于被其他模块调用或者不开放访问),默认配置中
是禁止访问Common模块和Runtime模块(Runtime目录是默认的运行时目录),我们可以增加其他的
禁止访问模块列表:
'MODULE_DENY_LIST' => array('Common','Runtime','Api'),
设置访问列表
允许访问列表和默认模块
'MODULE_ALLOW_LIST' => array('Home','Admin','User'),'DEFAULT_MODULE'
=> 'Home',
单模块设计 就是关闭多模块访问 MULTI_MODOULE=>false
多入口设计
接受参数绑定模块
// 绑定Home模块到当前入口文件$_GET['m'] = 'Home';
define('APP_PATH','./Application/');require './ThinkPHP/ThinkPHP.php';
绑定后http://serverName/index.php/Home/Index/index变成
http://serverName/home.php/Index/index(绑定后url不显示home)
URL区分大小写 URL_CASE_INSENSITIVE=>true
模型层 数据层,逻辑层,服务层,等不同的模型层 创建Model,Logic,sercive
调用的时候 用D方法很方便的调用 D('User','Logic');//实例化UserLogic D('User')则是实例化
UserModel .
更改系统默认的view层 DEFAULT_V_LAYER=>'Mobile';对于非默认视图层目录的模板获取使用T函
数获取。
控制器(Controller)层 核心控制器在系统内部的App类完成
Event/UserEvent//用于用户的事件响应操作Controller负责的事外部的响应Event负责内
部的事件响应,并且只能在内部调用A('User','Event');
CBD模型
Core(核心)+Behavior(行为)+Driver(驱动)
Driver(驱动)
3.2在架构设计上更加强化了驱动的设计,替代了之前的引擎和模式扩展,并且改进了行为的设
计,使得框架整体更加灵活,并且由于在需要写入数据的功能类库中都采用了驱动化的设计思想,
所以使得新的框架能够轻松满足分布式部署的需求,对云平台的支持可以更简单的实现了。
Behavior(行为)
行为是一个比较抽象的概念,各个位置都会有行为的产生。
有些行为是在应用执行之前,有些是在模板输出以后,我们把这些行为作为的位置成为标
签(位),也可以成为钩子, 当应用程序运行到这个标签的时候,就会被拦截下来,统一执行相关的
行为,类似于AOP编程中的“切面”的概念,给某一个标签绑定相关行为就成了一种类AOP编程的思
想。
标签位
tag函数用于设置某个标签位,可以传入并且只接受一个参数,如果需要传入多个参数,
请使用数组, \Think\Hook::listen('my_tag');
行为定义 必须定义执行入口方法run,由于行为的调用机制影响,在那调用在哪返回。
行为绑定 行为定义后需要定义到某个标签位才能生效,否则是不会执行的。 需要在应用
的行为定义文件tags.php文件中进行行为和标签的位置定义。
return array( '标签名称1'=>array('行为名1','行为名2',...), '标签名称
2'=>array('行为名1','行为名2',...), );
3.2.1版本以上的,允许设置对应类库不使用命名空间。
配置文件'APP_USE_NAMESPACE' => false(继承调用系统类的时候,仍需要)
3.2版本中实例化php内置的类库或者第三方的没有使用命名空间定义的类。
$class = new \stdClass(); $sxml = new \SimpleXmlElement($xmlstr);
自动加载 (命名空间自动加载)Library目录下面的命名空间都可以自动识别和定位。
除了library目录下的命名空间以外,我们还可以定义其他的命名空间
autoload_namespace
提高效率 类库映射多个根命名空间Think\Think::addMap($map); $map=array();
手动第三方类库导入import方法导入任何类库。
内置的缓存机制 和运行lite文件 新版本的特征 运行时生成静态的入口文件。
应用模式 应用模式就是增加自动识别区域
项目编译 应用编译缓存(首次运行的缓存)——运行Lite文件(入口静态)
-------------===========
路由定义
url不为普通模式,开启路由可以在应用(或者模块)配置文件中开启路由
// 开启路由 'URL_ROUTER_ON'=〉true, 3.2路由是针对模块 所以模块名不能被路由,路由的定义
通常也是在模块配置文件中。
路由表达式=〉路由地址和传入参数 array('路由表达式','路由地址','传入参
数')
路由表达式
正则表达式 /^blog\/(\d+)$/
规则表达式 blog/:id
完全匹配 $
公共方法
-------
控制器
如果要操作的方法是一个控制器的方法是与系统的关键字冲突,我们可以设置后缀的方法
解决 'ACTION_SUFFIX'=> 'Action', // 操作方法后缀
多级控制器 就是把控制器分组
实例化控制器 如果是内部的则在用url地址解析的时候就自动实例化了并且调用如果是跨控制器调
用的话则 实例化 然后使用快捷方法A调用(如果是多层次的话就使用A的第二个参数) 可以在实例
化的时候那方法实例化.
前置和后置操作 (仅对控制器有用)
常见的是_before_index前置方法 _after_index后置方法 如果没有定义前置后置方法,真正有模
板输出的可能仅仅是当前的操作,前置和后置操作一般情况下是没有任何输出的。调用错误成功操
作的话是没有后置操作的。
控制器也可以绑定参数规则 action参数绑定 (按变量名能绑定 实现路由功能)
伪静态
URL_HTML_SUFFIX=〉'' 静态后缀记录到常量__EXT__(可以获取当前的后缀)
URL_DENY_SUFFIX=〉不允许访问的后缀 多个用|隔开
下面的优先级高于上面的
URL大小写 'URL_CASE_INSENSITIVE' =>true 不区分大小写的时候访问控制器大写要前加_
系统提供U方法可以为你自动生成相关的URL地址
U 类似的(redirect) (URL生成)
为了配合所使用的URL模式,我们需要能够动态的根据当前的URL设置生成对应的URL地址,为此,
ThinkPHP内置提供了U方法,用于URL的动态生成,可以确保项目在移植过程中不受环境的影响。
U('地址表达式',['参数'],['伪静态后缀'],['显示域名'])
[[email protected]]?参数1=值1&参数2=值2...
ajax返回 ajaxReturn
可以接受 变量 数组 返回的数据可以治 JSON、JSONP、XML和EVAL 可以配置采用什么方
式返回DEFAULT_AJAX_RETURN 进行返回 eval可以输出$data数据
JSON和JSONP虽然只有一个字母的差别,但其实他们根本不是一回事儿:JSON是一种数
据交换格式,而JSONP是一种非官方跨域数据交互协议。一个是描述信息的格式,一个
是信息传递的
约定方法。
跳转和重定向
$this->success(提示信息,地址,秒数)
----==--=-=
输入变量
可以通过 I 函数进行变量获取和过滤
I('变量类型.变量名',['默认值'],['过滤方法'],['额外数据源'])
I函数自带就有DEFAULT_FILTER默认的是htmlspecialchars (变量的过滤)
判断请求类型 (请求类型)
is_XXX 如果是自定义的AJAX则需要添加隐藏域告诉后台是ajax提交的 如果是jquery的
话则不需要。 可以通过VAR_AJAX_SUBMI配置
空操作
自动调用_empty(实现错误页面和一些url优化)
空控制器系统尝试定到EmptyController
操作绑定到类 ACTION_BIND_CLASS=〉‘true’分的更加细致不能省略
前置后置操作需要提前定义
-=-=-=-=-=-=-=-=-=-=-=-
模型 大小写和_转换
模型类直接实例化一般都继承model类 model一般有3个值 模型名数据表前缀数
据库连接信息
如果要写原生的sql代码 则只需要实例化空就好M();
D (数据模型的实例化操作)
方法的参数就是模型的名称,并且和模型类的大小写定义是一致的.
类不存在的时候,D函数会尝试实例化公共模块下面的,还可以跨模块使用
M(仅仅是对数据表进行基本的CURD操作)不需要加载具体的模型类,所以性能更高.
不支持自己的业务逻辑
我们在实例化的过程中,经常使用D方法和M方法,这两个方法的区别在于M方法实例化模
型无需用户为每个数据表定义模型类,如果D方法没有找到定义的模型类,则会自动用M
方法。
字段缓存包括字段里面的字段信息 可以通过设置DB_FIELDS_CACHE来关闭字段自动缓存在项目配置
文件中增加该字段
获取数据表的所有字段信息 getDbFields(); field(''/*);获取要调用所有字段field
(true).
切换数据表用table(); 连接数据库的时候可以为连接加上标识
系统默认规则,必须用模型execute 写操作 query 读操作
连贯操作 (链式操作)
where可以和where连用
data方法 是针对数据库写入的也可以用于更新(save)可以判断是否有主键 对象可以是数
组,对象和字符串。可以进行读操作.
field 获取字段,字段的排除filed(array('user_id','content'),true);就是user_id和
content之外的字段。 用于写入 (安全性的控制)不允许其他的写入 $model->field('name')-
>create();即表示表单中的合法字段只有name字段,无论用户通过什么手段更改或者添加了浏览器
的提交字段,都会直接屏蔽。因为,其他是所有字段我们都不希望由用户提交来决定,你可以通过
自动完成功能定义额外的字段写入。
filert(字段内容的过滤)有点类似I的判断 $User->data($data)->filter
('strip_tags')->add();过滤掉HTML标签 (支持回调类型的函数 可以是函数或者是闭包
定义)
having方法是为了配合group方法从分组的结果中再次查询。
cache s
comment 注释
Create方法创建的数据对象是保存在内存中,并没有实际写入到数据库中,直到使用add
或者save方法才会真正写入数据库。add或者save之后才被写入数据库,因此在没有改变之前都可
以改变create对象.
----
find(读取一条字段) select(读取字段集) getField(读取字段值)[数字的更新setInc setDec]
delete() [在没有任何的条件传入的时候是不会进行删除的类似于seve]
表单映射 数据获取的时候自动处理设置开启 'READ_DATA_MAP'=>true
也可以使用parseFieldsMap进行格式上的转换
查询方式
数组 '_logic'='OR' 使用对象方式查询 stdClass
$map['b'] =array('notlike',array('%thinkphp%','%tp'),'AND');
exp 表达式查询(exp查询的条件不会被当成字符串) 所有后面的查询条件可以使用任何的
sql支持的语法,包括使用函数和字段名称。查询表达式不仅可以用于查询条件,也可以用于数。
据更新。
$data['score'] = array('exp','score+1');// 用户的积分加1
$User->where('id=5')->save($data); // 根据条件保存修改的数据
多语言包的支持 L
*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_12_1
????????????????????????????????????????
多级控制器
实例化控制器
distinct
(令牌验证)token
ORM 表映射到类 记录映射到对象
AR模式 ActiveRecord 一种简单的命令
怎么带有prefix就可以启用本地session管理的支持
*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_12_1

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

「你的組織要求你更改PIN訊息」將顯示在登入畫面上。當在使用基於組織的帳戶設定的電腦上達到PIN過期限制時,就會發生這種情況,在該電腦上,他們可以控制個人設備。但是,如果您使用個人帳戶設定了Windows,則理想情況下不應顯示錯誤訊息。雖然情況並非總是如此。大多數遇到錯誤的使用者使用個人帳戶報告。為什麼我的組織要求我在Windows11上更改我的PIN?可能是您的帳戶與組織相關聯,您的主要方法應該是驗證這一點。聯絡網域管理員會有所幫助!此外,配置錯誤的本機原則設定或不正確的登錄項目也可能導致錯誤。即

Windows11將清新優雅的設計帶到了最前沿;現代介面可讓您個性化和更改最精細的細節,例如視窗邊框。在本指南中,我們將討論逐步說明,以協助您在Windows作業系統中建立反映您的風格的環境。如何更改視窗邊框設定?按+開啟“設定”應用程式。 WindowsI前往個人化,然後按一下顏色設定。顏色變更視窗邊框設定視窗11「寬度=」643「高度=」500「>找到在標題列和視窗邊框上顯示強調色選項,然後切換它旁邊的開關。若要在「開始」功能表和工作列上顯示主題色,請開啟「在開始」功能表和工作列上顯示主題

index.html代表網頁的首頁文件,是網站的預設頁面。當使用者造訪一個網站時,通常會先載入index.html頁面。 HTML(HypertextMarkupLanguage)是一種用來建立網頁的標記語言,index.html也是一種HTML檔。它包含網頁的結構和內容,以及用於格式化和佈局的標籤和元素。下面是一個範例的index.html程式碼:<

預設情況下,Windows11上的標題列顏色取決於您選擇的深色/淺色主題。但是,您可以將其變更為所需的任何顏色。在本指南中,我們將討論三種方法的逐步說明,以更改它並個性化您的桌面體驗,使其具有視覺吸引力。是否可以更改活動和非活動視窗的標題列顏色?是的,您可以使用「設定」套用變更活動視窗的標題列顏色,也可以使用登錄編輯程式變更非活動視窗的標題列顏色。若要了解這些步驟,請前往下一部分。如何在Windows11中變更標題列的顏色? 1.使用「設定」應用程式按+開啟設定視窗。 WindowsI前往“個人化”,然

工作列縮圖可能很有趣,但它們也可能分散注意力或煩人。考慮到您將滑鼠懸停在該區域的頻率,您可能無意中關閉了重要視窗幾次。另一個缺點是它使用更多的系統資源,因此,如果您一直在尋找一種提高資源效率的方法,我們將向您展示如何停用它。不過,如果您的硬體規格可以處理它並且您喜歡預覽版,則可以啟用它。如何在Windows11中啟用工作列縮圖預覽? 1.使用「設定」應用程式點擊鍵並點選設定。 Windows按一下系統,然後選擇關於。點選高級系統設定。導航至“進階”選項卡,然後選擇“效能”下的“設定”。在「視覺效果」選

您是否在Windows安裝程式頁面上看到「出現問題」以及「OOBELANGUAGE」語句? Windows的安裝有時會因此類錯誤而停止。 OOBE表示開箱即用的體驗。正如錯誤提示所表示的那樣,這是與OOBE語言選擇相關的問題。沒有什麼好擔心的,你可以透過OOBE螢幕本身的漂亮註冊表編輯來解決這個問題。快速修復–1.點選OOBE應用底部的「重試」按鈕。這將繼續進行該過程,而不會再打嗝。 2.使用電源按鈕強制關閉系統。系統重新啟動後,OOBE應繼續。 3.斷開系統與網際網路的連接。在脫機模式下完成OOBE的所

在Windows11上的顯示縮放方面,我們都有不同的偏好。有些人喜歡大圖標,有些人喜歡小圖標。但是,我們都同意擁有正確的縮放比例很重要。字體縮放不良或圖像過度縮放可能是工作時真正的生產力殺手,因此您需要知道如何自訂以充分利用系統功能。自訂縮放的優點:對於難以閱讀螢幕上的文字的人來說,這是一個有用的功能。它可以幫助您一次在螢幕上查看更多內容。您可以建立僅適用於某些監視器和應用程式的自訂擴充功能設定檔。可以幫助提高低階硬體的效能。它使您可以更好地控制螢幕上的內容。如何在Windows11

螢幕亮度是使用現代計算設備不可或缺的一部分,尤其是當您長時間注視螢幕時。它可以幫助您減輕眼睛疲勞,提高易讀性,並輕鬆有效地查看內容。但是,根據您的設置,有時很難管理亮度,尤其是在具有新UI更改的Windows11上。如果您在調整亮度時遇到問題,以下是在Windows11上管理亮度的所有方法。如何在Windows11上變更亮度[10種方式解釋]單一顯示器使用者可以使用下列方法在Windows11上調整亮度。這包括使用單一顯示器的桌上型電腦系統以及筆記型電腦。讓我們開始吧。方法1:使用操作中心操作中心是訪問
