Laravel 5 Modules

Related tags

CMS modules
Overview

Laravel 5 Modules

pingpong/modules is a laravel package which created to manage your large laravel app using modules. Module is like a laravel package, it have some views, controllers or models. This package is supported and tested in both Laravel 4 and Laravel 5.

Upgrade Guide

To 2.0.18

If you have been updated to version 2.0.18, please read this release note.

To 2.0.10

Previously, we add two service provider from this package. In version 2.0.5, we just need register one service provider. Now, we can remove Pingpong\Modules\Providers\BootstrapServiceProvider from providers array, because now it service provider is registered automatically by Pingpong\Modules\ModulesServiceProvider.

From Laravel 4 to Laravel 5

If upgrade your Laravel app from Laravel 4 to Laravel 5, there is a few things to do if you are using this package. You will receive some kind errors about config not loaded. To fix this issue, please follow this instruction.

  • If you publish the package's configuration file, you need to move the config file from app/config/packages/pingpong/modules/config.php to app/config/modules.php.
  • If you are not publish the package's configuration file and you want to publish the config file, just run php artisan vendor:publish command and you are done.

From 1.1.* to 1.2.0

New configuration file. This breaking change affected if you publish the configuration file from this package. To fix this issue, create new config file called config.php in your app/config/packages/pingpong/modules/ directory. Next move the array contents from paths.php file to paths array in new configuration file. Your config file will looks like this.

Installation

To install through composer, simply put the following in your composer.json file:

{
    "require": {
        "pingpong/modules": "~2.1"
    }
}

And then run composer install to fetch the package.

Quick Installation

You could also simplify the above code by using the following command:

composer require "pingpong/modules:~2.1"

Add Service Provider

Next add the following service provider in config/app.php.

'providers' => array(
  'Pingpong\Modules\ModulesServiceProvider',
),

Next, add the following aliases to aliases array in the same file.

'aliases' => array(
  'Module' => 'Pingpong\Modules\Facades\Module',
),

Next publish the package's configuration file by run :

php artisan vendor:publish

Autoloading

By default controllers, entities or repositories not loaded automatically. You can autoload all that stuff using psr-4. For example :

{
  "autoload": {
    "psr-4": {
      "App\\": "app/",
      "Modules\\": "modules/"
    }
  }
}

Configuration

  • modules - Used for save the generated modules.
  • assets - Used for save the modules's assets from each modules.
  • migration - Used for save the modules's migrations if you publish the modules's migrations.
  • generator - Used for generate modules folders.
  • scan - Used for allow to scan other folders.
  • enabled - If true, the package will scan other paths. By default the value is false
  • paths - The list of path which can scanned automatically by the package.
  • composer
    • vendor - Composer vendor name.
    • author.name - Composer author name.
    • author.email - Composer author email.
  • cache
    • enabled - If true, the scanned modules (all modules) will cached automatically. By default the value is false
    • key - The name of cache.
    • lifetime - Lifetime of cache.

Creating A Module

To create a new module you can simply run :

php artisan module:make <module-name>
  • <module-name> - Required. The name of module will be created.

Create a new module

php artisan module:make Blog

Create multiple modules

php artisan module:make Blog User Auth

By default if you create a new module, that will add some resources like controller, seed class or provider automatically. If you don't want these, you can add --plain flag, to generate a plain module.

php artisan module:make Blog --plain
#OR
php artisan module:make Blog -p

Naming Convension

Because we are autoloading the modules using psr-4, we strongly recommend using StudlyCase convension.

Folder Structure

laravel-app/
app/
bootstrap/
vendor/
modules/
  ├── Blog/
      ├── Assets/
      ├── Config/
      ├── Console/
      ├── Database/
          ├── Migrations/
          ├── Seeders/
      ├── Entities/
      ├── Http/
          ├── Controllers/
          ├── Middleware/
          ├── Requests/
          ├── routes.php
      ├── Providers/
          ├── BlogServiceProvider.php
      ├── Resources/
          ├── lang/
          ├── views/
      ├── Repositories/
      ├── Tests/
      ├── composer.json
      ├── module.json
      ├── start.php

Artisan Commands

Create new module.

php artisan module:make blog

Use the specified module. Please see #26.

php artisan module:use blog

