찾다
Onthink学习漫笔Jun 13, 2016 pm 12:10 PM
applicationarrayindexnbspurl

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

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
解决方法:您的组织要求您更改 PIN 码解决方法:您的组织要求您更改 PIN 码Oct 04, 2023 pm 05:45 PM

“你的组织要求你更改PIN消息”将显示在登录屏幕上。当在使用基于组织的帐户设置的电脑上达到PIN过期限制时,就会发生这种情况,在该电脑上,他们可以控制个人设备。但是,如果您使用个人帐户设置了Windows,则理想情况下不应显示错误消息。虽然情况并非总是如此。大多数遇到错误的用户使用个人帐户报告。为什么我的组织要求我在Windows11上更改我的PIN?可能是您的帐户与组织相关联,您的主要方法应该是验证这一点。联系域管理员会有所帮助!此外,配置错误的本地策略设置或不正确的注册表项也可能导致错误。即

Windows 11 上调整窗口边框设置的方法:更改颜色和大小Windows 11 上调整窗口边框设置的方法:更改颜色和大小Sep 22, 2023 am 11:37 AM

Windows11将清新优雅的设计带到了最前沿;现代界面允许您个性化和更改最精细的细节,例如窗口边框。在本指南中,我们将讨论分步说明,以帮助您在Windows操作系统中创建反映您的风格的环境。如何更改窗口边框设置?按+打开“设置”应用。WindowsI转到个性化,然后单击颜色设置。颜色更改窗口边框设置窗口11“宽度=”643“高度=”500“>找到在标题栏和窗口边框上显示强调色选项,然后切换它旁边的开关。若要在“开始”菜单和任务栏上显示主题色,请打开“在开始”菜单和任务栏上显示主题

如何在 Windows 11 上更改标题栏颜色?如何在 Windows 11 上更改标题栏颜色?Sep 14, 2023 pm 03:33 PM

默认情况下,Windows11上的标题栏颜色取决于您选择的深色/浅色主题。但是,您可以将其更改为所需的任何颜色。在本指南中,我们将讨论三种方法的分步说明,以更改它并个性化您的桌面体验,使其具有视觉吸引力。是否可以更改活动和非活动窗口的标题栏颜色?是的,您可以使用“设置”应用更改活动窗口的标题栏颜色,也可以使用注册表编辑器更改非活动窗口的标题栏颜色。若要了解这些步骤,请转到下一部分。如何在Windows11中更改标题栏的颜色?1.使用“设置”应用按+打开设置窗口。WindowsI前往“个性化”,然

OOBELANGUAGE错误Windows 11 / 10修复中出现问题的问题OOBELANGUAGE错误Windows 11 / 10修复中出现问题的问题Jul 16, 2023 pm 03:29 PM

您是否在Windows安装程序页面上看到“出现问题”以及“OOBELANGUAGE”语句?Windows的安装有时会因此类错误而停止。OOBE表示开箱即用的体验。正如错误提示所表示的那样,这是与OOBE语言选择相关的问题。没有什么可担心的,你可以通过OOBE屏幕本身的漂亮注册表编辑来解决这个问题。快速修复–1.单击OOBE应用底部的“重试”按钮。这将继续进行该过程,而不会再打嗝。2.使用电源按钮强制关闭系统。系统重新启动后,OOBE应继续。3.断开系统与互联网的连接。在脱机模式下完成OOBE的所

Windows 11 上启用或禁用任务栏缩略图预览的方法Windows 11 上启用或禁用任务栏缩略图预览的方法Sep 15, 2023 pm 03:57 PM

任务栏缩略图可能很有趣,但它们也可能分散注意力或烦人。考虑到您将鼠标悬停在该区域的频率,您可能无意中关闭了重要窗口几次。另一个缺点是它使用更多的系统资源,因此,如果您一直在寻找一种提高资源效率的方法,我们将向您展示如何禁用它。不过,如果您的硬件规格可以处理它并且您喜欢预览版,则可以启用它。如何在Windows11中启用任务栏缩略图预览?1.使用“设置”应用点击键并单击设置。Windows单击系统,然后选择关于。点击高级系统设置。导航到“高级”选项卡,然后选择“性能”下的“设置”。在“视觉效果”选

Windows 11 上的显示缩放比例调整指南Windows 11 上的显示缩放比例调整指南Sep 19, 2023 pm 06:45 PM

在Windows11上的显示缩放方面,我们都有不同的偏好。有些人喜欢大图标,有些人喜欢小图标。但是,我们都同意拥有正确的缩放比例很重要。字体缩放不良或图像过度缩放可能是工作时真正的生产力杀手,因此您需要知道如何对其进行自定义以充分利用系统功能。自定义缩放的优点:对于难以阅读屏幕上的文本的人来说,这是一个有用的功能。它可以帮助您一次在屏幕上查看更多内容。您可以创建仅适用于某些监视器和应用程序的自定义扩展配置文件。可以帮助提高低端硬件的性能。它使您可以更好地控制屏幕上的内容。如何在Windows11

10种在 Windows 11 上调整亮度的方法10种在 Windows 11 上调整亮度的方法Dec 18, 2023 pm 02:21 PM

屏幕亮度是使用现代计算设备不可或缺的一部分,尤其是当您长时间注视屏幕时。它可以帮助您减轻眼睛疲劳,提高易读性,并轻松有效地查看内容。但是,根据您的设置,有时很难管理亮度,尤其是在具有新UI更改的Windows11上。如果您在调整亮度时遇到问题,以下是在Windows11上管理亮度的所有方法。如何在Windows11上更改亮度[10种方式解释]单显示器用户可以使用以下方法在Windows11上调整亮度。这包括使用单个显示器的台式机系统以及笔记本电脑。让我们开始吧。方法1:使用操作中心操作中心是访问

如何在Safari中关闭iPhone的隐私浏览身份验证?如何在Safari中关闭iPhone的隐私浏览身份验证?Nov 29, 2023 pm 11:21 PM

在iOS17中,Apple为其移动操作系统引入了几项新的隐私和安全功能,其中之一是能够要求对Safari中的隐私浏览选项卡进行二次身份验证。以下是它的工作原理以及如何将其关闭。在运行iOS17或iPadOS17的iPhone或iPad上,如果您在Safari浏览器中打开了任何“无痕浏览”标签页,然后退出会话或App,Apple的浏览器现在需要面容ID/触控ID认证或密码才能再次访问它们。换句话说,如果有人在解锁您的iPhone或iPad时拿到了它,他们仍然无法在不知道您的密码的情况下查看您的隐私

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.