一:tp6单应用与多应用。
二:tp6打开错误提示。
config->app.php->'show_error_msg'
三:tp6去掉必须带index.php。
修改public/.htaccess文件为如下:
<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
#RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]
</IfModule>
默认是:
<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>
四:tp6多应用。
tp6安装后默认采用的是 单应用模式部署
。
单应用模式的优势是简单灵活,URL地址完全通过路由可控。配合路由分组功能可以实现类似多应用的灵活机制。
而我个人比较喜欢 多应用模式部署
,比如说:对于网站来说,有前台和后台方面的应用。这个时候采用多应用模式部署的话,那在以后的开发和维护起来就更加地方便了。
快速生成应用
如果使用了多应用模式,可以快速生成一个应用,例如生成demo
应用的指令如下:
php think build demo
你会发现:上面的命令好像执行不了。是因为你没有安装多应用模式扩展think-multi-app
。
安装think-multi-app
扩展:
composer require topthink/think-multi-app
注意:执行上面的命令时,一定要在你的应用根目录下执行。也就是有一个think
的文件的目录下执行。
安装成功之后,再次执行 php think build demo
这次执行成功后,你会发现你的应用根目录里的app
文件夹里多了一个demo
的文件夹。
上面的生成的应用是 demo
,比如你想生成后台的应用admin
,前台的应用home
,api方面的应用api
。主要还是看个人是什么需求再去生成相应的应用。
查看生成的应用目录
五:tp6开启强制路由。
1:不开启强制路由可以直接访问存在的方法。
如下图:可127.0.0.1/index/index/index 直接访问。
2:开启强制路由必须在路由中定义,否则报错。
3:定义路由方式。
1):在应用中新建route文件夹。新建admin.php。任意 名字都可以。
2):
Route::get('index', 'admin/index/index');
//Route::get('index', 'index/index'); 省略admin也可以。
请求地址为 ,需加上应用名admin。
六:View显示。
需要使用,安装。
composer require topthink/think-view
安装路径:
不安装会报错。
还需要引入View类。
<?php
declare (strict_types = 1);//declare(strict_type=1);是php7引入的 严格类型检查模式的指定语法
namespace app\admin\controller;
use think\facade\View;
class Index
{
public function index()
{
//return '您好!这是一个[admin]示例应用';
// 不带任何参数 自动定位当前操作的模板文件
//return View::fetch();//不指定名字,则默认用index。
return View::fetch('index2');//指定名字
}
}
七:静态资源加载。
//静态资源引用,后加入
'tpl_replace_string' => [
'__STATIC__' => '/static',
'__JS__' => '/static/js',
'__IMG__' => '/static/images',
'__FONT__' => '/static/font'
]
使用:
<!-- jQuery文件。务必在bootstrap.min.js 之前引入 -->
<script src="__STATIC__/js/jquery-3.6.2.min.js"></script>
<script src="__STATIC__/bootstrap-5.2.3-dist/js/bootstrap.js"></script>
<script src="__STATIC__/js/toastr.js"></script>
<!-- 弹窗-->
<script src="__STATIC__/layer/layer.js"></script>
八:数据库连接。
九:tp6 workerman
1):直接使用官方文档,安装tp6,workerman。
2):workerman安装完毕后,在vendor文件夹下。
3):workerman更简单。swoole更高效。workerman是php写的。swoole是c写的。
1:安装workerman
通过 composer 安装
composer require topthink/think-worker
2:workerman测试
服务端测试代码:
<?php
namespace app\http;
use think\worker\Server;
use think\facade\Session;
class Worker extends Server{
protected $socket = 'websocket://0.0.0.0:2345';
public function onMessage($connection, $data)
{
echo "onMessage\n";
$connection->send("收到啦!!!!!");
}
/**
* 当连接建立时触发的回调函数
* @param $connection
*/
public function onConnect($connection)
{
echo "onConnect\n";
$connection->send("连接成功");
}
/**
* 当连接断开时触发的回调函数
* @param $connection
*/
public function onClose($connection)
{
echo "close\n";
}
/**
* 当客户端的连接上发生错误时触发
* @param $connection
* @param $code
* @param $msg
*/
public function onError($connection, $code, $msg)
{
echo "error $code $msg\n";
}
/**
* 每个进程启动
* @param $worker
*/
public function onWorkerStart($worker)
{
echo "onWorkerStart\n";
}
}
客户端测试代码:
<html>
<head>
<meta charset="utf-8" />
<title>网页版群聊</title>
</head>
<body>
<script>
ws = new WebSocket("ws://192.168.0.145:2345");
ws.onopen = function() {
console.log("连接成功");
ws.send('tom');
console.log("给服务端发送一个字符串:tom");
};
ws.onmessage = function(e) {
console.log("收到服务端的消息:" + e.data);
};
</script>
</body>
</html>
测试发现,关闭浏览器会触发close事件。
但直接断网,不会触发close事件。
workerman和
参考文档:
序言 · ThinkPHP6.0完全开发手册 · 看云 (kancloud.cn)
ThinkPHP6多应用模式配置经验总结_从删库到跑路养成记的博客-CSDN博客_thinkphp6 多应用
tp6+Workerman_北寻的博客-CSDN博客_tp6 workerman
使用TP6+Workerman实现私聊(类似QQ)、实时聊天(2、搭建workerman)_筱宇***的博客-CSDN博客_tp6 聊天
Thinkphp6 WorkerMan中如何向某个特定客户端发送数据-趙哥博客
Thinkphp 使用Workerman 聊天室_杰姆小生的博客-CSDN博客_thinkphp6workerman聊天