johnturingan/laravel-slack

分支仓库

1.3.0 2020-04-03 21:44 UTC

This package is not auto-updated.

Last update: 2024-09-15 05:39:30 UTC


README

Build Status codecov Latest Stable Version PHP from Packagist Laravel Version Total Downloads License
基于illuminate/mail

关于 Laravel Slack

Laravel Slack 的 Slack 通知,易于使用、快速、简单且 高度可测试。由于它使用按需通知,因此需要 Laravel 5.5 或更高版本。

安装

在您的 composer.json 中需要此包并更新您的依赖项

composer require gpressutto5/laravel-slack

由于此包支持 Laravel 的包自动发现,因此您无需手动注册 ServiceProvider。

之后,发布配置文件

php artisan vendor:publish --provider="Pressutto\LaravelSlack\ServiceProvider"

您需要为您的 Slack 团队配置一个 "Incoming Webhook" 集成。

配置

在发布的配置文件 config/laravel-slack.php 中,您可以更改如 Webhook URL、默认频道、应用程序名称和应用程序图像等选项。

出于安全原因,您不应提交 Webhook URL,因此默认情况下,此包将使用环境变量 SLACK_WEBHOOK_URL。您只需将其添加到您的 .env 文件中。如下所示

SLACK_WEBHOOK_URL=https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXXX

使用方法

您可以通过以下方式发送简单的 Slack 消息

  • 发送到频道的消息
\Slack::to('#finance')->send('Hey, finance channel! A new order was created just now!');
  • 发送到用户的消息
\Slack::to('@joe')->send("Hey Joe! It looks like you've forgotten your password! Use this token to recover it: as34bhdfh");
  • 发送到多个用户的消息
\Slack::to(['@zoe', '@amy', '@mia'])->send('I swear, honey, you are the only one... :heart:');
//         ↑  look at this array  ↑
  • 混合使用
\Slack::to('#universe', '@god', '#scientists')->send(':thinking_face:');
//         ↑ what? I don't need that array? ↑
  • 无接收者
\Slack::send('Default message to the default channel, set on config/laravel-slack.php.');
  • 发送 SlackMessage 对象
class HelloMessage extends SlackMessage
{
    public $content = "Hey bob, I'm a sending a custom SlackMessage";
    public $channel = '@bob';
}
\Slack::send(new SlackMessage());
  • 发送到用户

    只要它们有属性 slack_channel,您就可以使用任何对象作为接收者。如果您正在使用模型,您只需创建列 slack_channel 并将 @username#channel 名称存储在那里。如果您已经存储但它位于不同的列中,您可以创建一个方法 getSlackChannelAttribute

class User extends Model
{
    public function getSlackChannelAttribute(): string
    {
        return $this->attributes['my_custom_slack_channel_column'];
    }
}
\Slack::to(User::where('verified', true))->send('Sending message to all verified users!');
  • 还有更多...

    此包正在开发和开发中。将会有许多功能出现。请保持关注,并请帮助我们!

测试

在测试时,您可以通过调用 Slack::fake() 来轻松模拟 Slack 服务,它将返回一个不会发送任何真实消息并会将它们保存到数组中的 SlackFake 对象。您可以通过调用 Slack::sentMessages() 来获取此数组。

此类还有一些辅助方法,您可以在测试中使用

  • 断言至少发送了一条包含内容 'fake' 的消息
Slack::assertSent(function (SlackMessage $message) {
    return $message->content === 'fake';
});
  • 断言至少发送了两条内容超过 5 个字符的字符串的消息
Slack::assertSent(function (SlackMessage $message) {
    return strlen($message->content) >= 100;
}, 2);
  • 断言正好发送了五条包含内容包含单词 'test' 的消息
Slack::assertSent(function (SlackMessage $message) {
    return strpos($message->content, 'test') !== false;
}, 5, true);
  • 断言正好发送了三条消息
Slack::assertSentCount(3);
  • 更多测试辅助方法即将推出...

由于此包使用 illuminate/notifications 发送通知,因此您可以模拟通知服务而不是 Slack 服务,并在测试中使用 NotificationFake 类。请参阅 这里