Show all modules in command line.

php artisan module:list

Create new command for the specified module.

php artisan module:make-command CustomCommand blog

php artisan module:make-command CustomCommand --command=custom:command blog

php artisan module:make-command CustomCommand --namespace=Modules\Blog\Commands blog

Create new migration for the specified module.

php artisan module:make-migration create_users_table blog

php artisan module:make-migration create_users_table --fields="username:string, password:string" blog

php artisan module:make-migration add_email_to_users_table --fields="email:string:unique" blog

php artisan module:make-migration remove_email_from_users_table --fields="email:string:unique" blog

php artisan module:make-migration drop_users_table blog

Rollback, Reset and Refresh The Modules Migrations.

php artisan module:migrate-rollback

php artisan module:migrate-reset

php artisan module:migrate-refresh

Rollback, Reset and Refresh The Migrations for the specified module.

php artisan module:migrate-rollback blog

php artisan module:migrate-reset blog

php artisan module:migrate-refresh blog

Create new seed for the specified module.

php artisan module:make-seed users blog

Migrate from the specified module.

php artisan module:migrate blog

Migrate from all modules.

php artisan module:migrate

Seed from the specified module.

php artisan module:seed blog

Seed from all modules.

php artisan module:seed

Create new controller for the specified module.

php artisan module:make-controller SiteController blog

Publish assets from the specified module to public directory.

php artisan module:publish blog

Publish assets from all modules to public directory.

php artisan module:publish

Create new model for the specified module.

php artisan module:make-model User blog

php artisan module:make-model User blog --fillable="username,email,password"

Create new service provider for the specified module.

php artisan module:make-provider MyServiceProvider blog

Publish migration for the specified module or for all modules. This helpful when you want to rollback the migrations. You can also run php artisan migrate instead of php artisan module:migrate command for migrate the migrations.

For the specified module.

php artisan module:publish-migration blog

For all modules.

php artisan module:publish-migration

Enable the specified module.

php artisan module:enable blog

Disable the specified module.

php artisan module:disable blog

Generate new middleware class.

php artisan module:make-middleware Auth

Update dependencies for the specified module.

php artisan module:update ModuleName

Update dependencies for all modules.

php artisan module:update

Show the list of modules.

php artisan module:list

Facades

Get all modules.

Module::all();

Get all cached modules.

Module::getCached()

Get ordered modules. The modules will be ordered by the priority key in module.json file.

Module::getOrdered();

Get scanned modules.

Module::scan();

Find a specific module.

Module::find('name');
// OR
Module::get('name');

Find a module, if there is one, return the Module instance, otherwise throw Pingpong\Modules\Exeptions\ModuleNotFoundException.

Module::findOrFail('module-name');

Get scanned paths.

Module::getScanPaths();

Get all modules as a collection instance.

Module::toCollection();

Get modules by the status. 1 for active and 0 for inactive.

Module::getByStatus(1);

Check the specified module. If it exists, will return true, otherwise false.

Module::has('blog');

Get all enabled modules.

Module::enabled();

Get all disabled modules.

Module::disabled();

Get count of all modules.

Module::count();

Get module path.

Module::getPath();

Register the modules.

Module::register();

Boot all available modules.

Module::boot();

Get all enabled modules as collection instance.

Module::collections();

Get module path from the specified module.

Module::getModulePath('name');

Get assets path from the specified module.

Module::getAssetPath('name');

Get config value from this package.

Module::config('composer.vendor');

Get used storage path.

Module::getUsedStoragePath();

Get used module for cli session.

Module::getUsedNow();
// OR
Module::getUsed();

Set used module for cli session.

Module::setUsed('name');

Get modules's assets path.

Module::getAssetsPath();

Get asset url from specific module.

Module::asset('blog:img/logo.img');

Install the specified module by given module name.

Module::install('pingpong-modules/hello');

Update dependencies for the specified module.

Module::update('hello');

Module Entity

Get an entity from a specific module.

$module = Module::find('blog');

Get module name.

$module->getName();

Get module name in lowercase.

$module->getLowerName();

Get module name in studlycase.

$module->getStudlyName();

Get module path.

$module->getPath();

Get extra path.

$module->getExtraPath('Assets');

Disable the specified module.

$module->enable();

Enable the specified module.

