artisanali/messenger

laravel最新版本的gerardojbaez/messenger的副本。

dev-master 2024-08-12 06:32 UTC

This package is auto-updated.

Last update: 2024-09-12 06:44:47 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...
	 */
	ArtisanAli\Messenger\MessengerServiceProvider::class,
]

将外观添加到你的别名数组中

'aliases' => [

	[...]

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

配置文件和迁移

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

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

然后运行迁移

$ php artisan migrate

特质和契约

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

查看以下示例

<?php

namespace App\Models;

use Illuminate\Foundation\Auth\User as Authenticatable;
use ArtisanAli\Messenger\Contracts\MessageableInterface;
use ArtisanAli\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 个模型

ArtisanAli\Messenger\Models\Message;
ArtisanAli\Messenger\Models\MessageThread;
ArtisanAli\Messenger\Models\MessageThreadParticipant;

你可以像使用普通模型一样使用它们。有关详细信息,请参阅每个模型和 ArtisanAli\Messenger\Traits\Messageable 特质。

配置文件

目前你可以配置要使用的模型。

许可协议

此软件包是免费软件,根据 MIT 许可证条款分发。