reliqarts/mardin

此包已被废弃且不再维护。未建议替代包。

为 Laravel 5 提供的简化实时消息。

v1.0.0-rc 2018-08-03 18:34 UTC

This package is auto-updated.

Last update: 2020-01-22 23:51:50 UTC


README

Mardin 是基于 Laravel Messenger 的 Laravel 5.x 消息包。

Built For Laravel StyleCI Scrutinizer License Latest Stable Version Latest Unstable Version

 

主要特性

  • 无缝集成到现有应用程序中。
  • 支持多参与者对话(线程)
  • 每个用户可进行多个对话
  • 查看每个线程的最后一条消息
  • 轻松获取系统中的所有消息,所有与用户关联的消息,或所有新/未读消息关联到用户的消息
  • 轻松获取用户未读消息计数
  • 非常灵活,您可以实施自己的访问控制
  • 通过集成 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 设置的更多信息。

运行迁移以创建 messagesthreadsparticipant 表。

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\UserReliQArts\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)以反映这些更改。

  • 客户端配置

    通过 npmyarn 安装 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 的更多信息,请查看 这里

🍻 干杯!