lexxyungcarter / chatmessenger
Laravel 5, 6, 7, 8, 9 & 10 的简单一对一/群聊消息工具,带有 Pusher 集成
Requires
- php: ^7.1.3|^8.0
- illuminate/config: ^5.5|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
- illuminate/database: ^5.5|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
- illuminate/support: ^5.5|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
Requires (Dev)
- adamwathan/faktory: 0.3.*
- friendsofphp/php-cs-fixer: ^2.5|^3.51
- orchestra/testbench: ^3.0|^4.0|^9.0
- phpunit/phpunit: ^7.0|^8.0|^9.0|^10.5
README
此包允许您将完整的用户消息系统添加到您的 Laravel 应用程序中。它是一个高度直观的 laravel chatmessenger,具有诸如会话中最大参与人数、星标线程以及独特的社交媒体分享链接(在此包中称为线程)等附加功能。
向项目捐款
如果您觉得这个包很有用,并希望为维护者买杯咖啡(或者一辆特斯拉,我们不会挑剔),请随意。
或者通过在 市场 购买产品和服务。
这笔资金用于维护项目并向 Code Style 以及其他开源仓库添加新功能。
开始为项目的 tailwind/vue.js/vuerouter 版本投票
功能
- 每个用户可以有多个会话
- 可选地循环使用额外的用户接收每条新消息
- 查看每个线程的最后一则消息
- 返回系统中的所有消息、与用户关联的所有消息或与用户关联的带有新/未读消息的所有消息
- 轻松返回用户未读消息数量
- 非常灵活,您可以实现自己的访问控制
- 使用 Pusher 广播服务实现实时聊天功能
- 能够设置每个线程的最大参与人数
- 能够生成一个独特的 URL 来分享线程,邀请更多用户加入对话
- 能够添加/删除对话中的用户 - 就像 WhatsApp!
- 能够对线程进行星标/收藏
常见用途
- 公开线程(每个人都可以看到所有内容)
- 群组消息(只有参与者可以看到他们的线程)
- 一对一消息(私密或直接线程)
- 推送消息以查看,无需刷新页面
- 在线程/对话中设置最大参与人数
安装(Laravel 4.x - 已不再积极支持)
可以在 此处 找到 Laravel 4 的安装说明。
安装(Laravel 5.x)
Laravel 5.6 及以上版本
composer require syntaxlexx/chatmessenger
Laravel 5.1 > 5.5
composer require syntaxlexx/chatmessenger@1.0.8
或者在 composer.json 中手动添加
"require": { "syntaxlexx/chatmessenger": "^1.0" }
运行
composer update
>>> 如果使用 Laravel 5.4 及以下版本
注意:Laravel Messenger 支持 包发现。如果使用 Laravel 5.5 及以上版本,请跳过此部分。
将服务提供者添加到 config/app.php
下的 providers
'providers' => [ Lexx\ChatMessenger\ChatMessengerServiceProvider::class, ],
发布配置
php artisan vendor:publish --provider="Lexx\ChatMessenger\ChatMessengerServiceProvider" --tag="config"
更新配置文件以引用您的用户模型
config/chatmessenger.php
创建一个 users
表(如果您还没有的话)。如果您需要,默认的 Laravel 迁移就足够了。
(可选) 如果您不想使用默认的数据库表,请在包配置文件中定义数据库表名
'messages_table' => 'lexx_messages', 'participants_table' => 'lexx_participants', 'threads_table' => 'lexx_threads',
发布迁移
php artisan vendor:publish --provider="Lexx\ChatMessenger\ChatMessengerServiceProvider" --tag="migrations"
迁移您的数据库
php artisan migrate
将特质添加到您的用户模型中
use Lexx\ChatMessenger\Traits\Messagable; class User extends Authenticatable { use Messagable; }
Pusher 集成
本软件包使用pusher/pusher-php-server,该软件提供了开箱即用的推送服务。您只需要引入该软件包,注册服务提供者,发布供应商软件包,然后就可以开始使用了!一切就绪。
请查看示例部分以获取详细的用法示例。
重大变更
已弃用的软件包
由于Pusher Http Laravel已被弃用,当前示例使用最新的Laravel 5/6广播趋势,通过事件进行广播。查看示例以了解其实际应用。单独配置频道变得更加易于管理和表达。
如果您计划迁移到Laravel 6,由于依赖问题,Pusher Http Laravel弃用软件包将阻止您迁移。您只需创建一个触发广播消息的事件和一个广播频道。您可以在示例中查看实际用法。
迁移到v1.2
如此问题所述,已将星号属性从threads
表移至participants
表,因为在那里它更有意义。(感谢snarcraft)。
运行
php artisan vendor:publish --provider="Lexx\ChatMessenger\ChatMessengerServiceProvider" --tag="migrations"
以复制迁移文件,然后运行php artisan migrate
。
将线程标星与在线程上调用star()
方法一样简单。如果没有传递userId,则默认为当前登录用户。取消标星线程的情况也相同。$thread->unstar()
。
那么,示例在哪里?
为了清楚地了解其工作原理,请打开两个到四个浏览器(隐私/隐身模式非常适合此情况)并使用不同的账户登录。
最新示例
我们有一个新示例版本,该版本具有常见的Laravel Jetstream + Inertia堆栈。
API列表和用法示例
线程
- $thread->messages() - 消息关系
- $thread->getLatestMessageAttribute() - 从线程返回最新消息
- $thread->participants() - 参与者关系
- $thread->creator() - 返回创建线程的用户对象
- $thread->getAllLatest() - 根据updated_at日期返回所有最新的线程
- $thread->getBySubject($subject) - 根据主题返回所有线程
- $thread->participantsUserIds($userId = null) - 返回与线程关联的用户ID数组(无垃圾)
- $thread->participantsUserIdsWithTrashed($userId = null) - 返回与线程关联的用户ID数组(含垃圾)
- $thread->addParticipant($userId) - 将用户添加到线程作为参与者(也接受数组|混合类型)
- $thread->removeParticipant($userId) - 从线程中移除参与者(也接受数组|混合类型)
- $thread->markAsRead($userId) - 将线程标记为已读
- $thread->isUnread($userId) - 查看当前线程是否被用户阅读
- $thread->activateAllParticipants() - 恢复线程中所有具有新消息的参与者
- $thread->participantsString($userId = null, $columns = []) - 生成参与者信息字符串(此处列出的列反映用户表中的数据库列,用于返回参与者名称。为了便于管理,您可以定义
CHATMESSENGER_PARTICIPANT_AKA
并将其设置为特定列。然后,您只需忽略向方法传递$columns[]即可)。 - $thread->hasParticipant($userId) - 检查用户是否是线程的当前参与者
- $thread->userUnreadMessages($userId) - 返回给定用户在线程中的未读消息数组
- $thread->userUnreadMessagesCount($userId) - 返回给定用户在线程中的未读消息数量
- $thread->getMaxParticipants() - 返回线程允许的最大参与者数量
- $thread->hasMaxParticipants() - 检查线程中是否已达到最大参与者数量
- $thread->star($userId = null) - 星标/收藏线程(如果没有传递$userId,则默认为当前登录用户)
- $thread->unstar($userId = null) - 取消星标/取消收藏线程(如果没有传递$userId,则默认为当前登录用户)
- $thread->isStarred - 检查线程是否已被星标
消息
- $message->thread() - 线程关系(获取消息所属的线程)
- $message->user() - 用户关系(获取消息的发送者)
- $message->recipients() - 此消息的收件人
参与者
- $participant->thread() - 线程关系
- $participant->user() - 用户关系
User - (Lexx\ChatMessenger\Traits\Messagable)
- $user->messages() - 消息关系(返回用户消息)
- $user->threads() - 线程关系(返回用户线程)
- $user->newThreadsCount() - 返回用户的新消息数量
- $user->unreadMessagesCount() - 返回用户的新消息数量
- $user->threadsWithNewMessages() - 返回所有有新消息的线程
您还可以查看单个模型以获取有关函数的更多信息。此包还利用范围,以便您对查询有更多的控制。
示例
- 控制器 - MessagesController
- 控制器 - ThreadController
- 事件 - MessageWasPosted
- 路由 - web
- 路由 - channel
- 视图
- Composer.json 示例
想要贡献?
欢迎提出建议,任何形式的贡献都备受重视。如果您有点害羞,请随时发送电子邮件至Lexx YungCarter。
安全
如果您发现任何安全相关的问题,请使用问题跟踪器,或者最好是发送电子邮件至Lexx YungCarter。
致谢
下一步是什么?
我们即将发布一个Vue.js版本+ 示例,供那些需要在应用中快速设置聊天室/消息的用户。
所以:
- Laravel + Vue
- Vue 独立应用(Node)
- Flutter 独立安卓应用
如果您愿意提供代码示例,请随时与我们分享您的代码/存储库。提前感谢!
特别感谢
此包以cmgmyr/laravel-messenger为起点,而它最初又以AndreasHeiberg/laravel-messenger为起点。