reliqarts / mardin
为 Laravel 5 提供的简化实时消息。
Requires
- php: >=7.0
- cmgmyr/messenger: ^2.0
- doctrine/dbal: ^2.5
- illuminate/support: ^5.5
- league/fractal: ^0.13.0
- pusher/pusher-php-server: ^3.0
This package is auto-updated.
Last update: 2020-01-22 23:51:50 UTC
README
Mardin 是基于 Laravel Messenger 的 Laravel 5.x 消息包。
主要特性
- 无缝集成到现有应用程序中。
- 支持多参与者对话(线程)
- 每个用户可进行多个对话
- 查看每个线程的最后一条消息
- 轻松获取系统中的所有消息,所有与用户关联的消息,或所有新/未读消息关联到用户的消息
- 轻松获取用户未读消息计数
- 非常灵活,您可以实施自己的访问控制
- 通过集成 Laravel Echo 支持实时消息
安装 & 使用
安装
使用 composer 安装;在控制台
composer require reliqarts/mardin
或在 composer.json 中 require
{ "require": { "reliqarts/mardin": "*" } }
然后,在终端中运行 composer update
以将其拉入。
完成此操作后,您需要在 app.php 配置文件中的 providers 数组中添加服务提供程序,如下所示
ReliQArts\Mardin\MardinServiceProvider::class,
发布包资源和配置
php artisan vendor:publish --provider="ReliQArts\Mardin\MardinServiceProvider"
您可以选择使用 config
标签仅发布配置
php artisan vendor:publish --provider="ReliQArts\Mardin\MardinServiceProvider" --tag="config"
如果您还没有,创建一个 users
表。
(可选) 在 laravel messenger 的配置文件(config/laravel-messenger)中定义数据库表的名称,如果您不想使用默认名称
'messages_table' => 'messenger_messages',
'participants_table' => 'messenger_participants',
'threads_table' => 'messenger_threads',
见: Laravel messenger readme 了解有关 Laravel Messenger 设置的更多信息。
运行迁移以创建 messages
、threads
和 participant
表。
php artisan migrate
配置
-
在 laravel messenger 的配置文件(config/laravel-messenger)中将消息模型、参与者模型和线程模型设置为提供的 Mardin 模型,或扩展这些模型的自定义模型。
例如:
'message_model' => ReliQArts\Mardin\Models\Message::class, 'participant_model' => ReliQArts\Mardin\Models\Participant::class, 'thread_model' => ReliQArts\Mardin\Models\Thread::class,
-
确保您的应用程序已正确配置为 广播。
-
确保您的应用程序定义了其
<base>
标签的<head>
。例如:
<base href="http://myapp.url">
这用于与 mardinBase 一起进行路由。见:https://w3schools.org.cn/tags/tag_base.asp
-
设置所需的环境变量,以便包知道您的用户模型、转换器、所需的视图等。
环境配置示例
MARDIN_USER_MODEL="App\\User" MARDIN_USER_TRANSFORMER="App\\Transformers\\UserTransformer" MARDIN_VIEW_WRAPPER_INDEX="messages.index" MARDIN_VIEW_WRAPPER_SHOW="messages.show"
这些变量以及更多内容在 config 文件中进行了说明。
-
在布局中的某个位置包含 mardin 底座(消息通知区域),以初始化 mardin。mardin 底座为 Mardin 的 JS 对应方提供初始化参数。(没有这些,Mardin 不会初始化)
示例包含在
resources/views/layouts/app.blade.php
// ... @include('mardin::tray', ['miId' => 'mardin-inbox-tray']) // ...
-
特质 & 合约
您必须确保在您的配置中(如上所示)正确设置了用户模型和用户转换器类,并且它们分别实现了
ReliQArts\Mardin\Contracts\User
和ReliQArts\Mardin\Contracts\UserTransformer
合约。您的
User
模型也必须使用Messagable
特性。例如:User 模型
// ... use ReliQArts\Mardin\Traits\Messagable; use ReliQArts\Mardin\Contracts\User as MardinUserContract; class User extends Authenticatable implements MardinUserContract { use Messagable; // ... }
您还可以扩展 Message、Participant 和 Thread 模型。扩展
Message
模型是鼓励的,因为您可能非常希望添加特定的安全策略(通过 Laravel Guard)。例如:Message 模型
use ReliQArts\Mardin\Models\Message as MardinMessage; class Message extends MardinMessage { // ... }
注意:请记得更新 laravel messenger 的配置文件(config/laravel-messenger)以反映这些更改。
-
客户端配置
通过
npm
或yarn
安装 JS 对应版本。npm i mardin
通过 npm 添加模块后,您可以如下使用:
// import mardin for use import Mardin from 'mardin'; // initialize let messenger = new Mardin(app);
注意: 上面的
app
指的是您的客户端应用程序的一个实例,这是可选的。
并且...它准备好了!👌
用法
路由
以下路由被提供。为了澄清,您可以参考 ReliQArts\Mardin\Http\Controllers\MessagesController
中的方法文档 这里。
| | POST | messages | store-message | ReliQArts\Mardin\Http\Controllers\MessagesController@store | web |
| | GET|HEAD | messages/c/unread | unread-messages-count | ReliQArts\Mardin\Http\Controllers\MessagesController@unreadCount | web |
| | POST | messages/del | unread-message | ReliQArts\Mardin\Http\Controllers\MessagesController@delete | web |
| | GET|HEAD | messages/in/{filter}.json | in-threads | ReliQArts\Mardin\Http\Controllers\MessagesController@inboxData | web |
| | POST | messages/m/new | create-message | ReliQArts\Mardin\Http\Controllers\MessagesController@create | web |
| | POST | messages/mr | read-message | ReliQArts\Mardin\Http\Controllers\MessagesController@read | web |
| | POST | messages/mur | unread-message | ReliQArts\Mardin\Http\Controllers\MessagesController@unread | web |
| | GET|HEAD | messages/t/{thread}/messages.json | in-thread-messages | ReliQArts\Mardin\Http\Controllers\MessagesController@threadMessagesData | web |
| | POST | messages/u/{thread} | update-message | ReliQArts\Mardin\Http\Controllers\MessagesController@update | web |
| | GET|HEAD | messages/view/{thread} | show-message | ReliQArts\Mardin\Http\Controllers\MessagesController@show | web |
| | GET|HEAD | messages/{type?} | messages
授权
Mardin 支持 Laravel 的默认授权模型。要使用提供的策略,在您的 AuthServiceProvider
中映射策略如下所示
use App\Message; // a custom message model that extends ReliQArts\Mardin\Models\Message use ReliQArts\Mardin\Policies\MessagePolicy; /** * The policy mappings for the application. * * @var array */ protected $policies = [ // ... Message::class => MessagePolicy::class, ];
策略使用在 User
模型上实现的 canSendMardinMessage()
和 canReceiveMardinMessage()
方法。这些方法由 ReliQArts\Mardin\Contracts\User
强制执行。
发送消息
通过向 messages/m/new
发送请求来启动一个新线程(POST)。
示例新消息表单
{!! Form::open(['route' => 'create-message']) !!} {!! Form::hidden('subject', "New Message") !!} {!! Form::hidden('recipients[]', $user->id) !!} <button class="btn new-message flat" title="Send a message to {{$user->name}}."> <span class="icon icon-email icon-lg"></span> <span>Send Message</span> </button> {!! Form::close() !!}
上述示例使用 laravelcollective/html
生成一个 HTML 表单,该表单将发布到 create-message
路由。
有关 Laravel Messenger 的更多信息,请查看 这里。
🍻 干杯!