$module->disable();

Delete the specified module.

$module->delete();

Custom Namespaces

When you create a new module it also registers new custom namespace for Lang, View and Config. For example, if you create a new module named blog, it will also register new namespace/hint blog for that module. Then, you can use that namespace for calling Lang, View or Config. Following are some examples of its usage:

Calling Lang:

Lang::get('blog::group.name');

Calling View:

View::make('blog::index')

View::make('blog::partials.sidebar')

Calling Config:

Config::get('blog.name')

Publishing Modules

Have you created a laravel modules? Yes, I've. Then, I want to publish my modules. Where do I publish it? That's the question. What's the answer ? The answer is Packagist. In pingpong/modules version >= 1.2.0, when you generate a module, you will see there is a new file generated called composer.json.

Auto Scan Vendor Directory

By default the vendor directory is not scanned automatically, you need to update the configuration file to allow that. Set scan.enabled value to true. For example :

// file config/modules.php

return [
  //...
  'scan' => [
    'enabled' => true
  ]
  //...
]

You can verify the module has been installed using module:list command:

php artisan module:list

Publishing Modules

After creating a module and you are sure your module module will be used by other developers. You can push your module to github or bitbucket and after that you can submit your module to the packagist website.

You can follow this step to publish your module.

  1. Create A Module.
  2. Push the module to github.
  3. Submit your module to the packagist website. Submit to packagist is very easy, just give your github repository, click submit and you done.
