Talk is a real-time users messaging and chatting system Laravel.

Overview

Laravel-Talk

Awesome Laravel GitHub license Build Status

Talk is a Laravel 5 based user conversation (inbox) system with realtime messaging. You can easily integrate this package with any Laravel based project. It helps you to develop a messaging system in just few minutes. Here is a project screenshot that was developed by Talk.

Talk v2.1.0 supports realtime messaging. Learn more about Talk Live Messaging

Feedback

If you already used Talk, please share your experience with us. It will make the project better.

Give us your feedback

Built with Talk

If you are using Talk in your project please share your project URL or project name with us. It will inspire other people to use Talk.

See which project was Built with Talk.

Caution

Do not migrate 1.1.7 from its higher version directly. Please try our sample project first and then apply it on your project.

Talk-Example Screenshot

You may try Talk-Example project.

Or you can try live Demo by using this credentials:

username: admin   
password: admin

So let's start your tour :)

Features

  • Head to head messaging
  • Realtime messaging
  • Creating new conversation
  • Message threads with latest one
  • View conversations by user id or conversation id
  • Support pagination in threads and messages
  • Delete (soft delete) message from both end. Sender and receiver can delete their message from their end
  • Permanent delete message
  • Mark message as seen
  • Only participant can view or access there message or message threads
  • Inline url render using oembed specifications

Installation

Talk is a Laravel package so you can install it via Composer. Run this command in your terminal from your project directory:

composer require nahid/talk

Wait for a while, Composer will automatically install Talk in your project.

Configuration

When the download is complete, you have to call this package service in config/app.php config file. To do that, add this line in app.php in providers section:

Nahid\Talk\TalkServiceProvider::class,

To use facade you have to add this line in app.php in aliases array:

'Talk'      => Nahid\Talk\Facades\Talk::class,

Now run this command in your terminal to publish this package resources:

php artisan vendor:publish --provider="Nahid\Talk\TalkServiceProvider"

After running this command, all necessary file will be included in your project. This package has two default migrations. So you have to run migrate command like this. (But make sure your database configuration is configured correctly.)

php artisan migrate

Okay, now you need to configure your user model for Talk. Go to config/talk.php and config it:

return [
    'user' => [
        'model' => 'App\User',
        'foreignKey' => null,
        'ownerKey' => null
    ],
    'broadcast' => [
        'enable' => false,
        'app_name' => 'your-app-name',
        'pusher' => [
            'app_id'        => '',
            'app_key'       => '',
            'app_secret'    => '',
            'options' => [
                 'cluster' => 'ap1',
                 'encrypted' => true
            ]
        ]
    ],
    'oembed' => [
        'enabled' => false,
        'url' => null,
        'key' => null
    ]
];

Usage

Its very easy to use. If you want to set authenticate user id globally then you have to set a middleware first. Go to app/Http/Kernel.php and set it in $routeMiddleware array:

'talk'  =>  \Nahid\Talk\Middleware\TalkMiddleware::class,

And now you can use it from anywhere with middleware. Suppose you have a Controller and you want to set authenticate user id globally then write this in controller constructor:

$this->middleware('talk');

But instead of set id globally you can use these procedure from any method in controller:

Talk::setAuthUserId(auth()->user()->id);

Now you may use any method what you need. But if want pass authentic id instantly, this method may help you:

Talk::user(auth()->user()->id)->anyMethodHere();

Please see the API Doc.

API List

setAuthUserId

setAuthUserId method sets the currently loggedin user id, which you pass through parameter. If you pass null or empty value then it returns false.

Syntax

void setAuthUserId($userid)

Example

Constructor of a Controller is the best place to write this method.

function __construct()
{
    Talk::setAuthUserId(auth()->user()->id);
}

When you pass logged in user ID, Talk will know who is currently authenticated for this system. So Talk retrieve all information based on this user.

user

You may use this method instead of setAuthUserId() method. When you have to instantly access users conversations then you may use it. Syntax

object user($id)

Example When you haven't set authenticated user id globally, then you just use this method directly with others method.

$inboxes = Talk::user(auth()->user()->id)->threads();
return view('messages.threads', compact('inboxes'));

isConversationExists

This method checks currently logged in user and if given user is already in conversation

Syntax

int|false isConversationExists($userid)

Example

if ($conversationId = Talk::isConversationExists($userId)) {
    Talk::sendMessage($conversationId, $message);
} 

isAuthenticUser

isAuthenticUser checks if the given user exists in given conversation.

