Tools for creating Laravel packages

Overview

Tools for creating Laravel packages

Latest Version on Packagist Tests Total Downloads

This package contains a PackageServiceProvider that you can use in your packages to easily register config files, migrations, and more.

Here's an example of how it can be used.

use Spatie\LaravelPackageTools\PackageServiceProvider;
use Spatie\LaravelPackageTools\Package;
use MyPackage\ViewComponents\Alert;

class YourPackageServiceProvider extends PackageServiceProvider
{
    public function configurePackage(Package $package): void
    {
        $package
            ->name('your-package-name')
            ->hasConfigFile()
            ->hasViews()
            ->hasViewComponent('spatie', Alert::class)
            ->hasViewComposer('*', MyViewComposer::class)
            ->sharesDataWithAllViews('downloads', 3)
            ->hasTranslations()
            ->hasAssets()
            ->hasRoute('web')
            ->hasMigration('create_package_tables')
            ->hasCommand(YourCoolPackageCommand::class);
    }
}

Under the hood it will do the necessary work to register the necessary things and make all sorts of files publishable.

Support us

We invest a lot of resources into creating best in class open source packages. You can support us by buying one of our paid products.

We highly appreciate you sending us a postcard from your hometown, mentioning which of our package(s) you are using. You'll find our address on our contact page. We publish all received postcards on our virtual postcard wall.

Getting started

This package is opinionated on how you should structure your package. To get started easily, consider using our package-skeleton repo to start your package. The skeleton is structured perfectly to work perfectly with the PackageServiceProvider in this package.

Usage

In your package you should let your service provider extend Spatie\LaravelPackageTools\PackageServiceProvider.

use Spatie\LaravelPackageTools\PackageServiceProvider;
use Spatie\LaravelPackageTools\Package;

class YourPackageServiceProvider extends PackageServiceProvider
{
    public function configurePackage(Package $package) : void
    {
        $package->name('your-package-name');
    }
}

Passing the package name to name is mandatory.

Working with a config file

To register a config file, you should create a php file with your package name in the config directory of your package. In this example it should be at <package root>/config/your-package-name.php.

If your package name starts with laravel-, we expect that your config file does not contain that prefix. So if your package name is laravel-cool-package, the config file should be named cool-package.php.

To register that config file, call hasConfigFile() on $package in the configurePackage method.

$package
    ->name('your-package-name')
    ->hasConfigFile();

The hasConfigFile method will also make the config file publishable. Users of your package will be able to publish the config file with this command.

php artisan vendor:publish --tag=your-package-name-config

Should your package have multiple config files, you can pass their names as an array to hasConfigFile

$package
    ->name('your-package-name')
    ->hasConfigFile(['my-config-file', 'another-config-file']);

Working with views

Any views your package provides, should be placed in the <package root>/resources/views directory.

You can register these views with the hasViews command.

$package
    ->name('your-package-name')
    ->hasViews();

This will register your views with Laravel.

If you have a view <package root>/resources/views/myView.blade.php, you can use it like this: view('your-package-name::myView'). Of course, you can also use subdirectories to organise your views. A view located at <package root>/resources/views/subdirectory/myOtherView.blade.php can be used with view('your-package-name::subdirectory.myOtherView').

Using a custom view namespace

You can pass a custom view namespace to the hasViews method.

$package
    ->name('your-package-name')
    ->hasViews('custom-view-namespace');

You can now use the views of the package like this:

view('custom-view-namespace::myView');

Publishing the views

Calling hasViews will also make views publishable. Users of your package will be able to publish the views with this command:

php artisan vendor:publish --tag=your-package-name-views

Sharing global data with views

You can share data with all views using the sharesDataWithAllViews method. This will make the shared variable available to all views.

$package
    ->name('your-package-name')
    ->sharesDataWithAllViews('companyName', 'Spatie');

Working with Blade view components

Any Blade view components that your package provides should be placed in the <package root>/Components directory.

You can register these views with the hasViewComponents command.

$package
    ->name('your-package-name')
    ->hasViewComponents('spatie', Alert::class);

This will register your view components with Laravel. In the case of Alert::class, it can be referenced in views as <x-spatie-alert />, where spatie is the prefix you provided during registration.

