A simple PHP package for sending messages to Slack, with a focus on ease of use and elegant syntax.

Related tags

API slack php
Overview

Slack for PHP

Build Status Code Coverage Scrutinizer Code Quality StyleCI | Slack Welcome

A simple PHP package for sending messages to Slack with incoming webhooks, focused on ease-of-use and elegant syntax.

supports: PHP 7.1, 7.2, 7.3, 7.4 or 8.0
require: guzzlehttp/guzzle any of versions ~7.0|~6.0|~5.0|~4.0

This is the fork of popular, great, but abandoned package maknz/slack

Quick Tour

  • create an incoming webhook & copy hook_url

  • composer require alek13/slack

  • add the following code

     use Maknz\Slack\Client;
    
     require(__DIR__ .'/vendor/autoload.php');
    
     $client = new Client('https://hook_url');
     $client->to('#general')->send('Good morning');
    

Done!




Installation

You can install the package using the Composer package manager by running in your project root:

composer require alek13/slack

Incoming WebHook

Then create an incoming webhook on your Slack account for the package to use. You'll need the webhook URL to instantiate the client (or for the configuration file if using Laravel).

Basic Usage

Instantiate the client

// Instantiate without defaults
$client = new Maknz\Slack\Client('https://hooks.slack.com/...');

// Instantiate with defaults, so all messages created
// will be sent from 'Cyril' and to the #accounting channel
// by default. Any names like @regan or #channel will also be linked.
// use response_type (in_channel | ephemeral) to denote whether the message will be visible
// to others in the channel.
$settings = [
    'username'     => 'Cyril',
    'channel'      => '#accounting',
    'reponse_type' => 'in_channel',
    'link_names'   => true
];

$client = new Maknz\Slack\Client('https://hooks.slack.com/...', $settings);

Settings

The default settings are pretty good, but you may wish to set up default behaviour for your client to be used for all messages sent. All settings are optional and you don't need to provide any. Where not provided, we'll fallback to what is configured on the webhook integration, which are managed at Slack, or our sensible defaults.

