gerardojbaez/messenger

Laravel 5.2 的 Messenger 功能。

v1.1.0 2018-03-04 02:44 UTC

This package is auto-updated.

Last update: 2024-09-06 19:05:15 UTC


README

Build Status Latest Version Software License

Messenger

Laravel 5.x 的聊天/消息系统。

使用 Messenger

  • 用户可以发送和接收消息。
  • 用户可以参与多个会话。
  • 用户可以向一个或多个用户发送消息。

TL;DR

use Messenger;

// Sending a message to one user:
Messenger::from($user)->to($user)->message('Hey!');

// Sending a message to multiple users: (an array of user ids)
Messenger::from($user)->to([1,2,3,4])->message('Who want to chat?!');

// Sending a message to one thread: (perfect for replying to a specific thread!)
Messenger::from($user)->to($thread)->message('I\'ll be there');

内容

安装

需求

  • Laravel 5.x
  • PHP >=5.5

Composer

$ composer require gerardojbaez/messenger

服务提供者和外观

如果您使用的是 Laravel 5.5 或更高版本,由于此包支持包自动发现功能,您可以选择跳过以下两个步骤。

将包添加到您的应用程序服务提供者在 config/app.php 文件中。

'providers' => [
	/**
	 * Third Party Service Providers...
	 */
	Gerardojbaez\Messenger\MessengerServiceProvider::class,
]

将外观添加到您的别名单组中

'aliases' => [

	[...]

	'Messenger' => Gerardojbaez\Messenger\Facades\Messenger::class,
]

配置文件和迁移

使用命令发布包配置文件和迁移

$ php artisan vendor:publish --provider="Gerardojbaez\Messenger\MessengerServiceProvider"

然后运行迁移

$ php artisan migrate

特质和契约

Gerardojbaez/Messenger/Traits/Messageable 特质和 Gerardojbaez/Messenger/Contracts/MessageableInterface 契约添加到您的 Users 模型中。

请参阅以下示例

<?php

namespace App\Models;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Gerardojbaez\Messenger\Contracts\MessageableInterface;
use Gerardojbaez\Messenger\Traits\Messageable;

class User extends Authenticatable implements MessageableInterface
{
    use Messageable;

用法

向单个用户发送

<?php

// Import the facade
use Messenger;

Messenger::from($user)->to($user2)->message('Hey!')->send();

向多个用户发送

<?php

// Import the facade
use Messenger;

Messenger::from($user)->to([1,2,3,4,5])->message('Hey!')->send();

向线程发送

<?php

// Import the facade
use Messenger;

Messenger::from($user)->to($thread)->message('That\'s awesome!')->send();

获取新消息的数量

获取全局计数 - 所有用户线程中的新消息

<?php

echo $user->unreadMessagesCount;

获取特定用户线程的计数

<?php

echo $user->threads->first()->unreadMessagesCount;

标记线程为已读

标记线程为已读

<?php

$user->markThreadAsRead($thread_id);

线程动态属性

线程动态属性是基于数据生成的属性,而不是来自数据库。

例如,线程本身没有标题,而是 Messenger 根据参与者列表创建它。

属性

  • $thread->title
  • $thread->creator 获取线程创建者。
  • $thread->lastMessage 获取线程中的最新消息。

显示用户线程

控制器

public function index()
{
    // Eager Loading - this helps prevent hitting the
    // database more than the necessary.
    $this->user->load('threads.messages.sender');

    return view('messages.index', [
        'threads' => $this->user->threads
    ]);
}

视图

<div class="panel panel-default">
    <div class="list-group">
        @if($threads->count() > 0)
            @foreach($threads as $thread)
                @if($thread->lastMessage)
                    <a href="#" class="list-group-item">
                        <div class="clearfix">
                            <div class="pull-left">
                                <span class="h5">{{ $thread->title }}</span>
                                @if($thread->unreadMessagesCount > 0)
                                    <span class="label label-success">{!! $thread->unreadMessagesCount !!}</span>
                                @endif
                            </div>
                            <span class="text-muted pull-right">{{ $thread->lastMessage->created_at->diffForHumans() }}</span>
                        </div>
                        <p class="text-muted no-margin">{{ str_limit($thread->lastMessage->body, 35) }}</p>
                    </a>
                @endif
            @endforeach
        @endif
    </div>
</div>

预览

Preview of all user threads

使用模型

Messenger 有 3 个模型

Gerardojbaez\Messenger\Models\Message;
Gerardojbaez\Messenger\Models\MessageThread;
Gerardojbaez\Messenger\Models\MessageThreadParticipant;

您可以使用它们作为普通模型。有关更多详细信息,请参阅每个模型和 Gerardojbaez\Messenger\Traits\Messageable 特质。

配置文件

目前您可以配置要使用哪些模型。

许可协议

此软件包是免费软件,根据 MIT 许可协议分发。