Calling hasViewComponents will also make view components publishable, and will be published to app/Views/Components/vendor/<package name>.

Users of your package will be able to publish the view components with this command:

php artisan vendor:publish --tag=your-package-name-components

Working with view composers

You can register any view composers that your project uses with the hasViewComposers method. You may also register a callback that receives a $view argument instead of a classname.

To register a view composer with all views, use an asterisk as the view name '*'.

$package
    ->name('your-package-name')
    ->hasViewComposer('viewName', MyViewComposer::class)
    ->hasViewComposer('*', function($view) { 
        $view->with('sharedVariable', 123); 
    });

Working with translations

Any translations your package provides, should be placed in the <package root>/resources/lang/<language-code> directory.

You can register these translations with the hasTranslations command.

$package
    ->name('your-package-name')
    ->hasTranslations();

This will register the translations with Laravel.

Assuming you save this translation file at <package root>/resources/lang/en/translations.php...

<?php

return [
    'translatable' => 'translation',
];

... your package and users will be able to retrieve the translation with:

trans('your-package-name::translations.translatable'); // returns 'translation'

If your package name starts with laravel- then you should leave that off in the example above.

Coding with translation strings as keys, you should create JSON files in <package root>/resources/lang/<language-code>.json.

For example, creating <package root>/resources/lang/it.json file like so:

{
    "Hello!": "Ciao!"
}

...the output of...

trans('Hello!');

...will be Ciao! if the application uses the Italian language.

Calling hasTranslations will also make translations publishable. Users of your package will be able to publish the translations with this command:

php artisan vendor:publish --tag=your-package-name-translations

Working with assets

Any assets your package provides, should be placed in the <package root>/resources/dist/ directory.

You can make these assets publishable the hasAssets method.

$package
    ->name('your-package-name')
    ->hasAssets();

Users of your package will be able to publish the assets with this command:

php artisan vendor:publish --tag=your-package-name-assets

This will copy over the assets to the public/vendor/<your-package-name> directory in the app where your package is installed in.

Working with migrations

The PackageServiceProvider assumes that any migrations are placed in this directory: <package root>/database/migrations. Inside that directory you can put any migrations. Make sure they all have a php.stub extension. Using that extension will make sure that static analysers won't get confused with classes existing in multiple places when your migration gets published.

To register your migration, you should pass its name without the extension to the hasMigration table.

If your migration file is called create_my_package_tables.php.stub you can register them like this:

$package
    ->name('your-package-name')
    ->hasMigration('create_my_package_tables');

Should your package contain multiple migration files, you can just call hasMigration multiple times or use hasMigrations.

$package
    ->name('your-package-name')
    ->hasMigrations(['my_package_tables', 'some_other_migration']);

Calling hasMigration will also make migrations publishable. Users of your package will be able to publish the migrations with this command:

php artisan vendor:publish --tag=your-package-name-migrations

Like you might expect, published migration files will be prefixed with the current datetime.

Registering commands

You can register any command you package provides with the hasCommand function.

$package
    ->name('your-package-name')
    ->hasCommand(YourCoolPackageCommand::class);

If your package provides multiple commands, you can either use hasCommand multiple times, or pass an array to hasCommands

$package
    ->name('your-package-name')
    ->hasCommands([
        YourCoolPackageCommand::class,
        YourOtherCoolPackageCommand::class,
    ]);

Working with routes

The PackageServiceProvider assumes that any route files are placed in this directory: <package root>/routes. Inside that directory you can put any route files.

To register your route, you should pass its name without the extension to the hasRoute method.

If your route file is called web.php you can register them like this:

$package
    ->name('your-package-name')
    ->hasRoute('web');

Should your package contain multiple route files, you can just call hasRoute multiple times or use hasRoutes.

$package
    ->name('your-package-name')
    ->hasRoutes(['web', 'admin']);

Using lifecycle hooks

You can put any custom logic your package needs while starting up in one of these methods:

  • registeringPackage: will be called at the start of the register method of PackageServiceProvider
  • packageRegistered: will be called at the end of the register method of PackageServiceProvider
  • bootingPackage: will be called at the start of the boot method of PackageServiceProvider
  • packageBooted: will be called at the end of the boot method of PackageServiceProvider