Field Type Description
channel string The default channel that messages will be sent to
username string The default username for your bot
icon string The default icon that messages will be sent with, either :emoji: or a URL to an image
response_type string Whether to show the response in the channel to all members or privately ('ephemeral'
link_names bool Whether names like @regan or #accounting should be linked in the message (defaults to false)
unfurl_links bool Whether Slack should unfurl text-based URLs (defaults to false)
unfurl_media bool Whether Slack should unfurl media-based URLs, like tweets or Youtube videos (defaults to true)
allow_markdown bool Whether markdown should be parsed in messages, or left as plain text (defaults to true)
markdown_in_attachments array Which attachment fields should have markdown parsed (defaults to none)

Sending messages

Sending a basic message (preview)

$client->send('Hello world!');

Sending a message to a non-default channel

$client->to('#accounting')->send('Are we rich yet?');

Sending a message to a user

$client->to('@regan')->send('Yo!');

Sending a message to a channel as a different bot name (preview)

$client->from('Jake the Dog')->to('@FinnTheHuman')->send('Adventure time!');

Sending a message with a different icon (preview)

// Either with a Slack emoji
$client->to('@regan')->withIcon(':ghost:')->send('Boo!');

// or a URL
$client->to('#accounting')->withIcon('http://example.com/accounting.png')->send('Some accounting notification');

Send an attachment (preview)

$client->to('#operations')->attach([
    'fallback' => 'Server health: good',
    'text' => 'Server health: good',
    'color' => 'danger',
])->send('New alert from the monitoring system'); // no message, but can be provided if you'd like

Send an attachment with fields (preview)

$client->to('#operations')->attach([
    'fallback' => 'Current server stats',
    'text' => 'Current server stats',
    'color' => 'danger',
    'fields' => [
        [
            'title' => 'CPU usage',
            'value' => '90%',
            'short' => true // whether the field is short enough to sit side-by-side other fields, defaults to false
        ],
        [
            'title' => 'RAM usage',
            'value' => '2.5GB of 4GB',
            'short' => true
        ]
    ]
])->send('New alert from the monitoring system'); // no message, but can be provided if you'd like

Send an attachment with an author (preview)

$client->to('@regan')->attach([
    'fallback'    => 'Keep up the great work! I really love how the app works.',
    'text'        => 'Keep up the great work! I really love how the app works.',
    'author_name' => 'Jane Appleseed',
    'author_link' => 'https://yourapp.com/feedback/5874601',
    'author_icon' => 'https://static.pexels.com/photos/61120/pexels-photo-61120-large.jpeg'
])->send('New user feedback');

Using blocks (Block Kit)

$client->to('@regan')
    ->withBlock([
        'type' => 'section',
        'text' => 'Do you love the app?'
    ])
    ->withBlock([
        'type' => 'actions',
        'elements' => [[
            'type'      => 'button',
            'text'      => 'Love it',
            'style'     => 'primary',
            'action_id' => 'love',
        ], [
            'type'      => 'button',
            'text'      => 'Hate it',
            'style'     => 'danger',
            'action_id' => 'hate',
        ],]
    ])
    ->send('Notification fallback message');

Advanced usage

Markdown

By default, Markdown is enabled for message text, but disabled for attachment fields. This behaviour can be configured in settings, or on the fly:

Send a message enabling or disabling Markdown

$client->to('#weird')->disableMarkdown()->send('Disable *markdown* just for this message');

$client->to('#general')->enableMarkdown()->send('Enable _markdown_ just for this message');

Send an attachment specifying which fields should have Markdown enabled

$client->to('#operations')->attach([
    'fallback'  => 'It is all broken, man',
    'text'      => 'It is _all_ broken, man',
    'pretext'   => 'From user: *JimBob*',
    'color'     => 'danger',
    'mrkdwn_in' => ['pretext', 'text']
])->send('New alert from the monitoring system');

Explicit message creation

For convenience, message objects are created implicitly by calling message methods on the client. We can however do this explicitly to avoid hitting the magic method.

// Implicitly
$client->to('@regan')->send('I am sending this implicitly');

// Explicitly
$message = $client->createMessage();
$message
    ->to('@regan')
    ->setText('I am sending this explicitly')
;

$client->send($message);

Attachments

When using attachments, the easiest way is to provide an array of data as shown in the examples, which is actually converted to an Attachment object under the hood. You can also attach an Attachment object to the message:

$attachment = new Attachment([
    'fallback' => 'Some fallback text',
    'text'     => 'The attachment text'
]);

// Explicitly create a message from the client
// rather than using the magic passthrough methods
$message = $client->createMessage();

$message->attach($attachment);
// Explicitly set the message text rather than
// implicitly through the send method
$message->setText('Hello world');

$client->send($message);

Each attachment field is also an object, an AttachmentField. They can be used as well instead of their data in array form:

$attachment = new Attachment([
    'fallback' => 'Some fallback text',
    'text' => 'The attachment text',
    'fields' => [
        new AttachmentField([
            'title' => 'A title',
            'value' => 'A value',
            'short' => true
        ])
    ]
]);

You can also set the attachments and fields directly if you have a whole lot of them:

// implicitly create a message and set the attachments
$client->setAttachments($bigArrayOfAttachments);

// or explicitly
$client->createMessage()->setAttachments($bigArrayOfAttachments);
$attachment = new Attachment([]);

$attachment->setFields($bigArrayOfFields);

Playground

There is the php-slack/playground simple console script to test messaging and to see how messages looks really.

Questions

Slack Welcome

If you have any questions how to use or contribute,
you are welcome in our Slack Workspace.

Contributing

Slack Welcome

If you're having problems, spot a bug, or have a feature suggestion, please log and issue on Github. If you'd like to have a crack yourself, fork the package and make a pull request. Please include tests for any added or changed functionality. If it's a bug, include a regression test.

Comments
  • Update Composer and PHPUnit to PHP 8.0

    Update Composer and PHPUnit to PHP 8.0

    PHP 8.0 shipped today, and Composer and PHPUnit prevents this package from upgrading to PHP 8.0

    • Updated the unit tests to be compatible with PHPUnit 9.4
    • Added PHP 7.4 and 8.0 to Travis CI, but PHP 8.0 is not yet supported
    • Updated composer.json to be compatible with PHP 8.0
    • Confirmed unit tests work with PHP 7.1 and higher
    opened by phpfui 10
  • False position invalid block usage of multi_users_select

    False position invalid block usage of multi_users_select

    I'm attempting to use input type multi_users_select but I am being thrown an error that I'm not allowed to use it. I'm assuming the package isn't aware it's a valid input type. It does exist and can be seen in Slacks Block Kit Buider and block elements documentation.

    Invalid Block type \"multi_users_select\". Must be one of: button, checkboxes, datepicker, image, multi_static_select, overflow, plain_text_input, radio_buttons, static_select, plain_text, mrkdwn.
    
    opened by MechJosh0 7
  • Playground link does not work

    Playground link does not work

    Wanted to figure out how to send [text](url) Markdown but found out the playground links in /slack and /playground are both dead

    https://github.com/php-slack/playground

    opened by C0rn3j 5
  • Added callback_id to Attachment.php

    Added callback_id to Attachment.php

    Added callback_id to Attachment.php to allow for working with the interactivity callback api in slack. Without this, Slack will not call back to your API web hook.

    opened by GRMrGecko 4
  • Added 'response_type' setting

    Added 'response_type' setting

    Slack's 'response_type' setting ('ephemeral' | 'in_channel') determines the visibility of responses in a channel.

    if 'ephemeral', then the bot response is invisible to other members in a channel if 'in_channel', then the bot response is visible to other members in a channel

    see 'message visibility' under: https://api.slack.com/interactivity/slash-commands#sending_an_immediate_response

    opened by sparkwatson 4
  • Set Content-Type header on requests

    Set Content-Type header on requests

    https://github.com/php-slack/slack/blob/006520e96e97292e9bfff2cd8259cf20d37696b8/src/Client.php#L475

    The json request option should be used instead of body so that the Content-Type request header is set correctly to application/json

    A Content-Type header of application/json will be added if no Content-Type header is already present on the message. https://docs.guzzlephp.org/en/6.5/request-options.html#json

    This ensures compatibility with Slack-like services such as rocket chat and mattermost.

    opened by bytestream 3
  • Checkboxes accessory doesn't work:

    Checkboxes accessory doesn't work:

    I am trying to use Slack Checkboxes accessory with a text field. This is the block definition from Slack's BlockKit page:

    {
    	"type": "section",
    	"text": {
    		"type": "mrkdwn",
    		"text": "Testtext"
    	},
    	"accessory": {
    		"type": "checkboxes",
    		"options": [
    			{
    				"value": "ACK",
    				"text": {
    					"type": "plain_text",
    					"text": "Acknowledge"
    				}
    			}
    		]
    	}
    }
    

    I have formatted it to following PHP array structure:

    $text = array(
    	'type'      => 'section',
    	'text'      => array(
    		'type' => 'mrkdwn',
    		'text' => $message,
    	),
    	'accessory' => array(
    		'type'    => 'checkboxes',
    		'options' => array(
    			array(
    				'value' => 'ACK',
    				'text'  => array(
    					'type' => 'plain_text',
    					'text' => 'Acknowledge',
    				),
    			),
    		),
    	),
    );
    

    I am using:

    $client->withBlock($text)->send('Test');
    

    to send the message.

    I get the following exception:

    PHP Fatal error:  Uncaught InvalidArgumentException: Invalid Block type "checkboxes". Must be one of: button, checkbox, datepicker, image, multi_static_select, overflow, plain_text_input, radio_buttons, static_select, plain_text, mrkdwn. in /home/tero/code/ndc/core/vendor/alek13/slack/src/BlockElement.php:62
    Stack trace:
    #0 /home/tero/code/ndc/core/vendor/alek13/slack/src/Block/Section.php(127): Maknz\Slack\BlockElement::factory()
    #1 /home/tero/code/ndc/core/vendor/alek13/slack/src/Payload.php(33): Maknz\Slack\Block\Section->setAccessory()
    #2 /home/tero/code/ndc/core/vendor/alek13/slack/src/Payload.php(20): Maknz\Slack\Payload->fillProperties()
    #3 /home/tero/code/ndc/core/vendor/alek13/slack/src/Block.php(87): Maknz\Slack\Payload->__construct()
    #4 /home/tero/code/ndc/core/vendor/alek13/slack/src/Message.php(407): Maknz\Slack\Block::factory()
    #5 /home/tero/code/ndc/core/vendor/alek13/slack/src/Client.php(185): Maknz\Slack\Message->withBlock()
    #6 /home/tero/code/ndc/core/classes/Slack.php(71): Maknz\Slack\Client->__call()
    #7 /ho in /home/tero/code/ndc/core/vendor/alek13/slack/src/BlockElement.php on line 62
    

    If I change type to checkbox, the error is:

    PHP Fatal error:  Uncaught Error: Class 'Maknz\Slack\BlockElement\Checkbox' not found in /home/tero/code/ndc/core/vendor/alek13/slack/src/BlockElement.php:67
    

    Is this an issue with the library or is it a problem in my block definition?

    • Tero
    bug 
    opened by mongeron 3
  • README is outdated

    README is outdated

    This is not how it works anymore, I believe:

    Screenshot 2020-12-13 at 08 30 48

    it's more like this:

        protected function triggerNotification(string $from, string $messageText): void {
            $client = new Client($this->notificationsHook);
            $message = new Message($client);
            $message->setUsername($from)->setText($messageText);
            $client->sendMessage($message);
        }
    
    opened by NinoSkopac 3
  • Guzzle 7.* support?

    Guzzle 7.* support?

    Thanks for maintaining this package!

    Is there a specific reason it doesn't list Guzzle 7 in the composer.json file? I have a project where I would like to include it but another package requires Guzzle 7 which is preventing me from using this Slack package.

    enhancement PR welcome 
    opened by malle-pietje 3
  • Sections /w Fields should not have a top level

    Sections /w Fields should not have a top level "text" key. Fatal error is generated

    src/Block/Section.php line 146

    $data = [
        'type' => $this->getType(),
        'text' => $this->getText()->toArray();
    ];
    

    Suggestion, add a check

    if ( $this->getText() ) {
           $data['text'] = $this->getText()->toArray();
    }
    
    opened by ewartx 3
  • php 8.0 compatibility warning when running phpcs

    php 8.0 compatibility warning when running phpcs

    FOUND 1 ERROR AFFECTING 1 LINE
    --------------------------------------------------------------------------------------------------------------------------------------
    
    LINE 2: ERROR 'object' is a soft reserved keyword as of PHP version 7.0 and a reserved keyword as of PHP version 7.2 and should not be
    
                  used to name a class, interface or trait or as part of a namespace (T_NAMESPACE)
    --------------------------------------------------------------------------------------------------------------------------------------
    
       1:  <?php
    >> 2:  namespace Maknz\Slack\Object;
    

    If you need a hand, I can create a pull request for it.

    3.x-dev 
    opened by 8ctopus 2
Releases(2.2.1)
  • 2.2.1(Oct 20, 2021)

  • 2.2.0(Oct 17, 2021)

    Change Log:

    • Fix invitation link. Ralates to php-slack/slack#67
    • Change fieldClass property to trait abstract
    • Fix minor Scrutinizer issue with legacy Client injection to Message
    • autoload-dev for tests directory to keep it out of production autoloader
    • Set Content-Type header to application/json (#71). Closes #70
    • Apply fixes from StyleCI (#73). Relates to #71, #70
    • New Block Types (#75)
    • Commit styleci yml (#77)

    View Commits

    Source code(tar.gz)
    Source code(zip)
  • 2.1.1(Sep 2, 2021)

  • 2.1.0(Jun 22, 2021)

  • 2.0.2(Jun 9, 2021)

  • 2.0.1(Feb 24, 2021)

  • 2.0.0(Feb 10, 2021)

    Change Log:

    • ignore phpunit.xml & rename to phpunit.xml.dist fix #16
    • exclude 'tests' & 'vendor' from calc code coverage. closes #18
    • code style rules; add .editorconfig
    • migrate to phpunit 6.5. closes #7. & Update PhpUnit to 7.5. Closes #27
    • migrate to mockery 1.0. closes #19
    • drop support for php 5, 7.0 & hhvm (fixes builds)
    • php docblocks for tests. closes #8
    • decrease Attachment::__contruct() complexity. closes #9
    • rename attributes to options
    • decrease Client::__construct() complexity. closes #12
    • Added response_type to allow for 'in_channel' vs 'emphemeral' messages in channel
    • Blocks support (Integrate Blocks with main Message/Client) by @cmbuckley:
      • Button element and Confirmation object
      • Checkboxes element and Option object
      • DatePicker element
      • Image element
      • Overflow element
      • TextInput element
      • RadioButtons element
      • Select element and OptionGroup object
      • MultiSelect element
      • Actions block
      • Context block
      • Divider block
      • File block
      • Image block
      • Input block
    • Fix php doc-blocks. Closes #39.
    • correct initial option check (fixes #40)
    • add travis notification to Slack. Closes #17.
    • fix class name. fix #45
    • Improve test coverage for Block kit
    • Added callback_id to Attachment.php (#50) to allow for working with the interactivity callback api in slack
    • bugfix: prevent call on non-object
    • Update Composer and PHPUnit to PHP 8.0 (#56)
    • reuse Payload for fillProperties() (decrease complexity). resolves #13
    • decouple Message from Client. Closes #15, fixes maknz/slack#70
    Source code(tar.gz)
    Source code(zip)
  • 1.12.0(Sep 1, 2020)

  • 1.11.0(Mar 25, 2020)

    Change Log:

    • fix AttachmentAction::__toArray: no default confirmation popup if no confirm specified (fixes #41)
    • remove 5.5 & hhvm support, add 7.3 & 7.4 support; also remove builds for nightly
    • change travis & scrutinizer badge urls in readme
    • add ext-json dependency to composer.json
    • add Playground info in readme

    View Commits

    Source code(tar.gz)
    Source code(zip)
  • 1.10.1(Jan 25, 2018)

    Change Log:

    • mark Message::send as deprecated for #15
    • mark Laravel Provider as deprecated with link to new separate package
    • add Questions section in readme
    • add Quick Tour section in readme

    View Commits

    Source code(tar.gz)
    Source code(zip)
  • 1.10.0(Jan 19, 2018)

  • 1.9.1(Jan 17, 2018)

  • 1.9.0(Jan 10, 2018)

    Change Log:

    • Added optional footer attachments. Closes maknz/slack#87, closes #2 George* 6/15/16 12:08 AM
    • Php doc-blocks fixes. (Mesut Vatansever* 10/20/16 12:06 PM, Michal Vyšinský* 10/19/16 10:58 AM, Freek Van der Herten* 7/18/16 10:51 PM)

    View Commits

    Source code(tar.gz)
    Source code(zip)
  • 1.8.1(Jan 10, 2018)

    Change Log:

    • Fix bug where message wouldn't get returned on send, closes maknz/slack#47 maknz* 6/26/16 8:06 AM
    • integrated Gemnasium; add dependency status badge Alexander Chibrikin 1/9/18 3:38 AM
    • integrated Scrutinizer-CI; change badge Alexander Chibrikin 1/9/18 3:36 AM
    • add slack welcome badge for community slack workspace Alexander Chibrikin 1/8/18 11:55 PM

    View Commits

    Source code(tar.gz)
    Source code(zip)
  • 1.8.0(Jan 10, 2018)

    Change Log:

    • speed up builds: store composer cache Alexander Chibrikin 1/8/18 4:11 AM
    • add extra branch-alias for packagist Alexander Chibrikin 1/8/18 3:52 AM
    • bugfix: fail on build AttachmentAction without confirm (fixes #1, fixes maknz/slack#61) Alexander Chibrikin 1/7/18 5:33 PM
    • fix travis build; add builds for php 7.1, 7.2, nightly Alexander Chibrikin 1/6/18 8:48 PM
    • rename & publish new package on Packagist.org
    • add CHANGELOG.md Alexander Chibrikin 1/8/18 1:39 AM
    • Better Travis version testing maknz 6/25/16 5:43 AM
    • Drop PHP 5.4, throw an exception if JSON encoding fails maknz 5/28/16 8:29 AM
    • fixed code style Ion Bazan 6/22/16 12:04 PM
    • added Attachment Actions (buttons) with confirmations Ion Bazan 6/22/16 11:56 AM
    • StyleCI config, add badge to README maknz 5/28/16 7:36 AM
    • Code style fixes to abide by StyleCI laravel preset maknz 5/28/16 7:29 AM
    • Suggest nexylan/slack-bundle for Symfony support Regan McEntyre 3/8/16 10:45 PM
    • Update README with NexySlackBundle Regan McEntyre 3/8/16 10:41 PM
    • Fixed documentation color values Quentin McRee 1/20/16 4:37 AM
    • Removes unused Guzzle class reference from service provider Raj Abishek 12/21/15 8:01 AM
    • Fix Laravel 5 config publish instructions Regan McEntyre 6/15/15 10:59 AM
    • Add Scrutinizer badge Regan McEntyre 6/4/15 12:24 PM

    View Commits

    Source code(tar.gz)
    Source code(zip)
Owner
null
The efficient and elegant JSON:API 1.1 server library for PHP

Woohoo Labs. Yin Woohoo Labs. Yin is a PHP framework which helps you to build beautifully crafted JSON:APIs. Table of Contents Introduction Features W

Woohoo Labs. 237 Nov 28, 2022
The efficient and elegant, PSR-7 compliant JSON:API 1.1 client library for PHP

Woohoo Labs. Yang Woohoo Labs. Yang is a PHP framework which helps you to communicate with JSON:API servers more easily. Table of Contents Introductio

Woohoo Labs. 160 Oct 16, 2022
Syntax to query GraphQL through URL params, which grants a GraphQL API the capability to be cached on the server.

Field Query Syntax to query GraphQL through URL params, which grants a GraphQL API the capability to be cached on the server. Install Via Composer com

PoP 4 Jan 7, 2022
A powerful PHP Router for PSR7 messages inspired by the Laravel API.

Rare Router A simple PHP router built on AltoRouter but inspired by the Laravel API. Installation composer require rareloop/router Usage Creating Rou

Rareloop 74 Dec 17, 2022
It validates PSR-7 messages (HTTP request/response) against OpenAPI specifications

OpenAPI PSR-7 Message (HTTP Request/Response) Validator This package can validate PSR-7 messages against OpenAPI (3.0.x) specifications expressed in Y

The League of Extraordinary Packages 421 Jan 3, 2023
Quickly and easily expose Doctrine entities as REST resource endpoints with the use of simple configuration with annotations, yaml, json or a PHP array.

Drest Dress up doctrine entities and expose them as REST resources This library allows you to quickly annotate your doctrine entities into restful res

Lee Davis 88 Nov 5, 2022
Supermeteor is PHP SDK use to create cloud message: whatsapp, sms and email etc

Supermeteor Supermeteor is PHP SDK use to create cloud message: whatsapp, sms and email etc How to use install using composer composer require superme

null 0 Jul 15, 2022
An easy to use Fractal wrapper built for Laravel and Lumen applications

An easy to use Fractal wrapper built for Laravel and Lumen applications The package provides a nice and easy wrapper around Fractal for use in your La

Spatie 1.8k Dec 30, 2022
A PHP library for the CoinMarketCap API designed to be easy to use.

Help wanted: I don't have enough time to keep updating this library, if you can, don't be shy. Pull requests are welcome. PHP CoinMarketCap API This p

Shahrad Elahi 12 Sep 23, 2022
GraPHPinator ⚡ 🌐 ⚡ Easy-to-use & Fast GraphQL server implementation for PHP

Easy-to-use & Fast GraphQL server implementation for modern PHP. Includes features from latest draft, middleware directives and modules with extra functionality.

Infinityloop.dev 34 Dec 14, 2022
The NKN open API is a blockchain-to-database parser with an easy to use interface written in PHP

The NKN open API is a blockchain-to-database parser with an easy to use interface written in PHP. We're using Laravel as our framework to provide a clean and maintainable code.

Rule110 - The NKN open source community 7 Jun 26, 2022
An Unleash bundle for Symfony applications to provide an easy way to use feature flags

Unleash Bundle An Unleash bundle for Symfony applications. This provide an easy way to implement feature flags using Gitlab Feature Flags Feature. Ins

Stogon 7 Oct 20, 2022
This small POC aims to show how Symfony is able, natively without modifications, to use subdirectories for Entities, Repositories, controllers, views…

POC - Using Sub Directories in a Symfony Project This small POC aims to show how Symfony is able, natively without modifications, to use subdirectorie

Yoan Bernabeu 2 May 12, 2022
Use middleware to decorate method calls within your application code.

Laravel Middlewarize ?? Chain of Responsibility Design Pattern In Laravel Apps ?? You can use middlewares to decorate any method calls on any object.

Iman 99 Jan 1, 2023
PSR-15 middleware to use Whoops as error handler

middlewares/whoops Middleware to use Whoops as error handler. Requirements PHP >= 7.2 A PSR-7 http library A PSR-15 middleware dispatcher Installation

Middlewares 31 Jun 23, 2022
A RESTful and extendable Backend as a Service that provides instant backend to develop sites and apps faster, with dead-simple integration for JavaScript, iOS, Android and more.

Welcome to hook ![Gitter](https://badges.gitter.im/Join Chat.svg) hook is a RESTful, extendable Backend as a Service that provides instant backend to

doubleleft 762 Dec 30, 2022
Simple and effective multi-format Web API Server to host your PHP API as Pragmatic REST and / or RESTful API

Luracast Restler ![Gitter](https://badges.gitter.im/Join Chat.svg) Version 3.0 Release Candidate 5 Restler is a simple and effective multi-format Web

Luracast 1.4k Dec 14, 2022
A simple and flexible PHP middleware dispatcher based on PSR-7, PSR-11, and PSR-15

Woohoo Labs. Harmony Woohoo Labs. Harmony is a PSR-15 compatible middleware dispatcher. Harmony was born to be a totally flexible and almost invisible

Woohoo Labs. 153 Sep 5, 2022
This API provides functionality for creating and maintaining users to control a simple To-Do-List application. The following shows the API structure for users and tasks resources.

PHP API TO-DO-LIST v.2.0 This API aims to present a brief to consume a API resources, mainly for students in the early years of Computer Science cours

Edson M. de Souza 6 Oct 13, 2022