Creating Boxes

Compared to Modules there's not much sense to create an in-app box, even if it's technically possible. The reason is that a Box can be considered an application boilerplate, so why define a template and immediately overwrite it? Your application is responsible for everything an in-app Box would do.

Creating An External Box (With Git And Composer)

  1. Init a git repo in an empty folder: git init .

  2. Add composer.json:

     {
         "name": "vendor/mybox",
         "description": "My Box Rulez",
         "type": "library",
         "require": {
             "php": ">=7.0.0",
             "konekt/concord": ">=0.9.10"
         },
         "autoload": {
             "psr-4": { "Vendor\\MyBox\\": "src/" }
         }
     }
  3. Create the file src/Providers/ModuleServiceProvider.php:

     namespace Vendor\MyBox\Providers;
    
     use Konekt\Concord\BaseBoxServiceProvider;
    
     class ModuleServiceProvider extends BaseBoxServiceProvider
     {
     }
  4. Create src/resources/manifest.php:

     <?php
    
     return [
        'name'    => 'My Box',
        'version' => '1.0.0'
     ];
  5. Commit all the stuff, and publish it (github and packagist if it's open source)

Adding Modules To The Box

Boxes have their primary config file located in resources/config/box.php. Modules need to be added here:

<?php

return [
    'modules' => [
        Vendor\MyModule\Providers\ModuleServiceProvider::class => [],
        Vendor\AnotherModule\Providers\ModuleServiceProvider::class => []
    ]
];

The empty arrays in the example mean that everything from those modules will be imported according to the defaults.

Overriding Module Parts

Suppressing Migrations

You may decide to gather/modify/skip migrations from the underlying modules. In this case you can suppress migrations provided by the module:

<?php

return [
    'modules' => [
        Vendor\MyModule\Providers\ModuleServiceProvider::class => [
            'migrations' => false    
        ],
        Vendor\AnotherModule\Providers\ModuleServiceProvider::class => [
            'migrations' => false            
        ]
    ]
];

See also: Box Configuration and Turn Migrations On/Off

Make sure to provide a compatible replacement if you're suppressing a module's migration.

Adding A Box To An Application

  1. In the laravel application: composer require vendor/mybox

  2. Add the module to config/concord.php:

     <?php
    
     return [
        'modules' => [
            Vendor\MyBox\Providers\ModuleServiceProvider::class,
        ]
     ];

Next: Configuration »