阿里云SMS发送短信验证码 - PHP接入手机验证码服务 - ThinkPHP6
https://blog.csdn.net/qq285744011/article/details/127798837
安装
安装Composer
【Linux & MacOS】
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
【Windows】
https://getcomposer.org/Composer-Setup.exe
设置Composer使用国内镜像(阿里云)
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
安装TP框架到文件夹./xx/
composer create-project topthink/think xx
安装TP框架到当前文件夹
composer create-project topthink/think ./
升级又有的TP框架
composer update topthink/framework
框架初始化配置
配置TP框架
cd /path/to/tp6/project/
cp .example.env .env
开启调试模式
修改/.env的APP_DEBUG为TRUE
设置数据库信息
修改/.env的mysql配置
配置Web服务器
在apache、nginx中启用项目
web根目录:/public/
TP6隐藏index.php
【nginx】
location / {
if (!-e $request_filename){
rewrite ^(.*)$ /index.php?s=$1 last; break;
}
}
【apache】
修改/public/.htaccess文件,找到:
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
在index.php后面加一个问号,变成:
RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
单应用路由
单应用简单路由使用 - tp6实现简单路由跳转 - 单应用模式
https://blog.csdn.net/qq285744011/article/details/124402231
TP6短网址路由配置(同一个app下,缩短网址)
https://blog.csdn.net/qq285744011/article/details/120331470
中间左右
多应用 - 路由
TP6开启多应用
1.cd /D/www/tp6.com/
2.rm -R app/* [删掉根目录下的app目录下的所有文件]
3.composer require topthink/think-multi-app
4.php think build {Name-of-APP-1}
5.php think build {Name-of-APP-2}
6.修改/config/app.php的“default_app”为自建的app名称
简单view视图模板输出
先安装tp官方的模板引擎驱动:
composer require topthink/think-view
控制器:
/app/controller/Api.php
<?php
namespace app\controller;
use app\BaseController;
use think\facade\View;
class Api extends BaseController
{
public function fn2 () {
View::assign('name','ThinkPHP');
View::assign([
'name22' => 'tp6框架',
'numbers' => array(
1, 2, 5, 9, 18
)
]);
// 没有参数,默认是当前函数名 /view/api/fn2.html
return view();
// 有参数,就是在同目录下的 /view/api/fn3.html
// return View::fetch('fn3');
}
}
模板文件:
/view/api/fn2.html
<h2>
name: {$name}
</h2>
<h4>
name22: {$name22}
</h4>
<ul>
{foreach $numbers as $k=>$v}
<li>
{$k}=>{$v}
</li>
{/foreach}
</ul>
【注意】
api是控制器,fn2是方法名,全小写
更多模板语法
TP6模板嵌套 - layout_on开启 - 模板页面布局 - 公用header
thinkphp6模版布局操作 layout公共模板使用 公共头部 公用导航栏
数据库连接、操作
设置数据库信息
修改/.env的mysql配置
超全的增删改查操作实例
ThinkPHP6.0数据库操作
不用model模型实现controller简单查询
<?php
namespace app\controller;
use app\BaseController;
use think\facade\Db;
class Api extends BaseController
{
public function getxx()
{
// 粗略的说:
// find()返回一个一维数组,
// select()返回一个对象,
// select()->toArray()返回一个二维数组
// 更多 https://www.kancloud.cn/manual/thinkphp6_0/1037533
// 返回全部行数据
$res = Db::table('app')->where()->toArray(); // 全部
$res = Db::table('app')->where(10)->toArray(); // id = 10
print_r($res);
// 返回数组或null
$res = Db::table('app')->where('id', 1)->find();
print_r($res);
// Array ( [id] => 1 [name_en] => client [name_zh] => 客户 [amt] => 100 )
// 查询某一列的值(单行)
$res = Db::table('app')->where('id', 3)->column('name_zh');
print_r($res);
// Array ( [0] => 头条新闻 )
// 查询某一列的值(多行)
$res = Db::table('app')->where('id', '<=', 3)->column('name_zh');
print_r($res);
// Array ( [0] => 客户 [1] => 短视频 [2] => 头条新闻 )
// 指定id字段的值作为索引 (单行)
$res = Db::table('app')->where('id', 3)->column('name_zh', 'id');
print_r($res);
// Array ( [3] => 头条新闻 )
// 指定id字段的值作为索引 (多行)
$res = Db::table('app')->where('id', '<=', 3)->column('name_zh', 'id');
print_r($res);
// Array ( [1] => 客户 [2] => 配送 [3] => 厂家 )
return '';
}
}
使用model模型实现快捷数据库操作
C
<?php
namespace app\controller;
use app\BaseController;
use think\facade\Db;
// 数据库有表`store`,我们在tp项目中有对应的model文件/app/model/Store.php
use app\model\Store;
class Api extends BaseController
{
public function getxx()
{
$dbs = Store::findAll()->toArray();
print_r($dbs);
die();
return '';
}
}
M:/app/model/Store.php
<?php
namespace app\model;
use think\Model;
class Store extends Model
{
}
报错、错误集锦
1.
《报错》
Call to undefined method think\Db::table() 【当controller使用use think\Db;时】
或者 Class 'app\controller\Db' not found
《原因》
这是因为你引入了think\Db这个类,但是你没有实例化,所以不能使用Db::table()这种操作,需要引入think\Facade\Db这个类才能使用Db::table(),我现在遇到的问题是我用了Db::table()这个方式,引入了think\Facade\Db,但是系统报错说找不到数据库类型
Call to undefined method think\Db::table() - ThinkPHP框架
《解决办法》
controller引入DB类时,应该使用门面装饰一下 :use think\facade\Db;
2.
TP5.1 门面(Facade)的使用
TP5.1 门面(Facade)的使用 - 简书
3.
No input file specified. (ThinkPHP5、tp6错误)
解决办法:
1)可能是vendor的包太旧或者缺失,试试TP根目录下进行composer update
2)如果是apache服务器,有可能是因为.htaccess设置不对,要把
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
改为
RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
3)如果是nginx服务器,有可能是因为没有配置当前网站忽略index.php,需要配置一下:
location / {
try_files $uri $uri/ /index.php$is_args$args;
autoindex on;
}
改为
location / {
try_files $uri $uri/ /index.php$is_args$args;
autoindex on;
if (!-e $request_filename){
rewrite ^(.*)$ /index.php?s=$1 last; break;
}
}
4)最后,有可能是因为public目录下多了一个碍事的\public\.user.ini,删掉即可
效果:
进阶知识点
tpl视图布局、公用header 模板布局 · ThinkPHP5.0完全开发手册 · 看云
自定义404页面 404页面 · ThinkPHP5.0完全开发手册 · 看云
'http_exception_template' => [
// 定义404错误的模板文件地址
404 => \think\facade\App::getRootPath() . '404.html', // 根目录下的404.html
// 还可以定义其它的HTTP status
401 => \think\facade\App::getRootPath() . '401.html', // 根目录下的401.html
]
// 保存在/config/app.php,要设置show_error_msg为false,另外设置.env的app_debug为false
session自动开启 Session · thinkphp6文档 · 看云
tpl视图常量替换 视图配置:view.php · thinkphp6文档 · 看云
tpl视图资源实现 <link rel="stylesheet" href="__STATIC__/css/xx.css">
启用内置验证码 验证码 · thinkphp6文档 · 看云
模板缓存关闭 ('tpl_cache' => false,) 视图配置:view.php · thinkphp6文档 · 看云
本地log开启 日志配置:log.php · thinkphp6文档 · 看云
多语言实现 多语言 · thinkphp6文档 · 看云
中间件检查登录(排除部分action)中间件(middleware) · thinkphp6文档 · 看云
表单验证助手 验证 · thinkphp6文档 · 看云
聊天室 Workerman Workerman · thinkphp6文档 · 看云