Syntax

boolean isAuthenticUser($conversationId, $userId)

Example

if (Talk::isAuthenticUser($conversationId, $userId)) {
    Talk::sendMessage($conversationId, $message);
} 

sendMessage

You can send messages via conversation id by using this method. If the message is successfully sent, it will return objects of Message model otherwise, it will return false

Syntax

object|false sendMessage($conversationId, $message)

Example

    $message = Talk::sendMessage($conversationId, $message);
    if ($message) {
        return response()->json(['status'=>'success', 'data'=>$message], 200);
   }

sendMessageByUserId

You can send message via receiver id by using this method. If the message is successfully sent, it will return objects of Message model otherwise, it will return false

Syntax

object|false sendMessageByUserId($userId, $message)

getInbox

If you want to get all the inboxes except soft deleted message , this method may help you. This method gets all the inboxes via previously assigned authenticated user id. It returns collections of message thread with latest message.

Syntax

array getInbox([$order = 'desc'[,$offset = 0[, $take = 20]]])

Example

// controller method
$inboxes = Talk::getInbox();
return view('message.threads', compact('inboxes'));
<!-- messages/threads.blade.php -->
<ul>
    @foreach($inboxes as $inbox)
        <li>
            <h2>{{$inbox->withUser->name}}</h2>
            <p>{{$inbox->thread->message}}</p>
            <span>{{$inbox->thread->humans_time}}</span>
        </li>
    @endforeach
</ul>

getInboxAll

Its similar as getInbox() method. If you want to get all the inboxes with soft deleted messages, this method may help you. This method gets all the inboxes via given user id.

Syntax

object getInboxAll([$order = 'desc'[,$offset = 0[, $take = 20]]])

threads

This method is an alias of getInbox() method.

Syntax

array threads([$order = 'desc'[,$offset = 0[, $take = 20]]])

threadsAll

This method is an alias of getInboxAll() method.

Syntax

array threadsAll([$order = 'desc'[,$offset = 0[, $take = 20]]])

getConversationsById

When you want to get all the conversations using your desire conversation id, you can try this method. This method returns all the conversations (except soft deleted) with sender and withUser objects

Syntax

array getConversationsById($conversationId[, $offset = 0[, $take = 20]])

Example

// controller method
$conversations = Talk::getConversationsById($conversationId);
$messages = $conversations->messages;
$withUser = $conversations->withUser;

return view('messages.conversations', compact('messages', 'withUser'));

This method returns two objects messages and withUser. messages object contains messages collection and withUser object contains participant User collections.

Let's see how to use it with your views

<!-- messages/conversations.blade.php -->
<div class="message-container">
    <h2>Chat with {{$withUser->name}}</h2>
    @foreach ($messages as $msg)
     <div class="message">
        <h4>{{$msg->sender->name}}</h4>
        <span>{{$msg->humans_time}}</span>
        <p>
            {{$msg->message}}
       </p> 
    </div>
    @endforeach
</div>

getConversationsAllById

This method is similar as getConversationsById(). The only difference between this method is its return all messages with soft deleted items.

Syntax

array getConversationsAllById($conversationId[, $offset = 0[, $take = 20]])

getConversationsByUserId

When you want to get all the conversations using your desire receiver id, you can try this method. This method returns all the conversations (except soft deleted message) with user's objects

Syntax

object getConversationsByUserId($receiverId [, $offset = 0[, $take = 20]])

getConversationsAllByUserId

This method is similar as getConversationsByUserId(). The only difference between this method is it returns all messages with soft deleted items.

Syntax

array getConversationsAllByUserId($receiverId[, $offset = 0[, $take = 20]])

getMessages

This is a alias of getConversationsById() method.

Syntax

array messages($conversationId[, $offset = 0[, $take = 20]])

getMessagesAll

This is a alias of getConversationsAllById() method.

Syntax

array messagesAll($conversationId[, $offset = 0[, $take = 20]])

getMessagesByUserId

This is a alias of getConversationsByUserId() method.

Syntax

array messagesByUserId($receiverId[, $offset = 0[, $take = 20]])

getMessagesAllByUserId

This is a alias of getConversationsAllByUserId() method.

Syntax

array messagesAllByUserId($receiverId[, $offset = 0[, $take = 20]])

readMessage

If you want to read a single message then you may use it. This message is return a single message object by message id.

Syntax

array readMessage($messageId)

getReceiverInfo

This method returns all the information about message receiver.

