<div id="s-643262271"><h2><a id="_0"></a>模型事件</h2><p>模型事件是指在进行模型的查询和写入操作的时候触发的操作行为。</p><blockquote class="danger"><p>模型事件只在调用模型的...
<div id="s-643262271"><h2><a id="_0"></a>模型关联</h2><p>通过模型关联操作把数据表的关联关系对象化,解决了大部分常用的关联场景,封装的关联操作比起常规的数据库联表操作更加智能和高效,并且直观。</p><blo...
<div id="s-643262271"><h2><a id="_0"></a>一对一关联</h2><h3><a id="_3"></a>关联定义</h3><p>定义一对一关联,例如,一个用户都有一个个人资料,我们定义<code>User</code>模...
<div id="s-643262271"><h2><a id="_0"></a>一对多关联</h2><h3><a id="_2"></a>关联定义</h3><p>一对多关联的情况也比较常见,使用<code>hasMany</code>方法定义,参数包括:...
<div id="s-643262271"><p>远程一对多关联用于定义有跨表的一对多关系,例如:</p><ul><li>每个城市有多个用户</li><li>每个用户有多个话题</li><li>城市和话题之间并无关联</li></ul><h2><a id=...
<div id="s-643262271"><p>远程一对一关联用于定义有跨表的一对一关系,例如:</p><ul><li>每个用户有一个档案</li><li>每个档案有一个档案卡</li><li>用户和档案卡之间并无关联</li></ul><h2><a i...
<div id="s-643262271"><h2><a id="_0"></a>多对多关联</h2><h2><a id="_2"></a>关联定义</h2><p>例如,我们的用户和角色就是一种多对多的关系,我们在<code>User</code>模型定义...
<div id="s-643262271"><h2><a id="_0"></a>多态一对多关联</h2><p>多态关联允许一个模型在单个关联定义方法中从属一个以上其它模型,例如用户可以评论书和文章,但评论表通常都是同一个数据表的设计。多态一对多关联关系,...
<div id="s-643262271"><h2><a id="_0"></a>关联预载入</h2><p>关联查询的预查询载入功能,主要解决了<code>N+1</code>次查询的问题,例如下面的查询如果有3个记录,会执行4次查询:</p><div c...
<div id="s-643262271"><h2><a id="_0"></a>关联统计</h2><p>有些时候,并不需要获取关联数据,而只是希望获取关联数据的统计,这个时候可以使用<code>withCount</code>方法进行指定关联的统计。</...
<div id="s-643262271"><p>关联数据的输出也可以使用<code>hidden</code>、<code>visible</code>和<code>append</code>方法进行控制,下面举例说明。</p><h2><a id="_2...
<div id="s-643262271"><h2><a id="_0"></a>虚拟模型</h2><p>虚拟模型不会写入数据库,数据只能保存在内存中,而且只能通过实例化的方式来创建数据,虚拟模型可以保留模型的大部分功能,包括获取器、模型事件,甚至是关联操...
<div id="s-643262271"><p>视图功能由<code>\think\View</code>类配合视图驱动(也即模板引擎驱动)类一起完成,新版仅内置了PHP原生模板引擎(主要用于内置的异常页面输出),如果需要使用其它的模板引擎需要单独安装相...
<div id="s-643262271"><h2><a id="_0"></a>模板赋值</h2><p>模板中的变量(除了一些系统变量外)必须先进行模板赋值后才能使用,可以使用<code>assign</code>方法进行全局模板变量赋值。</p><di...
<div id="s-643262271"><h2><a id="_0"></a>视图过滤</h2><p>可以对视图的渲染输出进行过滤</p><div class="ಠcopy-code-container"><pre><code class="ಠhigh...
<div id="s-643262271"><h2><a id="_0"></a>模板路径</h2><p>默认情况下,框架会自动定位你的模板文件路径,优先定位应用目录下的<code>view</code>目录,这种方式的视图目录下就是应用的控制器目录。</...
<div id="s-643262271"><h2><a id="thinkTemplate_0"></a>使用<code>thinkTemplate</code>模板引擎</h2><p>新版框架默认只能支持PHP原生模板,如果需要使用<code>thin...
<div id="s-643262271"><h2><a id="_0"></a>视图驱动</h2><p>默认的视图仅支持PHP原生模板,如果你需要扩展支持其它的模板引擎,可以实现一个ThinkPHP视图的模板引擎驱动,该驱动必须实现<code>think...
<div id="s-643262271"><p><a href="1037615">异常处理</a><br/><a href="1037616">日志处理</a></p></div>...
<div id="s-643262271"><p>和PHP默认的异常处理不同,ThinkPHP抛出的不是单纯的错误信息,而是一个人性化的错误页面。</p><div class="markdown-toc"><ul><li><a href="#_4">异常显...
<div id="s-643262271"><p>日志记录和写入由<code>\think\Log</code>类完成,通常我们使用<code>think\facade\Log</code>类进行静态调用。</p><p>由于日志记录了所有的运行错误,因此养...
<div id="s-643262271"><p><a href="1037618">调试模式</a><br/><a href="1037619">Trace调试</a><br/><a href="1037620">SQL调试</a><br/><a hre...
<div id="s-643262271"><p>ThinkPHP有专门为开发过程而设置的调试模式,开启调试模式后,会牺牲一定的执行效率,但带来的方便和除错功能非常值得。</p><blockquote class="danger"><p>强烈建议在开发阶段...
<div id="s-643262271"><p>调试模式并不能完全满足我们调试的需要,有时候我们需要手动的输出一些调试信息。除了本身可以借助一些开发工具进行调试外,ThinkPHP还提供了一些内置的调试工具和函数。</p><p><code>Trace</...
<div id="s-643262271"><h2><a id="Trace_0"></a>查看页面Trace</h2><p>通过查看页面Trace信息可以看到当前请求所有执行的SQL语句,例如:</p><p><img alt="" src="https:...
<div id="s-643262271"><p>输出某个变量是开发过程中经常会用到的调试方法,除了使用php内置的<code>var_dump</code>和<code>print_r</code>之外,ThinkPHP框架内置了一个对浏览器友好的<co...
<div id="s-643262271"><p><code>ThinkPHP</code>提供了<code>Socket</code>日志驱动用于本地和远程调试。</p><p>首先需要安装<code>think-socketlog</code>扩展</p...
<div id="s-643262271"><p><a href="1037624">验证器</a><br/><a href="1037625">验证规则</a><br/><a href="1037626">错误信息</a><br/><a href="10...
<div id="s-643262271"><p>ThinkPHP推荐使用验证器,可以在控制器中使用<code>validate</code>助手函数(或者封装验证方法)进行验证。</p><h2><a id="_2"></a>验证器定义</h2><p>为具...
<div id="s-643262271"><p>验证规则的定义通常有两种方式,如果你使用了验证器的话,通常通过<code>rule</code>属性定义验证规则,而如果使用的是独立验证的话,则是通过<code>rule</code>方法进行定义。</p>...
<div id="s-643262271"><p>验证规则的错误提示信息有三种方式可以定义,如下:</p><h2><a id="_2"></a>使用默认的错误提示信息</h2><p>如果没有定义任何的验证提示信息,系统会显示默认的错误信息,例如:</p><...
<div id="s-643262271"><h2><a id="_0"></a>验证场景</h2><blockquote class="danger"><p>验证场景仅针对验证器有效,独立验证不存在验证场景的概念</p></blockquote><p>验...
<div id="s-643262271"><p>可以在路由规则定义的时候调用<code>validate</code>方法指定验证器类对请求的数据进行验证。</p><p>例如下面的例子表示对请求数据使用验证器类<code>app\validate\Use...
<div id="s-643262271"><p>系统内置了一些常用的验证规则,可以完成大部分场景的验证需求,包括:</p><div class="markdown-toc"><ul><li><a href="#_6">格式验证类</a></li><li>...
<div id="s-643262271"><h2><a id="Token_0"></a>添加令牌<code>Token</code>验证</h2><p>验证规则支持对表单的令牌验证,首先需要在你的表单里面增加下面隐藏域:</p><div class="...
<div id="s-643262271"><h2><a id="_0"></a>注解验证器</h2><p>ThinkPHP支持使用注解方式定义路由和验证,需要安装额外的扩展:</p><div class="ಠcopy-code-container"><p...
<div id="s-643262271"><p><a href="1037634">缓存</a><br/><a href="1037635">Session</a><br/><a href="1037636">Cookie</a><br/><a href...
<div id="s-643262271"><h2><a id="_0"></a>概述</h2><p>ThinkPHP采用<code>think\Cache</code>类(实际使用<code>think\facade\Cache</code>类即可)提供...
<div id="s-643262271"><h2><a id="_0"></a>概述</h2><p>可以直接使用<code>think\facade\Session</code>类操作<code>Session</code>。</p><blockquot...
<div id="s-643262271"><h2><a id="_0"></a>概述</h2><p>ThinkPHP采用<code>think\facade\Cookie</code>类提供Cookie支持。</p><h2><a id="_4"></a>...
<div id="s-643262271"><p>ThinkPHP内置通过<code>\think\facade\Lang</code>类提供多语言支持,如果你的应用涉及到国际化的支持,那么可以定义相关的语言包文件。任何字符串形式的输出,都可以定义语言常量...
<div id="s-643262271"><h2><a id="_0"></a>上传文件</h2><p>如果你使用<code>ThinkPHP 6.1+</code>版本,并且需要使用<code>think-filesystem</code>上传扩展,请...
<div id="s-643262271"><p>ThinkPHP6支持<code>Console</code>应用,通过命令行的方式执行一些URL访问不方便或者安全性较高的操作。</p><p>我们可以在cmd命令行下面,切换到应用根目录(注意不是web根...
<div id="s-643262271"><h2><a id="_0"></a>启动内置服务器</h2><p>命令行切换到应用根目录后,输入:</p><div class="ಠcopy-code-container"><pre><code class="...
<div id="s-643262271"><h2><a id="_0"></a>查看版本</h2><p>查看当前框架版本</p><div class="ಠcopy-code-container"><pre><code class="ಠhighlight-...
<div id="s-643262271"><p>ThinkPHP 具备自动创建功能,可以用来自动生成需要的应用及目录结构和文件等。</p><blockquote class="danger"><p>本指令需要安装多应用扩展后才支持。</p></block...
<div id="s-643262271"><h2><a id="_0"></a>快速生成控制器</h2><p>执行下面的指令可以生成<code>index</code>应用的<code>Blog</code>控制器类库文件</p><div class="...
<div id="s-643262271"><h2><a id="clear_0"></a>清除缓存文件<code>clear</code></h2><p>如果需要清除应用的缓存文件,可以使用下面的命令:</p><div class="ಠcopy-code...
<div id="s-643262271"><h2><a id="optimizeschema_0"></a>生成数据表字段缓存<code>optimize:schema</code></h2><blockquote class="danger"><p>字...
<div id="s-643262271"><h2><a id="optimizeroute_0"></a>生成路由映射缓存<code>optimize:route</code></h2><blockquote class="danger"><p>路由映射...
<div id="s-643262271"><h2><a id="_0"></a>输出并生成路由列表</h2><p>假设你的路由定义文件内容为:</p><div class="ಠcopy-code-container"><pre><code class="...
<div id="s-643262271"><h2><a id="_0"></a>创建自定义指令</h2><p>第一步,创建一个自定义命令类文件,运行指令</p><div class="ಠcopy-code-container"><pre><code cl...
<div id="s-643262271"><p>默认情况下,命令行中输出的内容很少,即便是异常和报错也如此,可以通过调整输出级别,显示更多信息。</p><ul><li>不显示信息(静默)</li></ul><div class="ಠcopy-code-c...
<div id="s-643262271"><p><a href="1118028">数据库迁移工具</a><br/><a href="1147857">Workerman</a><br/><a href="1149630">think助手工具库</a><...
<div id="s-643262271"><h2><a id="_0"></a>数据库迁移工具</h2><p>使用数据库迁移工具可以将数据库结构和数据很容易的在不同的数据库之间管理迁移。</p><p>在以前,为了实现“程序安装”,你可能会导出一份sql文...
<div id="s-643262271"><h2><a id="Workerman_0"></a>Workerman</h2><blockquote class="default"><p>Workerman是一款纯PHP开发的开源高性能的PHP sock...
<div id="s-643262271"><h3><a id="_0"></a>常用的一些扩展类库</h3><p>目前已有字符串操作,数组操作.</p><p>安装</p><div class="ಠcopy-code-container"><pre><co...
<div id="s-643262271"><h2><a id="_0"></a>安装</h2><p>首先使用<code>Composer</code>安装<code>think-captcha</code>扩展包:</p><div class="ಠcop...
<div id="s-643262271"><p>本篇内容主要讲述了最新的<code>think-swoole</code>扩展的使用。目前仅支持Linux环境或者MacOs下运行,要求<code>swoole</code>版本为<code>4.3.1+<...
<div id="s-643262271"><p><a href="1037653">助手函数</a><br/><a href="1037654">升级指导</a><br/><a href="1037655">更新日志</a></p></div>...
<div id="s-643262271"><h2><a id="_0"></a>助手函数</h2><p>系统为一些常用的操作方法封装了助手函数,便于使用,包含如下:</p><table><thead><tr><th>助手函数</th><th>描述</th...
<div id="s-643262271"><h1><a id="6061_0"></a><code>6.0</code>升级到<code>6.1</code>版本</h1><p>由于安全性原因,<code>6.1</code>版本移除核心对<code>t...
<div id="s-643262271"><h1><a id="_0"></a>版本更新日志</h1><div class="markdown-toc"><ul><li><a href="#V6142023712_4"><code>V6.1.4</cod...