Testing

composer test

Changelog

Please see CHANGELOG for more information on what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security Vulnerabilities

Please review our security policy on how to report security vulnerabilities.

Credits

License

The MIT License (MIT). Please see License File for more information.

Comments
  • hasMiddleware() feature added + tests

    hasMiddleware() feature added + tests

    This PR adds the feature hasMiddleware to the laravel-package-tools. If added, the middleware automatically runs on each request. This feature allows to apply a middleware globally or only assign it to a specific middleware group.

    Features

    • Allows to add a global middleware: ->hasMiddleware(MyMiddleware::class)
    • Allows to add a middleware to a middleware group: ->hasMiddleware(MyMiddleware::class, 'api')
    • Allows to add many middlewares at once: ->hasMiddlewares([MyMiddleware::class], 'web')

    Info

    • Tests for both global middleware and middleware groups are added.
    • Documentation has been added.

    Companion PR in package-skeleton-laravel

    Please also see the companion PR in the spatie/package-skeleton-laravel package which adds the middleware feature to the configure.php script.

    Excerpt of the documentation.

    Registering middlewares

    You can register any middleware your package provides with the hasMiddleware function.

    Add your middleware globally or only to a specific middleware group by adding the group parameter. (e.g. 'web', 'api')

    // Adds a global middleware.
    $package
        ->name('your-package-name')
        ->hasMiddleware(MyMiddleware::class)
    
    // Adds a middleware to the middleware group 'api' only.
    $package
        ->name('your-package-name')
        ->hasMiddleware(MyMiddleware::class, 'api')
    

    If your package provides multiple middlewares, you can either use hasMiddleware multiple times, or pass an array to hasMiddlewares. You can apply a specific middleware group to both methods.

    $package
        ->name('your-package-name')
        ->hasMiddlewares([
            MyMiddleware::class,
            AnotherMiddleware::class,
        ], 'web');
    
    opened by camya 4
  • Add json translations support

    Add json translations support

    I have verified currently the package doesn't allow to works with JSON translations.

    The PR enables the support to JSON translation files, loading files from the package directory itself or, when available, from the resource/vendor/package-name/ directory (needed if a customer likes to override the translations).

    opened by masterix21 4
  • View Components publish has a bug

    View Components publish has a bug

    1. Created Alert.php in packagename/src/Components directory.
    2. Run vendor publish from project
    3. Receive following error
     ERROR  Can't locate path: </mnt/Work/www/packages/packagename/src/../Components>.  
    

    Current workaround is to move the Components directory out of src. packagename/Components this work.

    Checked the source and notice the following

            if (count($this->package->viewComponents)) {
                $this->publishes([
                    $this->package->basePath('/../Components') => base_path("app/View/Components/vendor/{$this->package->shortName()}"),
                ], "{$this->package->name}-components");
            }
    

    Updating the Components path in above by removing ../ should fix this issue.

    opened by mrlinnth 3
  • Laravel 8 Support Dropped

    Laravel 8 Support Dropped

    Hey there 👋

    I noticed that in tag v1.13, Laravel 8 support was dropped, but this doesn't follow semantic versioning, was this intentional or should there be a tag for v2.0 for Laravel 9 and v1.13 for Laravel 8?

    Many thanks!

    opened by Sammyjo20 3
  • feat: custom view component path

    feat: custom view component path

    Fixed 'Can't locate path' error while publish view components. Default path changed to package/src/Components/. Added setViewComponentPath method. Added test for custom component path. So for setViewComponentPath method.

    opened by FurkanGM 3
  • Call to undefined method Spatie\LaravelPackageTools\Package::hasRoutes()

    Call to undefined method Spatie\LaravelPackageTools\Package::hasRoutes()

    Hello,

    I'm having some issues with my tests that are passing just in P8 - L8.* - prefer-stable - ubuntu-latest but failing in my other combinations.[P8 - L7.* - prefer-lowest - ubuntu-latest, P8 - L7.* - prefer-stable - ubuntu-latest, P8 - L8.* - prefer-stable - ubuntu-latest].

    All my test are failing with the message: Call to undefined method Spatie\LaravelPackageTools\Package::hasRoutes().

    Do you have any Idea why?

    Current setup: (Locally test are green)

    Mac -> Catalina php 7.4 composer 1

    opened by narcisonunez 3
  • Corrected error in hasViewComponents() docs...

    Corrected error in hasViewComponents() docs...

    The docs state that one should pass an array of view component classes to hasViewComponents() when, in fact, it simply requires a list of one or more view component class arguments...after the prefix, of course.

    I noticed this when passing an array, per the docs, and the package would attempt to iterate over the ...$viewComponentNames arguments, but there was only one, which was an array, which then caused an exception when trying to use it as an array index.

    So...easy-peasy change....unless I've missed something. 🤓

    opened by telkins 2
  • Update Dependabot Automation

    Update Dependabot Automation

    Overview

    This PR adds dependabot automation for this repository.

    Description

    This PR updates the workflow that automatically merges dependabot PRs.

    When performing auto-merging of PRs, Github Actions that have a major version update AND a compatibility score of >=90% are automatically merged as way to reduce the manual work of merging PRs that are of no risk of breaking changes. ONLY Github Actions that have a major version update are considered for automatic merging. Other dependencies are excluded.

    id:dependabot-automation/v2

    opened by patinthehat 1
  • Add Dependabot Automation

    Add Dependabot Automation

    This PR adds a dependabot configuration file that enables weekly update checks for all github actions used within workflows in the project. Additionally, it includes a workflow that automatically merges dependabot PRs for minor and patch version updates (major version bumps must be manually merged to avoid breaking changes).

    Using these features will help keep all workflows up to date with a minimal amount of manual intervention necessary.

    Note: this functionality has already been added to the Spatie laravel package skeleton repository.

    opened by patinthehat 1
  • Fix for publishing view files that has its custom namespace

    Fix for publishing view files that has its custom namespace

    When your package view uses custom namespace, published view ignores the namespace and keeps using its package name for vendor-view's directory name.

    For example, imagine you create a package that has some sort of image gallery. And you choose 'laravel-images' for your package view's namespace.

    Now someone downloaded your package then decided to customize the views. So the person ran php artisan vendor:publish command to publish the views from this package.

    But according to this sources laravel-package-tools uses package name for its base_path and namespace and ignoring actual view namespace which the package creator specified.

    So no matter how the user modifies the published views, Laravel couldn't find the published view files.

    This PR provides a fix for this problem.

    opened by askdkc 1
  • Make possible for developers to use their Package extension

    Make possible for developers to use their Package extension

    As I got in the need of extending the given Package class, adding some extra properties or sanitize given name, I decided to add this PR. Hope you find this add-on useful

    opened by GeoSot 1
  • Bump actions/checkout from 2 to 3

    Bump actions/checkout from 2 to 3

    Bumps actions/checkout from 2 to 3.

    Release notes

    Sourced from actions/checkout's releases.

    v3.0.0

    • Updated to the node16 runtime by default
      • This requires a minimum Actions Runner version of v2.285.0 to run, which is by default available in GHES 3.4 or later.

    v2.5.0

    What's Changed

    Full Changelog: https://github.com/actions/checkout/compare/v2...v2.5.0

    v2.4.2

    What's Changed

    Full Changelog: https://github.com/actions/checkout/compare/v2...v2.4.2

    v2.4.1

    • Fixed an issue where checkout failed to run in container jobs due to the new git setting safe.directory

    v2.4.0

    • Convert SSH URLs like org-<ORG_ID>@github.com: to https://github.com/ - pr

    v2.3.5

    Update dependencies

    v2.3.4

    v2.3.3

    v2.3.2

    Add Third Party License Information to Dist Files

    v2.3.1

    Fix default branch resolution for .wiki and when using SSH

    v2.3.0

    Fallback to the default branch

    v2.2.0

    Fetch all history for all tags and branches when fetch-depth=0

    v2.1.1

    Changes to support GHES (here and here)

    ... (truncated)

    Changelog

    Sourced from actions/checkout's changelog.

    Changelog

    v3.1.0

    v3.0.2

    v3.0.1

    v3.0.0

    v2.3.1

    v2.3.0

    v2.2.0

    v2.1.1

    • Changes to support GHES (here and here)

    v2.1.0

    v2.0.0

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
Releases(1.13.8)
  • 1.13.8(Dec 20, 2022)

    What's Changed

    • Fix for publishing view files that has its custom namespace by @askdkc in https://github.com/spatie/laravel-package-tools/pull/69
    • PHP 8.2 Build by @erikn69 in https://github.com/spatie/laravel-package-tools/pull/70
    • Fix missing semicolon in readme by @howdu in https://github.com/spatie/laravel-package-tools/pull/71
    • Refactor tests to pest by @AyoobMH in https://github.com/spatie/laravel-package-tools/pull/73
    • View Components publish has a bug by @mrlinnth in https://github.com/spatie/laravel-package-tools/pull/72
    • Add Dependabot Automation by @patinthehat in https://github.com/spatie/laravel-package-tools/pull/75
    • Add PHP 8.2 Support by @patinthehat in https://github.com/spatie/laravel-package-tools/pull/77
    • Update Dependabot Automation by @patinthehat in https://github.com/spatie/laravel-package-tools/pull/78

    New Contributors

    • @askdkc made their first contribution in https://github.com/spatie/laravel-package-tools/pull/69
    • @howdu made their first contribution in https://github.com/spatie/laravel-package-tools/pull/71
    • @AyoobMH made their first contribution in https://github.com/spatie/laravel-package-tools/pull/73
    • @mrlinnth made their first contribution in https://github.com/spatie/laravel-package-tools/pull/72

    Full Changelog: https://github.com/spatie/laravel-package-tools/compare/1.13.5...1.13.8

    Source code(tar.gz)
    Source code(zip)
  • 1.13.7(Nov 15, 2022)

    What's Changed

    • PHP 8.2 Build by @erikn69 in https://github.com/spatie/laravel-package-tools/pull/70
    • Fix missing semicolon in readme by @howdu in https://github.com/spatie/laravel-package-tools/pull/71
    • Refactor tests to pest by @AyoobMH in https://github.com/spatie/laravel-package-tools/pull/73
    • View Components publish has a bug by @mrlinnth in https://github.com/spatie/laravel-package-tools/pull/72

    New Contributors

    • @howdu made their first contribution in https://github.com/spatie/laravel-package-tools/pull/71
    • @AyoobMH made their first contribution in https://github.com/spatie/laravel-package-tools/pull/73
    • @mrlinnth made their first contribution in https://github.com/spatie/laravel-package-tools/pull/72

    Full Changelog: https://github.com/spatie/laravel-package-tools/compare/1.13.6...1.13.7

    Source code(tar.gz)
    Source code(zip)
  • 1.13.6(Oct 11, 2022)

    What's Changed

    • Fix for publishing view files that has its custom namespace by @askdkc in https://github.com/spatie/laravel-package-tools/pull/69

    New Contributors

    • @askdkc made their first contribution in https://github.com/spatie/laravel-package-tools/pull/69

    Full Changelog: https://github.com/spatie/laravel-package-tools/compare/1.13.5...1.13.6

    Source code(tar.gz)
    Source code(zip)
  • 1.13.5(Sep 7, 2022)

  • 1.13.4(Sep 7, 2022)

  • 1.13.3(Sep 7, 2022)

  • 1.13.2(Sep 7, 2022)

  • 1.13.1(Sep 7, 2022)

  • 1.13.0(Sep 7, 2022)

    What's Changed

    • Add install command by @freekmurze in https://github.com/spatie/laravel-package-tools/pull/64
    • Drop support for PHP 7, anything below Laravel 8

    Full Changelog: https://github.com/spatie/laravel-package-tools/compare/1.12.1...1.13.0

    Source code(tar.gz)
    Source code(zip)
  • 1.12.1(Jun 28, 2022)

  • 1.12.0(Jun 19, 2022)

    What's Changed

    • Update .gitattributes by @angeljqv in https://github.com/spatie/laravel-package-tools/pull/53
    • [PHP 8.2] Fix ${var} string interpolation deprecation by @Ayesh in https://github.com/spatie/laravel-package-tools/pull/57
    • Allow running of migrations by @riasvdv in https://github.com/spatie/laravel-package-tools/pull/56

    New Contributors

    • @angeljqv made their first contribution in https://github.com/spatie/laravel-package-tools/pull/53
    • @Ayesh made their first contribution in https://github.com/spatie/laravel-package-tools/pull/57
    • @riasvdv made their first contribution in https://github.com/spatie/laravel-package-tools/pull/56

    Full Changelog: https://github.com/spatie/laravel-package-tools/compare/1.11.3...1.12.0

    Source code(tar.gz)
    Source code(zip)
  • 1.11.3(Mar 15, 2022)

    What's Changed

    • Use lang_path() when available by @zupolgec in https://github.com/spatie/laravel-package-tools/pull/52

    New Contributors

    • @zupolgec made their first contribution in https://github.com/spatie/laravel-package-tools/pull/52

    Full Changelog: https://github.com/spatie/laravel-package-tools/compare/1.11.2...1.11.3

    Source code(tar.gz)
    Source code(zip)
  • 1.11.2(Feb 22, 2022)

    What's Changed

    • Laravel 9 lang folder location by @voicecode-bv in https://github.com/spatie/laravel-package-tools/pull/48

    New Contributors

    • @voicecode-bv made their first contribution in https://github.com/spatie/laravel-package-tools/pull/48

    Full Changelog: https://github.com/spatie/laravel-package-tools/compare/1.11.1...1.11.2

    Source code(tar.gz)
    Source code(zip)
  • 1.11.1(Feb 16, 2022)

    What's Changed

    • Support for non-stubbed migrations by @chillbram in https://github.com/spatie/laravel-package-tools/pull/50

    Full Changelog: https://github.com/spatie/laravel-package-tools/compare/1.11.0...1.11.1

    Source code(tar.gz)
    Source code(zip)
  • 1.11.0(Jan 11, 2022)

    What's Changed

    • Correct Blade view components folder in documentation by @chillbram in https://github.com/spatie/laravel-package-tools/pull/47
    • Remove Database\Factories from psr-4 by @bastien-phi in https://github.com/spatie/laravel-package-tools/pull/43
    • Allow Laravel 9

    New Contributors

    • @chillbram made their first contribution in https://github.com/spatie/laravel-package-tools/pull/47
    • @bastien-phi made their first contribution in https://github.com/spatie/laravel-package-tools/pull/43

    Full Changelog: https://github.com/spatie/laravel-package-tools/compare/1.10.0...1.11.0

    Source code(tar.gz)
    Source code(zip)
  • 1.10.0(Dec 18, 2021)

    What's Changed

    • Corrected error in hasViewComponents() docs... by @telkins in https://github.com/spatie/laravel-package-tools/pull/40
    • Update .gitattributes by @erikn69 in https://github.com/spatie/laravel-package-tools/pull/44
    • Add ability to customise view namespace by @freekmurze in https://github.com/spatie/laravel-package-tools/pull/45

    New Contributors

    • @telkins made their first contribution in https://github.com/spatie/laravel-package-tools/pull/40
    • @erikn69 made their first contribution in https://github.com/spatie/laravel-package-tools/pull/44
    • @freekmurze made their first contribution in https://github.com/spatie/laravel-package-tools/pull/45

    Full Changelog: https://github.com/spatie/laravel-package-tools/compare/1.9.2...1.10.0

    Source code(tar.gz)
    Source code(zip)
  • 1.9.2(Sep 21, 2021)

  • 1.9.1(Sep 20, 2021)

  • 1.9.0(May 23, 2021)

  • 1.8.0(May 22, 2021)

  • 1.7.0(May 6, 2021)

  • 1.6.3(Apr 27, 2021)

  • 1.6.2(Mar 25, 2021)

  • 1.6.1(Mar 16, 2021)

  • 1.6.0(Mar 12, 2021)

  • 1.5.0(Mar 10, 2021)

  • 1.4.3(Mar 10, 2021)

  • 1.4.2(Mar 5, 2021)

  • 1.4.1(Mar 4, 2021)

  • 1.4.0(Feb 15, 2021)

