语法lexx / 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,并增加了如会话最大参与者数、标记线程和独特的社交媒体分享链接(在其他包中称为 Thread)等附加功能。
为项目捐赠
如果您觉得这个包很有用,并想为维护者买杯咖啡(或者特斯拉,我们不挑剔),请随意。
或者通过在 Marketplace 购买产品和服务。
这笔资金用于维护项目,以及向 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
表中没有太多意义,已将星号属性从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() - 根据更新时间日期返回所有最新的线程
- $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作为起点。