Comments
  • ->prop() method

    ->prop() method

    Hello,

    I've updated to 1.1.7, and the ->prop() method seems to be gone. Was it renamed to something else ?

    Thank you,

    FYI: I used to it to get the providers $app['modules']->prop("{$module}::providers") to register them.

    opened by nWidart 23
  • How to proper include and use a composer dependency in a module?

    How to proper include and use a composer dependency in a module?

    Hi @gravitano,

    I'm using your plugin to create a modulazired application. However, I can't figure out how to use an external library, like intervention/image, in a module. Here are the steps I took:

    Create a new application and install pingpong modules

    $ laravel new testcore
    
    Crafting application...
    > php -r "copy('.env.example', '.env');"
    > php artisan clear-compiled
    > php artisan optimize
    Generating optimized class loader
    > php artisan key:generate
    Application key [3J6WvdEcA2IpTtuo6jV87XGUbNO8xJ39] set successfully.
    Application ready! Build something amazing.
    
    $ cd testcore
    $ composer require pingpong/modules
    
    Using version ^2.1 for pingpong/modules
    ./composer.json has been updated
    > php artisan clear-compiled
    Loading composer repositories with package information
    Updating dependencies (including require-dev)
      - Installing laravelcollective/html (v5.1.3)
        Loading from cache
    
      - Installing erusev/parsedown (1.5.3)
        Loading from cache
    
      - Installing erusev/parsedown-extra (0.7.0)
        Loading from cache
    
      - Installing pingpong/support (v2.1.4)
        Loading from cache
    
      - Installing doctrine/lexer (v1.0.1)
        Loading from cache
    
      - Installing doctrine/annotations (v1.2.6)
        Loading from cache
    
      - Installing doctrine/collections (v1.3.0)
        Loading from cache
    
      - Installing doctrine/cache (v1.4.1)
        Loading from cache
    
      - Installing doctrine/common (v2.5.0)
        Loading from cache
    
      - Installing doctrine/dbal (v2.5.1)
        Loading from cache
    
      - Installing pingpong/generators (v2.1.4)
        Loading from cache
    
      - Installing pingpong/modules (v2.1.4)
        Loading from cache
    
    Writing lock file
    Generating autoload files
    > php artisan optimize
    Generating optimized class loader
    

    Add Modules Service Provider and Alias to config/app.php

        'providers' => [
            Pingpong\Modules\ModulesServiceProvider::class,
            /*
             * Laravel Framework Service Providers...
             */
            Illuminate\Foundation\Providers\ArtisanServiceProvider::class,
            ...
        ],
        'aliases' => [
            'Module'    => Pingpong\Modules\Facades\Module::class,
            'App'       => Illuminate\Support\Facades\App::class,
            ...
        ],
    

    Add PSR-4 loading of Modules namespace

    {
      "autoload": {
        "psr-4": {
          "App\\": "app/",
          "Modules\\": "modules/"
        }
      }
    }
    
    $ composer dump-autoload
    

    Publish vendor files

    $ php artisan vendor:publish
    
    Copied File [/vendor/pingpong/modules/src/config/config.php] To [/config/modules.php]
    Publishing complete for tag []!
    
    $ php artisan module:setup
    Modules directory created successfully
    Assets directory created successfully
    

    Create a new module

    $ php artisan module:make Media
    Created : /var/www/testcore/modules/Media/start.php
    Created : /var/www/testcore/modules/Media/Http/routes.php
    Created : /var/www/testcore/modules/Media/module.json
    Created : /var/www/testcore/modules/Media/Resources/views/index.blade.php
    Created : /var/www/testcore/modules/Media/Resources/views/layouts/master.blade.php
    Created : /var/www/testcore/modules/Media/Config/config.php
    Created : /var/www/testcore/modules/Media/composer.json
    Created : /var/www/testcore/modules/Media/Database/Seeders/MediaDatabaseSeeder.php
    Created : /var/www/testcore/modules/Media/Providers/MediaServiceProvider.php
    Created : /var/www/testcore/modules/Media/Http/Controllers/MediaController.php
    Module [Media] created successfully.
    

    Everything until this point works fine: i can browse to testcore.localhost/media and Laravel successfully shows me the module Welcome page. Even the module status shows me that everything is ok:

    php artisan module:list
    +-------+---------+-------+---------------------------------+
    | Name  | Status  | Order | Path                            |
    +-------+---------+-------+---------------------------------+
    | Media | Enabled | 0     | /var/www/testcore/modules/Media |
    +-------+---------+-------+---------------------------------+
    

    Add composer dependency

    $ cd modules/Media
    $ composer require intervention/image
    ./composer.json has been updated
    Loading composer repositories with package information
    Updating dependencies (including require-dev)
      - Installing psr/http-message (1.0)
        Loading from cache
    
      - Installing guzzlehttp/psr7 (1.1.0)
        Loading from cache
    
      - Installing intervention/image (2.3.1)
        Loading from cache
    
    intervention/image suggests installing intervention/imagecache (Caching extension for the Intervention Image library)
    Writing lock file
    Generating autoload files
    

    Everything is fine again:

    php artisan module:list
    +-------+---------+-------+---------------------------------+
    | Name  | Status  | Order | Path                            |
    +-------+---------+-------+---------------------------------+
    | Media | Enabled | 0     | /var/www/testcore/modules/Media |
    +-------+---------+-------+---------------------------------+
    

    But now i need to include the Intervention Service Provider to be able to use it, so i edit my module.json file like this:

    {
        "name": "Media",
        "alias": "media",
        "description": "",
        "keywords": [],
        "active": 1,
        "order": 0,
        "providers": [
            "Modules\\Media\\Providers\\MediaServiceProvider",
            "Intervention\\Image\\ImageServiceProvider"
        ],
        "aliases":{},
        "files": [
            "start.php"
        ]
    }
    

    If I check again the modules statuses, artisan give me an error:

    $ php artisan module:list
    PHP Fatal error:  Class 'Intervention\Image\ImageServiceProvider' not found in /var/www/testcore/vendor/laravel/framework/src/Illuminate/Foundation/Application.php on line 575
    
      [Symfony\Component\Debug\Exception\FatalErrorException]    
      Class 'Intervention\Image\ImageServiceProvider' not found  
    
    

    I think that this is related to not including composer's autoload.php inside modules/Media/vendor/.

    Are there any correct ways to do this? I spotted a class named Starter inside pingpong/modules which seems to do exactly this, but I don't know how to use it.

    Please help me!

    opened by marcotisi 19
  • New filter-make command wrong location

    New filter-make command wrong location

    Hi,

    I tried the new module:filter-make command, the filter was correctly generated, but at the root of the module.

    It had the correct namespace though, Modules\Session\Http\Filters

    opened by nWidart 17
  • Accessing translation files

    Accessing translation files

    Hello! How does one access a translations file from a module? I have a module calles Vpns with the translation file help.php. I try to access the data with trans('vpns.help.new.name') but it will not work. The translation file looks like this: 'help' => [ 'new' => [ 'name' => 'Hilftetext für Name' ] ]

    opened by nicozimmermann94 16
  • Load assets not specified protocol

    Load assets not specified protocol

    Hello,

    Could you please load assets without specifying http://, for instance:

    Example:

    Module::asset(''core:js/keypressAction.js)
    

    Don't load:

    <script src="http://asgardcms.dev/modules/core/js/keypressAction.js" type="text/javascript"></script>
    

    but:

    <script src="//asgardcms.dev/modules/core/js/keypressAction.js" type="text/javascript"></script>
    

    This will load the asset to the current protocol, either http or https.

    You could also provide an optional argument, in addition to loading assets over //, to set secure true or false.

    Thanks!

    (This is pretty important since loading the site over https will fail because of this issue)

    opened by nWidart 15
  • Routes are loaded by default

    Routes are loaded by default

    Hello,

    I started to let some people in the AsgardCMS beta, and there's still the issue that pingpong/modules loads the routes by default. I have to tell them to comment line 193 on the Module class $this->registerRoutes(); since I use the L5 way of registering routes. Using a service provider. Could you please not register routes by default using your technique?

    Thanks,

    opened by nWidart 15
  • NotFoundHttpException after getting published module

    NotFoundHttpException after getting published module

    Hello,

    after I created a module I published it to my private git repo. After that I installed it via composer and it's available at the vendor folder, now. But when I open my Browser and type an route in, which is available in route.php file i get a

    NotFoundHttpException in RouteCollection.php line 145

    composer dump-autoload has no effect.

    Can u help me? Sorry for my bad english. I'm German.

    Greetings.

    opened by ghost 12
  • Module configuration not accessible

    Module configuration not accessible

    Hey,

    Did anything change since last update about accessing the module configuration? Since the composer update I did this morning I cannot access Config::get('core::core.admin-prefix') anymore. Which previously worked. My file structure hasn't changed since.

    Thanks.

    opened by nWidart 12
  • Class modules.finder does not exist

    Class modules.finder does not exist

    All artisan commands fail after enabling this module

    {"error":{"type":"ReflectionException","message":"Class modules.finder does not exist","file":"\/var\/www\/vendor\/laravel\/framework\/src\/Illuminate\/Container\/Container.php","line":485}}
    

    And the webapplication is broken too with the same error.

    opened by syphernl 12
  • Not compatible with model relations?

    Not compatible with model relations?

    Hey,

    I added a relation to my model like that:

        public function articles()
        {
            return $this->hasMany('App\Modules\XXX\Models\Articles');
        }
    

    But always get:

    FatalErrorException in Model.php line 902: Class 'App\Modules\XXX\Models\Articles' not found

    Am I doing something wrong, or is the package not compatible with relations?

    Thanks!

    opened by TheTechnoMan 11
  • Fatal Error: Pingpong\Generators\Exceptions\InvalidMigrationNameException

    Fatal Error: Pingpong\Generators\Exceptions\InvalidMigrationNameException

    Hello @gravitano,

    I want to generate a migration for my module (I use L5.1).

    First I type in the command

     php artisan module:use Content
    

    After that I want to execute

     php artisan module:make-migration create_content_table
    

    But then I get an error:

     [Symfony\Component\Debug\Exception\FatalErrorException]
     Class 'Pingpong\Generators\Exceptions\InvalidMigrationNameException' not found
    

    Can u help me ?

    Thanks and greetings from Germany

    Heiko

    opened by ghost 9
  • Laravel  5.3 Problem!

    Laravel 5.3 Problem!

    composer require pingpong/modules "dev-master" command executing the error occurred!

    Problem 1 - Installation request for pingpong/modules dev-master -> satisfiable by pingpong/modules[dev-master]. - pingpong/modules dev-master requires pingpong/support dev-master -> satisfiable by pingpong/support[dev-master] but these conflict with your requirements or minimum-stability.

    opened by r1z4x 4
  • Extremely bad performance on version 2.2

    Extremely bad performance on version 2.2

    I'm in the process of upgrading to laravel 5.2, using version 2.2 of this package.

    However since this upgrade, the application load time has increased by almost 2 seconds.

    I've run a blackfire.io profiler, this is what it looks like: https://blackfire.io/profiles/1fa3c08e-c1df-4c3d-84e2-ea73be40361c/graph

    On that profile there are 606 calls to file_get_contents which comes from the Json class. This is with caching enabled. Without caching this was close to 1300 calls!

    I think this could still be reduced as the same module.json file is called multiple times. The following image only shows a very small amount of calls. screen shot 2016-06-22 at 17 29 36

    Adding some caching to the getAttributs method in the Json class.

    public function getAttributes()
    {
        return app('cache')->remember($this->getPath(), 10, function () {
            return json_decode($this->getContents(), 1);
        });
    }
    

    This reduces the amount of calls to 22!! After this change: https://blackfire.io/profiles/8e098e83-af3c-4638-b6f5-3ffca7136f44/graph

    I think this is something that should be looked at asap.

    opened by nWidart 0