Owner
Spatie
We create open source, digital products and courses for the developer community
Spatie
A package for Laravel to perform basic git commands on locally integrated packages.

A package for Laravel to perform basic git commands on locally integrated development packages. If working within multiple local development packages or repositories at once this package is meant to ease the burden of navigating to each individual repository to perform basic git commands.

null 3 Jul 26, 2022
Watch your Laravel app for unwanted changes when working with third-party packages.

Project Secure This package installs a Composer plugin that reports unwanted changes to your Laravel project code after installing or updating a third

The Laravel Hacker 3 Nov 3, 2021
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
Service manager for Slim compatible with Laravel packages

SlimServices SlimServices is a service manager for the Slim PHP microframework based on Laravel 4 service providers and DI container, allowing you to

its 76 Jul 23, 2022
Collection of agnostic PHP Functions and helpers with zero dependencies to use as foundation in packages and other project

Collection of agnostic PHP Functions and helpers This package provides a lot of very usefull agnostic helpers to use as foundation in packages and oth

padosoft 54 Sep 21, 2022
Composer plugin for cleaning up unused files from packages.

Composer Cleanup Plugin Remove tests & documentation from the vendor dir. Based on laravel-vendor-cleanup but implemented as a Composer Plugin instead

Barry vd. Heuvel 136 Dec 15, 2022
Laravel breeze is a PHP Laravel library that provides Authentication features such as Login page , Register, Reset Password and creating all Sessions Required.

