LERN is a Laravel package that will record exceptions into a database and will notify you via Email, Pushover or Slack.

Related tags

Laravel lern
Overview

LERN (Laravel Exception Recorder and Notifier)

Latest Version Software License Build Status Scrutinizer Code Quality Code Coverage Total Downloads

LERN from your mistakes

LERN is a Laravel 5 package that will record exceptions into a database and will send you a notification.

Currently supported notification channels via Monolog

Version Compatibility

Laravel LERN
5.1.x 3.x
5.2.x 3.x
5.3.x 3.x
5.4.x 3.x
5.5.x 4.x
5.6.x 4.x
6.x 5.x and 6.x
7.x 6.x
8.x 6.x

Migrating from 3.x to 4.x

Make sure that the config file now includes the new lern.notify.class and lern.record.class settings. Check the config file to see how they are used.

Migrating from 2.x to 3.x

Version 3.x introduces the ability to collect more information from the error such as the user_id, url, method, and input data. In order to use 3.x you will need to copy over the new config file, the migration file and then migrate it.

# This will only copy over the migration file. For the config file you can either include the --force flag (Which will overwrite it) or copy it manually from github
php artisan vendor:publish --provider="Tylercd100\LERN\LERNServiceProvider"
php artisan migrate

Installation

Version 4.x uses Package Discovery. If you are using 3.x you will need to follow these instructions.

Install via composer - In the terminal:

composer require tylercd100/lern

Then you will need to run these commands in the terminal in order to copy the config and migration files

php artisan vendor:publish --provider="Tylercd100\LERN\LERNServiceProvider"

Before you run the migration you may want to take a look at config/lern.php and change the table property to a table name that you would like to use. After that run the migration

php artisan migrate

Usage

To use LERN modify the report method in the app/Exceptions/Handler.php file

make("lern")->handle($e); //Record and Notify the Exception /* OR... app()->make("lern")->record($e); //Record the Exception to the database app()->make("lern")->notify($e); //Notify the Exception */ } } return parent::report($e); }">
public function report(Throwable $e)
{
    if ($this->shouldReport($e)) {

    	//Check to see if LERN is installed otherwise you will not get an exception.
        if (app()->bound("lern")) {
            app()->make("lern")->handle($e); //Record and Notify the Exception

            /*
            OR...
            app()->make("lern")->record($e); //Record the Exception to the database
            app()->make("lern")->notify($e); //Notify the Exception
            */
        }
    }

    return parent::report($e);
}

Dont forget to add this to the top of the file

//If you updated your aliases array in "config/app.php"
use LERN;
use Throwable;
//or if you didnt...
use Tylercd100\LERN\Facades\LERN;
use Throwable;

Recording

You can call LERN::record($exception); to record an Exception to the database. To query any Exception that has been recorded you can use ExceptionModel which is an Eloquent Model

use Tylercd100\LERN\Models\ExceptionModel;
$mostRecentException = ExceptionModel::orderBy('created_at','DESC')->first();

To change what is recorded in to the database take a look at config/lern.php

'record'=>[
    /**
     * The Model to use
     */
    'model' => \Tylercd100\LERN\Models\ExceptionModel::class,

    /**
     * Database connection to use. Null is the default connection.
     */
    'connection'=>null,

    /**
     * Database table to use
     */
    'table'=>'vendor_tylercd100_lern_exceptions',

    /**
     * Information to store
     */
	'collect'=>[
	    'method'=>false, //When true it will collect GET, POST, DELETE, PUT, etc...
	    'data'=>false, //When true it will collect Input data
	    'status_code'=>true,
	    'user_id'=>false,
	    'url'=>false,
        'ip'=>false,
	],
],

Note: If you change lern.recorder.model then lern.recorder.table and lern.recorder.connection will be ignored unless you extend \Tylercd100\LERN\Models\ExceptionModel::class

Notifications