This method is deprecated from version 2.0.0 and it will be removed from version 2.0.2

Syntax

object getReceiverInfo($conversationId)

makeSeen

If you want to set a message as seen you can use this method.

Syntax

boolean makeSeen($messageId)

deleteMessage

When you want to delete a specific message from a conversation, you have to use this method. This method soft delete message for both user-end individually.

Syntax

boolean deleteMessage($messageId)

deleteForever

If you want to hard delete or permanently delete a specific message then you have to use this method.

Syntax

boolean deleteForever($messageId)

deleteConversations

This method is used to permanently delete all conversations.

Syntax

boolean deleteConversations($conversationId)

Realtime Messaging

Talk also support realtime messaging thats called Talk-Live. Talk use pusher for realtime message. So first you have to configure pusher. Go to app/talk.php again and configure.

return [
    'user' => [
        'model' => 'App\User'
    ],
    'broadcast' => [
        'enable' => false,
        'app_name' => env('PUSHER_APP_NAME'),
        'pusher' => [
            'app_id' => env('PUSHER_APP_ID'),
            'app_key' => env('PUSHER_APP_KEY'),
            'app_secret' => env('PUSHER_APP_SECRET'),
            'options' => [
                'cluster' => env('PUSHER_APP_CLUSTER'),
                'encrypted' => true
            ]
        ],
    ],
];

in this new version broadcast section was added with talk config. Here broadcast is disabled by default. If you want to enable live (realtime) messaging then you have to enable it first. Then add pusher credentials to your .env file and you must add a new line called PUSHER_APP_NAME in the .env file to specify your application pusher name. Thats it. Everytime when you send message then talk will automatically fire two event, one for specific user and second for specific conversation. So you may listen or subscribe one or both as per your wish. Finally you have to subscribe these events by using talk_live() helper function. Go to where you want to subscribe to work with message data follow this code.

<script>
    var msgshow = function(data) {
        // write what you want with this data
        
        console.log(data);
    }
</script>

{!! talk_live(['user'=>["id"=>auth()->user()->id, 'callback'=>['msgshow']]]) !!}

talk_live() supports one parameters as array. The first parameter is for channel name which you want to subscribe. You have not know which channel was broadcast. Talk broadcast two channel by default. One for user and second for conversation. If you want to subscribe channel for currently loggedin user then you have to pass