About Laravel breeze To give you a head start building your new Laravel application, we are happy to offer authentication and application starter kits

null 3 Jul 30, 2022
Learning Websocket by creating Custom Websocket-server package provided by Laravel

Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling.

Chisty Md.Muzammel Hossain 3 Oct 25, 2022
Laravel package for creating Word documents with Eloquent ORM dependencies.

Laravel Eloquent Word This package provides an elegant way to generate Word documents with Eloquent Models. Uses PHPOffice/PHPWord package to generate

Marvin Quezon 6 Aug 5, 2022
This package should help you with creating and managing a Laravel DDD Application

This package should help you with creating and managing a Laravel DDD Application. This package is heavily inspired by "Laravel beyond CRUD" from Spatie.

J. Regner 158 Dec 25, 2022
A Laravel package for creating a Markdown driven blog in minutes.

Static Markdown Blog A Laravel package for generating static blog posts from Markdown files. Sometimes, you want a blog but don't necessarily want to

Danny 0 Nov 12, 2022
Laravel lsp - Developer tools for easier Laravel development

Laravel lsp The Laravel/Blade lsp provides: Blade: Diagnostics on missing components + action to create it. Autocomplete for components and their argu

Harings Rob 32 Dec 21, 2022
A simple artisanal command framework for creating service layer classes

