1.model搜索器
// 条件搜索
// withSearch() 触发搜索器 传入两个数组
// 参数1:需要搜索的字段 参数2:关联数组,键为字段,值为查询条件的值
public function whereSearch()
{
User::withSearch(['name', 'status'], [
'name' => '于',
'status' => '1'
])->select();
}
// 搜索器 三个参数
// 使用withSearch()时触发
// $query: sql语句对象
// $value: 使用withSearch()触发时,关联数组的当前值 '于'
// $data: 使用withSearch()触发时,关联数组的所有值 ['于','1']
public function searchNameAttr($query, $value, $data)
{
dump($query);
dump($value);
dump($data);
$ret = $query->where('name', 'like', $value . '%');
dump($ret);
}
// 搜索器
public function searchStatusAttr($query, $value, $data)
{
$query->where('status', '=', $value);
}
2.门面类
- 普通(动态)类,引入后需要以参数方式依赖注入到方法中才可以使用
<?php
namespace app\controller;
use app\BaseController;
// 引入普通(动态)类
use think\Db;
use think\Request;
class tp0831 extends BaseController
{
// 在方法中通过参数方式依赖注入
public function tp0831(Db $db, Request $request)
{
// 参数方式调用
$db->table()->slect();
$request->method();
}
}
- 门面(facade)类,引用后直接用静态类的方式使用(推荐使用)
<?php
namespace app\controller;
use app\BaseController;
// 引入门面类
use think\facade\Db;
use think\facade\Request;
class tp0831 extends BaseController
{
public function tp0831(){
// 门面类直接以静态的方式使用
Db::table()->slect();
Request::method();
}
}
thinkphp 动态类和门面类的引入 如下:
3.开启调试
ThinkPHP提供了一些内置的调试工具和函数
Trace调试功能就是ThinkPHP提供给开发人员的一个用于开发调试的辅助工具。可以实时显示当前页面或者请求的请求信息、运行情况、SQL执行、错误信息和调试信息等,并支持自定义显示,并且支持没有页面输出的操作调试。
在创建tp项目时已经内置安装,不需要手动安装
如果部署到服务器的话,你可以通过下面方式安装
composer install --no-dev
当项目部署到服务器正式运行时,不建议使用,因为用户不希望看见调试信息
开启Trace调试功能
- 在项目内找到
xxx.env
文件 删除.env
的前缀 - 在
.env
中找到APP_DEBUG
配置项,并将其设置为true
- 开启后还需要配置其他项,比如数据库连接方式等
- 如下:
- 在项目内找到
开启Trace调试功能后,页面右下角会有一个logo,点开后即可看见调试信息
配合dump()调试函数使用
- 最终页面输出如下
4.助手函数
系统为一些常用的操作方法封装了助手函数,便于使用,包含如下:
序号 | 助手函数 | 描述 |
---|---|---|
1 | abort |
中断执行并发送HTTP状态码 |
2 | app |
快速获取容器中的实例 支持依赖注入 |
3 | bind |
快速绑定对象实例 |
4 | cache |
缓存管理 |
5 | class_basename |
获取类名(不包含命名空间) |
6 | class_uses_recursive |
获取一个类里所有用到的trait |
7 | config |
获取和设置配置参数 |
8 | cookie |
Cookie管理 |
9 | download |
获取\think\response\File对象实例 |
11 | dump |
浏览器友好的变量输出 |
12 | env |
获取环境变量 |
13 | event |
触发事件 |
14 | halt |
变量调试输出并中断执行 |
15 | input |
获取输入数据 支持默认值和过滤 |
16 | invoke |
调用反射执行callable 支持依赖注入 |
17 | json |
JSON数据输出 |
18 | jsonp |
JSONP数据输出 |
19 | lang |
获取语言变量值 |
20 | parse_name |
字符串命名风格转换 |
21 | redirect |
重定向输出 |
22 | request |
获取当前Request对象 |
23 | response |
实例化Response对象 |
24 | session |
Session管理 |
25 | token |
生成表单令牌输出 |
26 | trace |
记录日志信息 |
27 | trait_uses_recursive |
获取一个trait里所有引用到的trait |
28 | url |
Url生成 |
29 | validate |
实例化验证器 |
30 | view |
渲染模板输出 |
31 | display |
渲染内容输出 |
32 | xml |
XML数据输出 |
33 | app_path |
当前应用目录 |
34 | base_path |
应用基础目录 |
35 | config_path |
应用配置目录 |
36 | public_path |
应用根目录 |
37 | root_path |
中断执行并发送HTTP状态码 |
38 | runtime_path |
应用运行时目录 |
可以在应用的公共函数文件中重写上面这些助手函数。
5.多应用
需要使用
composer require topthink/think-multi-app
来安装多应用模块在app目录下创建应用
完整目录解构 如下
www WEB部署目录(或者子目录)
├─app 应用目录
│ ├─index 项目1
│ │ ├─controller 控制器目录
│ ├ ├─model 模型目录
│ ├ ├─view 视图目录
│ ├─admin 项目2
│ │ ├─controller 控制器目录
│ ├ ├─model 模型目录
│ ├ ├─view 视图目录
│ ├─ ... 更多类库目录
│ │
│ ├─BaseController.php 默认基础控制器类
│ ├─ExceptionHandle.php 应用异常定义文件
│ ├─common.php 全局公共函数文件
│ ├─middleware.php 全局中间件定义文件
│ ├─provider.php 服务提供定义文件
│ ├─Request.php 应用请求对象
│ └─event.php 全局事件定义文件
│
├─config 配置目录
│ ├─app.php 应用配置
│ ├─cache.php 缓存配置
│ ├─console.php 控制台配置
│ ├─cookie.php Cookie配置
│ ├─database.php 数据库配置
│ ├─filesystem.php 文件磁盘配置
│ ├─lang.php 多语言配置
│ ├─log.php 日志配置
│ ├─middleware.php 中间件配置
│ ├─route.php URL和路由配置
│ ├─session.php Session配置
│ ├─trace.php Trace配置
│ └─view.php 视图配置
│
├─view 视图目录
├─route 路由定义目录
│ ├─route.php 路由定义文件
│ └─ ...
│
├─public WEB目录(对外访问目录)
│ ├─index.php 入口文件
│ ├─router.php 快速测试文件
│ └─.htaccess 用于apache的重写
│
├─extend 扩展类库目录
├─runtime 应用的运行时目录(可写,可定制)
├─vendor Composer类库目录
├─.example.env 环境变量示例文件
├─composer.json composer 定义文件
├─LICENSE.txt 授权说明文件
├─README.md README 文件
└─think 命令行入口文件
- 在index应用下controller目录下创建index.php文件并在其中创建index方法
<?php
namespace app\index\controller;
use app\BaseController;
class Index extends BaseController
{
public function index()
{
echo '前台应用';
}
}
- 在admin应用下controller目录下创建admin.php文件并在其中创建admin方法
<?php
namespace app\admin\controller;
use app\BaseController;
class Admin extends BaseController
{
public function admin()
{
echo '后台应用';
}
}
- 最终输出前后台两个应用