logedin user id in 'user' key. ['user'=>['id'=>auth()->user()->id, 'callback'=>[]] or you want to subscribe for conversation id you have pass conversation id as 'conversation' key. ['conversation'=>['id'=>$conversationID, 'callback'=>[]]. You may pass both if you want.

You can pass a callback for working with pusher recieved data. For both user and conversation section support callbacks as array. So you can pass multiple callback as array value that was shown in previous example.

You can watch Talk-Live-Demo

Oembed support

Talk also supports embed urls simply use $message->toHtlmString() in you views to render an embed link

Eg. This is a youtube embed link: https://www.youtube.com/watch?v=jNQXAC9IVRw

<div class="message-container">
    <h2>Chat with {{$withUser->name}}</h2>
    @foreach ($messages as $msg)
     <div class="message">
        <h4>{{$msg->sender->name}}</h4>
        <span>{{$msg->humans_time}}</span>
        <p>
            {{$msg->toHtmlString()}}
       </p> 
    </div>
    @endforeach
</div>

Custom embed link

If you want to setup your own implementation of oembed you can configure it in the talk config file. You endpoint should follow the Oembed specifications

    'user' => [
        'model' => 'App\User',
        'foreignKey' => null,
        'ownerKey' => null
    ],
    'broadcast' => [
        'enable' => false,
        'app_name' => 'your-app-name',
        'pusher' => [
            'app_id'        => '',
            'app_key'       => '',
            'app_secret'    => '',
            'options' => [
                 'cluster' => 'ap1',
                 'encrypted' => true
            ]
        ]
    ],
    'oembed' => [
        'enabled' => true,
        'url' => 'http://your.domain/api/oembed',
        'key' => 'yout-auth-api-key'
    ]

Testing

Talk is backwards compatible with php 5.5. Use docker to run unit tests.

docker-compose run php55 composer install
docker-compose run php55 phpunit
docker-compose run php56 composer install
docker-compose run php56 phpunit
docker-compose run php7 composer install
docker-compose run php7 phpunit
docker-compose run hhvm composer install
docker-compose run hhvm phpunit

Try Demo Project

Talk-Example

Special Thanks To

Shipu Ahamed

Thanks :)

Support for this project

Hey dude! Help me out for a couple of 🍻 !

Beerpay Beerpay

Comments
  • pusher error

    pusher error "Path not found"

    I get this error from this code:

    <script>
        var msgshow = function(data) {
            // write what you want with this data
    
            console.log(data);
        }
    </script>
    
    {!! talk_live(['user'=>["id"=>auth()->user()->id, 'callback'=>['msgshow']]]) !!}
    

    talk.php config

    'user' => [
            'model' => 'App\User',
        ],
        'broadcast' => [
            'enable' => true,
            'app_name' => env('APP_NAME', 'Punishment Leage'),
            'pusher' => [
                'app_key' => env('PUSHER_APP_KEY'),
                'app_secret' => env('PUSHER_APP_SECRET'),
                'app_id' => env('PUSHER_APP_ID'),
                'options' => [
                  'cluster' => env('PUSHER_APP_CLUSTER'),
                  'encrypted' => true
                ],
            ],
        ],
    
    

    env

    PUSHER_APP_ID=XXXXX
    PUSHER_APP_KEY=XXXXXXX
    PUSHER_APP_SECRET=XXXXXXXX
    PUSHER_APP_CLUSTER=us2
    

    I tested with Pushers script so I know the env information is correct.

    Solved 
    opened by packytagliaferro 12
  • Class talk does not exist!

    Class talk does not exist!

    Hi guys! After composer update I got this "Class talk does not exist" I am trying composer dump-autoload but it still not working(

    In app/Http/Kernel.php I have

    'talk' => \Nahid\Talk\Middleware\TalkMiddleware::class,

    In config/app.php in providers section

    Nahid\Talk\TalkServiceProvider::class,

    and in aliases array

    'Talk' => Nahid\Talk\Facades\Talk::class,

    What I did wrong? Any idea?

    Solved 
    opened by Nazar0102 9
  • where need to set global auth id ?

    where need to set global auth id ?

    i have set id like this in MessageController Talk::setAuthUserId(Auth::id()); but when i send message error user_one cant be null it mens auth ID not inserting so do i want replace anywhere else ?

    opened by hamelraj89 8
  • How to detect if new message has come?

    How to detect if new message has come?

    Hi. Good extension. But I have some problems. I need to show to users that somebody recently received new message in my application. How I can do that?

    opened by SerikK 7
  • Talk::getInbox();

    Talk::getInbox();

    I try to use this function, but it returns only conversations where I'm a sender. Is it right?

    To get all conversation ( where I'm is as sender and where I'm is a replyer) which function do I need to use?

    opened by SpikeLV 7
  • QueryException in Connection.php line 662:

    QueryException in Connection.php line 662:

    I am getting below error invoking getInbox() method in my Laravel application , Can you please suggest a fix .

    QueryException in Connection.php line 662: SQLSTATE[HY000]: General error: 2031 (SQL: SELECT user.id as receiver_id, user.name, msg.user_id as sender_id, conv.id as conv_id, msg.message, msg.created_at, msg.is_seen
    FROM users user, conversations conv, messages msg
    WHERE conv.id = msg.conversation_id
    AND (
    conv.user_one = :user
    OR conv.user_two = :user
    ) and (msg.created_at)
    in (
    SELECT max(msg.created_at) as created_at
    FROM conversations conv, messages msg
    WHERE CASE
    WHEN conv.user_one = :user
    THEN conv.user_two = user.id
    WHEN conv.user_two = :user
    THEN conv.user_one = user.id
    END
    AND conv.id = msg.conversation_id
    AND (
    conv.user_one = :user
    OR conv.user_two = :user
    )
    GROUP BY conv.id
    )
    ORDER BY msg.created_at DESC
    LIMIT :offset, :take)
    
    opened by rrajesh145 6
  • getMessagesByUserId , offset & $take not working

    getMessagesByUserId , offset & $take not working

    i'm using the test example and i try to edit

    i'v 122 message in the db $conversations = Talk::getMessagesByUserId($id); to $conversations = Talk::getMessagesByUserId($id,0,10);

    it return 122 every time

    i think the main problem is here $this->makeMessageCollection($conversations); >>> $collection->messages = $conversations->messages;

    this call the messages relation without any limit .

    Solved 
    opened by Coldzer0 5
  • Cant send a message

    Cant send a message

    I implemented your example sites and all works fine. I just simply cant send messages. Everytime i hit the "Send" button it gives back these 2 errors: Uncaught TypeError: Cannot read property 'trim' of undefined(…)render @ index.js:30addMessage @ dispatch @ jquery.js:4430r.handle @ jquery.js:4116

    POST http://localhost/ajax/message/send 500 (Internal Server Error)send @ jquery.js:8625ajax @ jquery.js:8161(anonymous function) @ talk.js:16dispatch @ jquery.js:4430r.handle @ jquery.js:4116 jquery.js:8625 XHR finished loading: POST "http://localhost/ajax/message/send".send @ jquery.js:8625ajax @ jquery.js:8161(anonymous function) @ talk.js:16dispatch @ jquery.js:4430r.handle @ jquery.js:4116

    invalid 
    opened by moritzwelsch 5
  • About Installation and Route List Error

    About Installation and Route List Error

    I have Installed your project to laravel 5.1 and 5.3. After Installation I got error which is provided below [Symfony\Component\Debug\Exception\FatalErrorException] Trait 'Illuminate\Foundation\Auth\Access\AuthorizesResources' not found Your package is not working yet.

    duplicate Solved 
    opened by tariqulislam 5
  • Got error when run php artisan route:list command

    Got error when run php artisan route:list command

    I got this error message when running php artisan route:list command:

    PHP Fatal error: Trait 'Illuminate\Foundation\Auth\Access\AuthorizesResources' not found in /home/fahri/Projects/thdc/project/vendor/nahid/talk/src/Example/TalkController.php on line 16

    Solved 
    opened by fahribaharudin 5
  • Add message embed capability

    Add message embed capability

    Added ability to convert URLs inside messages to embed objects. Messages like: "Watch this video https://www.youtube.com/watch?v=jNQXAC9IVRw" will be converted into youtube embed markup, where the message is rendered using:

    {{$message->toHtmlString()}}
    
    opened by cfpinto 3
  • Pusher Trigger Problem when i sent the message Broadcast->dispatch is not working

    Pusher Trigger Problem when i sent the message Broadcast->dispatch is not working

    Can please help what is the issue here? I config and setup done. but Broadcast->dispatch is not working

    [2022-03-24 07:33:05] local.ERROR: {"userId":3,"exception":"[object] (Pusher\ApiErrorException(code: 0): at C:\xampp\htdocs\fm\script\vendor\pusher\pusher-php-server\src\Pusher.php:533) [stacktrace] #0 C:\xampp\htdocs\fm\script\vendor
    ahid\talk\src\Live\Webcast.php(55): Pusher\Pusher->trigger(Array, 'talk-send-messa...', Array)

    https://github.com/nahid/talk-example/issues/20 C:\xampp\htdocs\fm\script\vendor ahid\talk\src\Live\Broadcast.php(85): Nahid\Talk\Live\Broadcast->dispatch(Object(Nahid\Talk\Live\Webcast)) https://github.com/nahid/talk-example/issues/21 C:\xampp\htdocs\fm\script\vendor ahid\talk\src\Talk.php(106): Nahid\Talk\Live\Broadcast->transmission(Object(Nahid\Talk\Messages\Message)) https://github.com/nahid/talk-example/issues/22 C:\xampp\htdocs\fm\script\vendor ahid\talk\src\Talk.php(262): Nahid\Talk\Talk->makeMessage(2, Object(Nahid\Talk\Messages\Message))

    opened by mobarokhossen 0
  • Talk is not working for live update of conversation

    Talk is not working for live update of conversation

    I have installed talk example, and added pusher keys.Even I have run the PHP artisan queue:listen and redis-cli monitor. I can see the data receiving in queue by monitoring Redis. Then what may be the issue on this. Can you please help any one did face the issue like this and fixed.

    opened by rvkvino 0
Releases(v2.4.0)
Owner
Nahid Bin Azhar
Code makes me happy than anything. So I contribute to open source and enjoy happiness.
Nahid Bin Azhar
Laravel Real-time chat app demo with React, Laravel Echo, Breeze, Socket.io, Redis, Inertia.js, TailwindCSS stack.

Laravel Real-time Chat App You can build yours from scratch with the following Medium article https://medium.com/@sinan.bekar/build-a-real-time-chat-a

Sinan Bekar 9 Oct 3, 2022
Laravel real-time CRUD using Google Firebase.

Laravel real-time CRUD using Google Firebase.

Fadi Mathlouthi 1 Oct 22, 2021
An online communication application that provides a real-time or live transmission of text messages from sender to receiver.

Realtime-chat-application An online communication application that provides a real-time or live transmission of text messages from sender to receiver.

isha 2 Aug 15, 2022
This repo is for the Laracon 2021 talk "Manage SEO with Laravel and Nova"

About Laravel Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experie

Kristin 7 Dec 9, 2022
My talk for Laravel PH.

Digging the gems: Discovering Laravel Built-in Classes and its use cases. Sharing my experiences when exploring the whole Illuminate Package. See my e

Rannie Ollit 3 Mar 21, 2022
Laravel Users | A Laravel Users CRUD Management Package

A Users Management Package that includes all necessary routes, views, models, and controllers for a user management dashboard and associated pages for managing Laravels built in user scaffolding. Built for Laravel 5.2, 5.3, 5.4, 5.5, 5.6, 5.7, 5.8, 6.0, 7.0 and 8.0.

Jeremy Kenedy 393 Nov 28, 2022
Laravel-FCM is an easy to use package working with both Laravel and Lumen for sending push notification with Firebase Cloud Messaging (FCM).

Laravel-FCM Introduction Laravel-FCM is an easy to use package working with both Laravel and Lumen for sending push notification with Firebase Cloud M

Rahul Thapa 2 Oct 16, 2022
Manage your staff from one place. Featuring Staff leave management πŸ–, payslips πŸ’΅ generation & emailing, messaging πŸ“¨and more πŸ› ! Built with ❀️ with Laravel

Staff Management System This little buddy can help you manage your staff database! Built with ?? with Laravel #FEATURES 1 Staff management/ database S

Ezekiel Oladejo 45 Jan 3, 2023
A Laravel chat package. You can use this package to create a chat/messaging Laravel application.

Chat Create a Chat application for your multiple Models Table of Contents Click to expand Introduction Installation Usage Adding the ability to partic

Tinashe Musonza 931 Dec 24, 2022
Simple user messaging package for Laravel

Laravel Messenger This package will allow you to add a full user messaging system into your Laravel application. Leave some feedback How are you using

Chris Gmyr 2.3k Dec 29, 2022
Shoutout messaging library for laravel

Laravel Shoutout Messaging Shoutout messaging library for Laravel Laravel PHP framework Shoutout Messaging Requirements PHP 5.6+ Laravel 5.5+ Installa

Dasun Dissanayake 12 Jul 17, 2022
Real world Conduit App based on Laravel Livewire stack

Laravel Livewire codebase containing real world examples (CRUD, auth, advanced patterns, etc) that adheres to the RealWorld spec and API. Demo Github

Ricardo Sawir 18 Nov 14, 2022
A simple Content Moderation System for Laravel 5.* that allows you to Approve or Reject resources like posts, comments, users, etc.

Laravel Moderation A simple Moderation System for Laravel 5.* that allows you to Approve or Reject resources like posts, comments, users, etc. Keep yo

Alex Kyriakidis 509 Dec 30, 2022
Framework - πŸ™ƒ Phony. Real-like Fake Data Generation Framework

?? Framework This repository contains the ?? Phony Framework. ?? Start generating fake data with ?? Phony Framework, visit the main Phony Repository.

Phonyland 5 Oct 31, 2022
Otpify is a Laravel package that provides a simple and elegant way to generate and validate one time passwords.

Laravel Otpify ?? Introduction Otpify is a Laravel package that provides a simple and elegant way to generate and validate one time passwords. Install

Prasanth Jayakumar 2 Sep 2, 2022
A package for Laravel One Time Password (OTP) generator and validation without Eloquent Model, since it done by Cache.

Laravel OTP Introduction A package for Laravel One Time Password (OTP) generator and validation without Eloquent Model, since it done by Cache. The ca

Lim Teck Wei 52 Sep 6, 2022
Laravel Seeable - Keep track of the date and time a user was last seen.

Laravel Seeable This package makes it easy to keep track of the date and time a user was last seen. Installation Install this package. composer requir

Zep Fietje 29 Dec 26, 2022
Get estimated read time of an article. Similar to medium.com's "x min read". Multilingual including right-to-left written languages. Supports JSON, Array and String output.

Read Time Calculates the read time of an article. Output string e.g: x min read or 5 minutes read. Features Multilingual translations support. Static

Waqar Ahmed 8 Dec 9, 2022
A simple Laravel package for generating download links with options such as expire time, IP restrictions, etc.

Generate download links in your Laravel applications This package allows you to generate download links for files. Once installed you can do stuff lik

Arman Ahmadi 12 Nov 24, 2022