Introdução Este projeto tem como objetivo fornecer alguns comandos adicionais à interface de linha de comando do Laravel para manipular a estrutura da

Eliezer Alves 15 Feb 2, 2022
Source code behind the Laracasts Larabit: Creating and Using Custom Blade Directives

This is the source code behind the Laracasts Larabit: Creating and Using Custom Blade Directives, and features all of the files and code available in that video.

Andrew Schmelyun 1 Nov 12, 2021
Jumpstart your web development journey with the HALT Stack Starter Kit, a one-command solution for creating dynamic, scalable, and clean web applications.

Welcome to the HALT Stack Starter Kit! This kit is designed to help you kickstart your web development projects using the HALT Stack, a powerful combi

HALT Stack 6 Jun 7, 2023
SEO Tools for Laravel

SEOTools - SEO Tools for Laravel and Lumen SEOTools is a package for Laravel 5.8+ and Lumen that provides helpers for some common SEO techniques. Curr

Artesãos 2.7k Dec 31, 2022
Laravel Inspector, debugging and profiling tools for Web Artisans

Laravel Inspector At a Glance Installation Configuration Usage Messages Timers Redirects Dump and die Exceptions VIEW/AJAX/API requests, how it works

null 240 Dec 8, 2022
Builder - A handful of tools for Rapid Laravel Development

Grafite Builder Grafite has archived this project and no longer supports or develops the code. We recommend using only as a source of ideas for your o

Grafite Inc 997 Dec 22, 2022
A package for Myanmar Font, Phone and other Myanmar tools using Laravel Macro

Laravel Myanmar Tools A package for Myanmar Font, Phone and other Myanmar tools using Laravel Macro. Installation composer require pyaesoneaung/larave

Pyae Sone Aung 22 Dec 20, 2022