Releases(v2.2.0)
  • v2.2.0(Jan 11, 2016)

  • v2.1.0(Jun 28, 2015)

  • 2.0.21(Jun 28, 2015)

  • 2.0.18(Jun 11, 2015)

    • Now every module will register in register method in BootstrapServiceProvider class https://github.com/pingpong-labs/modules/commit/3bda8727ed7cc744cbcc071f5d48f2dbf134892c.
    • If you got error like class translator not found, move the registration namespaces of translation files and views from your module's start.php file to your module's service provider class in `boot method. You can follow this example. https://github.com/pingpongcms/pingpongcms/commit/0f8d514959f5453cf8b8265fb35b0db52495dcf8. Also, dont forget to fix the language and views paths. https://github.com/pingpongcms/pingpongcms/commit/c54cfdb82c15c6806b0dc841005d7515ac467df2
    Source code(tar.gz)
    Source code(zip)
  • 2.0.8(May 22, 2015)

  • 2.0.7(May 21, 2015)

  • 2.0.4(May 17, 2015)

  • 1.2.1(Dec 24, 2014)

    • Fix #81.
    • Fix #82.
    • Fix class FileAlreadyExistsException not found.
    • Add new artisan command module:dump.
    • Add new feature that user can add a custom path as modules path using addPath method or addLocation method.
    Source code(tar.gz)
    Source code(zip)
  • 1.2.0(Dec 20, 2014)

  • 1.1.11(Dec 4, 2014)

  • 1.1.9(Nov 27, 2014)

    • [L5] Auto create directory for module.used file if does not exist
    • #62 Fix missing a tailing / when registering a module
    • Add index method to stub controller
    • Fix undefined class CliTest
    Source code(tar.gz)
    Source code(zip)
  • 1.1.8(Nov 26, 2014)

  • 1.1.7(Nov 25, 2014)

    • You can order the modules by specify priority key in module.json file.
    • You can include some files from module.json file.
    • You can register some providers from module.json file.
    • There's some breaking changes :
      • If you inject the module class to other class, the old class Pingpong\Modules\Module was replaced by Pingpong\Modules\Repository class.
      • routes.php file does not loaded automatically. Please follow this issue to fix the issue.
    Source code(tar.gz)
    Source code(zip)
Owner
Pingpong Labs
[Unmaintained] A free to use packages for Laravel
Pingpong Labs
Laravel 5 Modules

Laravel 5 Modules Upgrade Guide Installation Configuration Naming Convension Folder Structure Creating Module Artisan Commands Facades Entity Auto Sca

Pingpong Labs 572 Dec 30, 2022
Borgert - A simple CMS to start projects in Laravel containing some modules

A simple CMS to start projects in Laravel containing some modules.Blog, Pages, Products, Mailbox, Image Gallery, Log Viewer and Users.

Borgert Inc. 300 Dec 30, 2022
Simple Bootstrap Laravel CMS. Support Laravel 8.x Can integrate into any existing Laravel project.

Simple Bootstrap Laravel CMS. Support Laravel 8.x Can integrate into any existing Laravel project. Only add few database tables with prefixes, not affect your existing database tables. Support Laravel 7.x & Laravel 6.x & Laravel 5.x & MySql & PostgreSql - Amila Laravel CMS

Alex Zeng 96 Sep 6, 2022
🦉 Administrative interface builder for Laravel (Laravel admin)

Laravel Admin Panel SleepingOwl SleepingOwl Admin is an administrative interface builder for Laravel. Completely free Support Laravel > 5.5 - 5.8 (PHP

Laravel Framework Russian Community 746 Jan 4, 2023
Laravel Craftsman CLI for easily crafting Laravel assets for any project (artisan make on steroids)

Laravel Craftsman Description Laravel Craftsman (written using the awesome Laravel-Zero CLI builder) provides a suite of crafting assets using a proje

Mike Erickson 228 Dec 26, 2022
Laravel-modulator - Laravel Modulator (HMVC) creating and handling in an easy and simple way.

Laravel Modulator HMVC creating and handling in an easy and simple way. Documentation You can find the detailed documentation here in Laravel Modulato

Pharaonic 7 Aug 7, 2022
Amila Laravel CMS - Free, open-source Simple Bootstrap Laravel CMS

Simple Bootstrap Laravel CMS. Support Laravel 8.x Can integrate into any existing Laravel project. Only add few database tables with prefixes, not affect your existing database tables. Support Laravel 7.x & Laravel 6.x & Laravel 5.x & MySql & PostgreSql - Amila Laravel CMS

Alex Zeng 96 Sep 6, 2022
Self-hosted CMS platform based on the Laravel PHP Framework.

October is a Content Management System (CMS) and web platform whose sole purpose is to make your development workflow simple again. It was born out of

October CMS 10.8k Jan 4, 2023
Pyro is an experienced and powerful Laravel PHP CMS.

PyroCMS PyroCMS is an easy to use, powerful, and modular CMS and development platform built with Laravel 5. Security If you discover any security rela

PyroCMS 3.1k Dec 23, 2022
Multilingual PHP CMS built with Laravel and bootstrap

Lavalite This is an open source of Content Management System developed with Laravel framework. Documentation Visit Documentation section in the websit

LavaLite 2.6k Jan 4, 2023
Multilingual CMS built with Laravel.

TypiCMS TypiCMS is a modular multilingual content management system built with Laravel. Out of the box you can manage pages, events, news, places, men

TypiCMS, Laravel multilingual CMS 1.1k Jan 7, 2023
The repository for Coaster CMS (coastercms.org), a full featured, Laravel based Content Management System

The repository for Coaster CMS (coastercms.org) a Laravel based Content Management System with advanced features and Physical Web integration. Table o

Coaster CMS 392 Dec 23, 2022
Borgert is a CMS Open Source created with Laravel Framework 5.6

A simple CMS to start projects in Laravel containing some modules. Blog, Pages, Products, Mailbox, Image Gallery, Log Viewer and Users. Frontend: Blog

Borgert Inc. 300 Dec 30, 2022
:star2: PJ Blog is an open source blog built with Laravel and Vue.js.

?? PJ Blog is an open source blog built with Laravel and Vue.js. https://pigjian.com Special thanks to the generous sponsorship by: PJ Blog This is a

Jiajian Chan 2.8k Dec 28, 2022
The modular open source laravel administration panel

Laralum What is Laralum? Laralum is an idea that came to our mind when we found no CMS that had the right balance between power and flexibility. This

Laralum 297 Nov 10, 2022
Twill is an open source CMS toolkit for Laravel that helps developers rapidly create a custom admin console that is intuitive, powerful and flexible. /// Chat with us and others on Spectrum: https://spectrum.chat/twill

About Twill Twill is an open source Laravel package that helps developers rapidly create a custom CMS that is beautiful, powerful, and flexible. By st

AREA 17 3k Jan 6, 2023
Laravel Learn Manage System (LMS)

Basement LMS A criação da LMS vai dar ênfase em uma facilidade maior para que outros desenvolvedores Laravel entendam como é a modelagem de tudo. Essa

Daniel Reis 92 Nov 9, 2022
Free, open-source, self-hosted CMS platform based on the Laravel PHP Framework.

Winter is a Content Management System (CMS) and web platform whose sole purpose is to make your development workflow simple again. It was born out of

Winter CMS 1.1k Jan 3, 2023
KodiCMS - CMS built on Laravel 5.2

KodiCMS based on Laravel PHP Framework English Version Установка (Installation): Клонировать репозиторий (Clone repository) git clone https://github.c

KodiCMS built on Laravel 163 Nov 27, 2022