LERN uses the Monolog library to send notifications. If you need more than the supported notification channels, then you can add your own custom Monolog handlers. To start using any of the supported handlers just edit the provided config file config/lern.php.

Changing the log level programmatically

Some notification services support different log levels. If changing the config value lern.notify.log_level is not enough then try it this way:

// Change the log level.
// Default is: critical
// Options are: debug, info, notice, warning, error, critical, alert, emergency
LERN::setLogLevel("emergency");

Changing the subject line

Some notification services support a subject line, this is how you change it.

//Change the subject
LERN::setSubject("An Exception was thrown!");

Changing the body of the notification

LERN publishes a default blade template file that you can find at resources/views/exceptions/default.blade.php. The blade template file is compiled with these values: $exception $url $method $data $user. To specify a different blade template file, just edit the config file

'notify'=>[
    'view'=>'exceptions.default',
],
(deprecated) Using the LERN::setMessage() function

Make sure that you set the view config value to null or the LERN::setMessage() will not work

'notify'=>[
    'view'=>null,
],

Custom Monolog Handlers

To use a custom Monolog Handler call the pushHandler method

use Monolog\Handler\SlackHandler;
$handler = new SlackHandler($token, $channel);
LERN::pushHandler($handler);
LERN::notify($exception);

Further Reading and How-Tos

Roadmap

  • Support more Monolog Handlers
  • Exception report page or command to easily identify your application's issues.
Comments
  • mailing not working

    mailing not working

    I followed the instructions but i couldn't make it work. I set it this way:

    config/mail.php

        'driver' => 'log',
        'pretend' => true,
    
    

    I don't know how to troubleshoot this issue since I got no error. On the other hand, exceptions are being recorded successfully in the database.

    opened by leamasuero 18
  • email not working in prod although exception storing in db

    email not working in prod although exception storing in db

    Hi

    I configured everything fine and even the exceptions saves in "vendor_tylercd100_lern_exceptions" table. In local-host (xamp server) it simply sends emails without any problem, but not working in prod!

    opened by momame 13
  • Unable to install LERN 5.x package on Laravel 6.x

    Unable to install LERN 5.x package on Laravel 6.x

    I am trying to install this package on Laravel 6.8 but getting following composer errors, it seems like something wrong with dependency requirements

    Using version ^5.0 for tylercd100/lern ./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) Your requirements could not be resolved to an installable set of packages.

    Problem 1 - tylercd100/laravel-notify 3.0.0 requires tylercd100/monolog-mailgun ^2.0 -> satisfiable by tylercd100/monolog-mailgun[2.0.0]. - tylercd100/lern 5.0.0 requires tylercd100/laravel-notify ^3.0 -> satisfiable by tylercd100/laravel-notify[3.0.0]. - Installation request for tylercd100/lern ^5.0 -> satisfiable by tylercd100/lern[5.0.0]. - Conclusion: remove monolog/monolog 2.0.1 - Conclusion: don't install monolog/monolog 2.0.1 - tylercd100/monolog-mailgun 2.0.0 requires monolog/monolog ^1.11 -> satisfiable by monolog/monolog[1.11.0, 1.12.0, 1.13.0, 1.13.1, 1.14.0, 1.15.0, 1.16.0, 1.17.0, 1.17.1, 1.17.2, 1.18.0, 1.18.1, 1.18.2, 1.19.0, 1.20.0, 1.21.0, 1.22.0, 1.22.1, 1.23.0, 1.24.0, 1.25.0, 1.25.1, 1.25.2, 1.25.3, 1.x-dev]. - Can only install one of: monolog/monolog[1.12.0, 2.0.1]. - Can only install one of: monolog/monolog[1.13.0, 2.0.1]. - Can only install one of: monolog/monolog[1.13.1, 2.0.1]. - Can only install one of: monolog/monolog[1.14.0, 2.0.1]. - Can only install one of: monolog/monolog[1.15.0, 2.0.1]. - Can only install one of: monolog/monolog[1.16.0, 2.0.1]. - Can only install one of: monolog/monolog[1.17.0, 2.0.1]. - Can only install one of: monolog/monolog[1.17.1, 2.0.1]. - Can only install one of: monolog/monolog[1.17.2, 2.0.1]. - Can only install one of: monolog/monolog[1.18.0, 2.0.1]. - Can only install one of: monolog/monolog[1.18.1, 2.0.1]. - Can only install one of: monolog/monolog[1.18.2, 2.0.1]. - Can only install one of: monolog/monolog[1.19.0, 2.0.1]. - Can only install one of: monolog/monolog[1.20.0, 2.0.1]. - Can only install one of: monolog/monolog[1.21.0, 2.0.1]. - Can only install one of: monolog/monolog[1.22.0, 2.0.1]. - Can only install one of: monolog/monolog[1.22.1, 2.0.1]. - Can only install one of: monolog/monolog[1.23.0, 2.0.1]. - Can only install one of: monolog/monolog[1.24.0, 2.0.1]. - Can only install one of: monolog/monolog[1.25.0, 2.0.1]. - Can only install one of: monolog/monolog[1.25.1, 2.0.1]. - Can only install one of: monolog/monolog[1.25.2, 2.0.1]. - Can only install one of: monolog/monolog[1.25.3, 2.0.1]. - Can only install one of: monolog/monolog[1.x-dev, 2.0.1]. - Can only install one of: monolog/monolog[1.11.0, 2.0.1]. - Installation request for monolog/monolog (locked at 2.0.1) -> satisfiable by monolog/monolog[2.0.1].

    opened by nabeeljavaid 7
  • Does not support Laravel 5.1

    Does not support Laravel 5.1

    The last few releases require Illuminate/support 5.2 which implies Laravel >= 5.2. Was there a reason to require 5.2? Would you consider lowering the bar to 5.1? I have to keep using 5.1 LTS for a bit.

    Thanks. /S

    opened by sroutier 5
  • Additional fields?

    Additional fields?

    Hi, I would like to add some extra data when logging my exceptions. For example: client IP, user agent, etc. In my case, I would like to log this information in the db table and notify it via e-mail. What is the best way? Thank you.

    opened by eleftrik 5
  • Formatting message with release 4.x?

    Formatting message with release 4.x?

    Hello @tylercd100 ,

    With the previous version, I used to format the message using the LERN::setMessage() function. Is this still supported?

    Does not looks to be working for me at the moment.

    Cheers. /S

    opened by sroutier 3
  • LERN not auto-discovered in Laravel 5.5

    LERN not auto-discovered in Laravel 5.5

    Hello,

    Anybody else having trouble getting LERN to get auto-discovered?

    Here is the output of the require command from a fresh Laravel 5.5.19

    $ composer require tylercd100/lern
    Using version ^4.2 for tylercd100/lern
    ./composer.json has been updated
    Loading composer repositories with package information
    Updating dependencies (including require-dev)
    Package operations: 4 installs, 0 updates, 0 removals
      - Installing tylercd100/monolog-sms (1.3.0): Loading from cache
      - Installing tylercd100/monolog-mailgun (2.0.0): Loading from cache
      - Installing tylercd100/laravel-notify (2.1.0): Loading from cache
      - Installing tylercd100/lern (4.2.0): Loading from cache
    tylercd100/laravel-notify suggests installing sentry/sentry (Required to use the Raven driver for Sentry (~1.7).)
    Writing lock file
    Generating optimized autoload files
    > Illuminate\Foundation\ComposerScripts::postAutoloadDump
    > @php artisan package:discover
    Discovered Package: fideloper/proxy
    Discovered Package: laravel/tinker
    Package manifest generated successfully.
    $
    
    opened by sroutier 3
  • Exclude sensitive data

    Exclude sensitive data

    If I set data => true in config file, then all input will be posted when exception happen. But what if I want exclude some input data, e.g., password. Would you like to add this functionality?

    opened by uyab 3
  • Wrong params error

    Wrong params error

    Drivers:

    • Mail
    • Slack

    Error:

    Symfony\Component\Debug\Exception\FatalErrorException:/home/vagrant/Code/laravel/vendor/tylercd100/lern/src/Components/Recorder.php:59 Uncaught Error: Wrong parameters for Tylercd100\LERN\Exceptions\RecorderFailedException([string $message [, long $code [, Throwable $previous = NULL]]]) in /home/vagrant/Code/laravel/vendor/tylercd100/lern/src/Components/Recorder.php:59
    Stack trace:
    #0 /home/vagrant/Code/laravel/vendor/tylercd100/lern/src/Components/Recorder.php(59): Exception->__construct('SQLSTATE[HY000]...', 'HY000', Object(Illuminate\Database\QueryException))
    #1 /home/vagrant/Code/laravel/vendor/tylercd100/lern/src/LERN.php(67): Tylercd100\LERN\Components\Recorder->record(Object(Illuminate\Database\QueryException))
    #2 /home/vagrant/Code/laravel/vendor/tylercd100/lern/src/LERN.php(56): Tylercd100\LERN\LERN->record(Object(Symfony\Component\Debug\Exception\FatalThrowableError))
    #3 /home/vagrant/Code/laravel/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(218): Tylercd100\LERN\LERN->handle(Object(Symfony\Component\Debug\Exception\FatalThrowableError))
    #4 /home/vagrant/Code/laravel/app/Exceptions/Handler.php(75): Illum
    
    Trace: #0 {main}
    

    LERN Setup in Handler:

    if ($this->shouldReport($e)) {
                //Change the subject
                LERN::setSubject("An Exception was thrown!");
    
                //Change the message body
                LERN::setMessage(function($exception){
                    $msg = "";
    
                    //Get the route
                    $url = Request::url();
                    $method = Request::method();
                    if($url) {
                        $msg.="URL: {$method}@{$url}".PHP_EOL;
                    }
    
                    //Get the User
                    $user = Auth::user();
                    if($user) {
                        $msg.="User: #{$user->id} {$user->first_name} {$user->last_name}".PHP_EOL;
                    }
    
                    //Exception
                    $msg.=get_class($exception).":{$exception->getFile()}:{$exception->getLine()} {$exception->getMessage()}".PHP_EOL;
    
                    //Input
                    $input = Input::all();
                    if(!empty($input)){
                        $msg.="Data: ".json_encode($input).PHP_EOL;
                    }
    
                    //Trace
                    $msg.=PHP_EOL."Trace: {$exception->getTraceAsString()}";
                    return $msg;
                });
    
                LERN::handle($e);
    

    How to produce the error:

    • Miss spell the $this->middleware('aut'); in the controller __construct.

    Database pertaining to the error:

    • Mysql: success
    • sqlite: error
    opened by dragonfire1119 3
  • Running on a different DB connection

    Running on a different DB connection

    One of the systems I am working on, has multiple databases. I am having a problem when migrating data to a different database and an exception happens, as LERN tries to save the exception on current database. Is it possible to choose a database for LERN to use?

    opened by leocello 2
  • Migrating 3.x to 4.x

    Migrating 3.x to 4.x

    It's worth putting on the readme page that when upgrading from 3.x to 4.x to make sure that the config file now includes the new lern.notify.class and lern.record.class settings.

    Without these we were getting "Class name must be a valid object or a string" reported at line 158 in LERN.php. See line 156 and 175 of LERN.php for the actual location of the issue.

    opened by drjonnicholson 2
  • Recording User ID does not work with custom guards

    Recording User ID does not work with custom guards

    Tyler - this is a great service. Thanks for putting it together.

    One issue I had was recording an exception for a user with a custom guard. The value for user_id was null. A workaround I came up with is to edit the getUserId function within the Components/Recorder.php file:

    `protected function getUserId() {

    $user = Auth::user();
        if (!isset($user)) {
            $user = Auth::guard('manager')->user();
        } if (!isset($user)) {
            $user = Auth::guard('admin')->user();
        }
        if (is_object($user) && !empty($user->id)) {
            return $user->id;
        } else {
            return null;
        }
    

    }`

    Thought I would post for anyone who comes across this problem later on.

    Maybe a future release could include an array in the config/lern.php where the user could enter a list of guards to check for a logged in user?

    Thanks again

    opened by bobwurtz 0
  • Error on app()->make(record($exception)">

    Error on app()->make("lern")->record($exception)

    Hi, i'm using app()->make("lern")->record($exception); in [email protected] and getting error below many time ..

    Next Tylercd100\LERN\Exceptions\RecorderFailedException: SQLSTATE[HY000] [1045] Access denied for user 'forge'@'localhost' (using password: NO) (SQL: insert into exceptions_log (class, file, line, code, message, trace, status_code, method, data, url, updated_at, created_at) values (Illuminate\Database\QueryException, H:\xampp\htdocs\zapro\passoinstructor\vendor\laravel\framework\src\Illuminate\Database\Connection.php, 647, 1045, SQLSTATE[HY000] [1045] Access denied for user 'forge'@'localhost' (using password: NO) (SQL: select * from information_schema.tables where table_schema = forge and table_name = migrations), #0 H:\xampp\htdocs\zapro\passoinstructor\vendor\laravel\framework\src\Illuminate\Database\Connection.php(607): Illuminate\Database\Connection->runQueryCallback('select * from i...', Array, Object(Closure)) #1 H:\xampp\htdocs\zapro\passoinstructor\vendor\laravel\framework\src\Illuminate\Database\Connection.php(326): Illuminate\Database\Connection->run('select * from i...', Array, Object(Closure)) #2 H:\xampp\htdocs\zapro\passoinstructor\vendor\laravel\framework\src\Illuminate\Database\Schema\MySqlBuilder.php(18): Illuminate\Database\Connection->select('select * from i...', Array) #3 H:\xampp\htdocs\zapro\passoinstructor\vendor\laravel\framework\src\Illuminate\Support\Facades\Facade.php(221): Illuminate\Database\Schema\MySqlBuilder->hasTable('migrations') #4 H:\xampp\htdocs\zapro\passoinstructor\vendor\kordy\ticketit\src\TicketitServiceProvider.php(30): Illuminate\Support\Facades\Facade::__callStatic('hasTable', Array) #5 [internal function]: Kordy\Ticketit\TicketitServiceProvider->boot() #6 H:\xampp\htdocs\zapro\passoinstructor\vendor\laravel\framework\src\Illuminate\Container\BoundMethod.php(29): call_user_func_array(Array, Array) #7 H:\xampp\htdocs\zapro\passoinstructor\vendor\laravel\framework\src\Illuminate\Container\BoundMethod.php(87): Illuminate\Container\BoundMethod::Illuminate\Container{closure}() #8 H:\xampp\htdocs\zapro\passoinstructor\vendor\laravel\framework\src\Illuminate\Container\BoundMethod.php(31): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure)) #9 H:\xampp\htdocs\zapro\passoinstructor\vendor\laravel\framework\src\Illuminate\Container\Container.php(539): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL) #10 H:\xampp\htdocs\zapro\passoinstructor\vendor\laravel\framework\src\Illuminate\Foundation\Application.php(788): Illuminate\Container\Container->call(Array) #11 H:\xampp\htdocs\zapro\passoinstructor\vendor\laravel\framework\src\Illuminate\Foundation\Application.php(771): Illuminate\Foundation\Application->bootProvider(Object(Kordy\Ticketit\TicketitServiceProvider)) #12 [internal function]: Illuminate\Foundation\Application->Illuminate\Foundation{closure}(Object(Kordy\Ticketit\TicketitServiceProvider), 38) #13 H:\xampp\htdocs\zapro\passoinstructor\vendor\laravel\framework\src\Illuminate\Foundation\Application.php(772): array_walk(Array, Object(Closure)) #14 H:\xampp\htdocs\zapro\passoinstructor\vendor\laravel\framework\src\Illuminate\Foundation\Bootstrap\BootProviders.php(17): Illuminate\Foundation\Application->boot() #15 H:\xampp\htdocs\zapro\passoinstructor\vendor\laravel\framework\src\Illuminate\Foundation\Application.php(208): Illuminate\Foundation\Bootstrap\BootProviders->bootstrap(Object(Illuminate\Foundation\Application)) #16 H:\xampp\htdocs\zapro\passoinstructor\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(162): Illuminate\Foundation\Application->bootstrapWith(Array) #17 H:\xampp\htdocs\zapro\passoinstructor\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(146): Illuminate\Foundation\Http\Kernel->bootstrap() #18 H:\xampp\htdocs\zapro\passoinstructor\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(116): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request)) #19 H:\xampp\htdocs\zapro\passoinstructor\public\index.php(52): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request)) #20 {main}, 0, GET, {"page":"3","name":""}, http://passoinstructor.dev/instructor/learner/skills/4, 2018-02-01 10:24:26, 2018-02-01 10:24:26)) in H:\xampp\htdocs\zapro\passoinstructor\vendor\tylercd100\lern\src\Components\Recorder.php:63 Stack trace: #0 H:\xampp\htdocs\zapro\passoinstructor\vendor\tylercd100\lern\src\LERN.php(67): Tylercd100\LERN\Components\Recorder->record(Object(Illuminate\Database\QueryException)) #1 H:\xampp\htdocs\zapro\passoinstructor\app\Exceptions\Handler.php(68): Tylercd100\LERN\LERN->record(Object(Illuminate\Database\QueryException)) #2 H:\xampp\htdocs\zapro\passoinstructor\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(326): App\Exceptions\Handler->render(Object(Illuminate\Http\Request), Object(Illuminate\Database\QueryException)) #3 H:\xampp\htdocs\zapro\passoinstructor\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(120): Illuminate\Foundation\Http\Kernel->renderException(Object(Illuminate\Http\Request), Object(Illuminate\Database\QueryException)) #4 H:\xampp\htdocs\zapro\passoinstructor\public\index.php(52): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request)) #5 {main}

    opened by muzafarali 15
  • Configure Slack to Work

    Configure Slack to Work

    Anyone who has gotten to configure Slack to work? I get to make Slack notifications work I need to add it to the list of drivers in the config file, then under the slack key under notify key, I specify the special values for Slack env. I have defined these in .env.

    To get a Slack App Token, I need to create a new app on Slack? I have created one afterwhich I got a client ID, a secret and a verification token. This verification token is what I should use with in the SLACK_APP_TOKEN .env value or? And for the channel option, can I use a private channel?

    Help me, because I have done all these well but no notifications going to Slack. Is there some configuration I am missing or I am doing wrong?

    opened by gthuo 2
Releases(6.0.0)
Owner
Tyler Arbon
Twitter @TylerArbon
Tyler Arbon
This package adds support for verifying new email addresses: when a user updates its email address, it won't replace the old one until the new one is verified.

Laravel Verify New Email Laravel supports verifying email addresses out of the box. This package adds support for verifying new email addresses. When

Protone Media 300 Dec 30, 2022
Laravel Jsonable - Well-Formated Responses & Exceptions.

Laravel Jsonable Well-Formated Responses & Exceptions. Documentation You can find the detailed documentation here in Laravel Jsonable Documentation. C

Pharaonic 1 Aug 7, 2022
Allow your model to record the creation, update and deletion of user fingerprints in laravel packages

This laravel package will allow your models to record the the created, updated and deleted by User FingerPrints

Managemize 4 Mar 11, 2022
Trigger email failures to assert what happens on your Laravel Application when an email fails to send

Laravel Email Failer composer require --dev rogervila/laravel-email-failer About Trigger email failures to assert what happens on your Laravel Applica

Roger Vilà 30 Jul 17, 2022
Record created by, updated by and deleted by on Eloquent models automatically.

quarks/laravel-auditors Record created by, updated by and deleted by (if SoftDeletes added) on Eloquent models automatically. Installation composer re

Quarks 3 Jun 13, 2022
Record the change log from models in Laravel

This package will help you understand changes in your Eloquent models, by providing information about possible discrepancies and anomalies that could

Owen IT Services 2.5k Dec 30, 2022
The Laravel Boilerplate Project - https://laravel-boilerplate.com - For Slack access, visit:

Laravel Boilerplate (Current: Laravel 8.*) (Demo) Demo Credentials Admin: [email protected] Password: secret User: [email protected] Password: secret Offici

Anthony Rappa 5.4k Jan 7, 2023
A dynamic table component for Laravel Livewire - For Slack access, visit:

A dynamic Laravel Livewire component for data tables. Bootstrap 4 Demo | Bootstrap 5 Demo | Tailwind Demo | Demo Repository Installation You can insta

Anthony Rappa 1.3k Jan 1, 2023
A Slack Invitator made with Lumen Framework.

Lumen - Slackin A Slack Invitator made with Lumen Framework and inspired by rauchg/slackin. That application uses some of my awesome packages: Badge P

Vagner Luz do Carmo 56 May 3, 2020
Laravel package to normalize your data before saving into the database.

This package helps you normalize your data in order to save them into the database. The Goal is to having separate classes that handle the data normalization, and thus can be tested independently.

Nicolas Widart 11 Apr 21, 2021
🥳🔐 This package is a Laravel package that checks if an email address is a spammer

This package is a Laravel package that checks if an email address is a spammer. It verifies your signups and form submissions to confirm that they are legitimate.

Endurance, the Martian 15 Dec 19, 2022
Smeify is a Stable Automated Solution for Airtime and Data businesses in Nigeria, this package helps you integrate smeify easily into your laravel application.

Smeify is a Stable Automated Solution for Airtime and Data businesses in Nigeria, this package helps you integrate smeify easily into your laravel application.

Ogundiran Adewale Charles 2 Jul 27, 2022
Easily integrate single-database multi tenant features into your Laravel application

Laravel Tenant Aware Easily integrate single-database multi tenant features into your Laravel application. Installation You can install the package vi

H-FARM Innovation 9 Dec 21, 2022
🐍 Web application made in PHP with Laravel where you can interact via API with my Snake game which is made in Python

Snake web application Project of the web application where you can interact via API with Snake game which is available to download on it. Application

Maciek Iwaniuk 1 Nov 26, 2022
Laravel SEO - This is a simple and extensible package for improving SEO via meta tags, such as OpenGraph tags.

This is a simple and extensible package for improving SEO via meta tags, such as OpenGraph tags.

ARCHTECH 191 Dec 30, 2022
Save Model is a Laravel package that allows you to save data in the database in a new way.

Save Model is a Laravel package that allows you to save data in the database in a new way. No need to worry about $guarded and $fillable properties in the model anymore. Just relax an use Save Model package.

Laratips 27 Mar 2, 2022
An easy way to get vendor and package data from Packagist via API calls

Laravel Packagist Laravel Packagist (LaravelPackagist) is a package for Laravel 5 to interact with the packagist api quickly and easily. Table of cont

Jeremy Kenedy 5 Jul 18, 2022
A package to validate email domains in a user registration form

This package allows to define a subset of allowed email domains and validate any user registration form with a custom rule.

H-FARM 56 Jul 19, 2022
A package to validate email domains in a user registration form

Laravel Email Domain Rule This package allows to define a subset of allowed email domains and validate any user registration form with a custom rule.

H-FARM Innovation 56 Jul 19, 2022