A module management in Laravel
- PHP: >=5.6
- Laravel Framework: >=5.4
Clara is packed as a composer package. So it can be installed quickly:
-
Require the composer package
composer require megaads/clara
-
Register the provider:
Megaads\Clara\Providers\ModuleServiceProvider
-
Register the facade:
Megaads\Clara\Facades\ModuleFacade
-
Autoloading
By default, Module classes are not loaded automatically. You can autoload your modules in composer.json
{
"autoload": {
"psr-4": {
"App\\": "app/",
"Modules\\": "app/Modules"
}
},
"extra": {
"merge-plugin": {
"include": [
"app/Modules/*/module.json"
]
}
}
}
- Publish Clara configurations
To override Clara default configuration options, you will need to publish Clara configuration file to the application's config directory.
php artisan vendor:publish --provider="Megaads\Clara\Providers\ModuleServiceProvider"
php artisan module:make <ModuleName> ...
Module names should follow UpperCamelCase
syntax (without any space characters). For example: FacebookComment
and module namespace in kebab-case
that correspond to a module name in CamelCase
. For example: facebook-comment
app
│
└───Modules
└───ModuleName
│
└───Config
│ app.php
│
└───Controllers
│ Controller.php
│ ...
│
└───Helpers
│ helper.php
│ ...
│
└───Middlewares
│ ExampleMiddleware.php
│ ...
│
└───Models
│ ...
│
└───Resources
│ Views
│ Assets
│ ...
│
└───Routes
│ routes.php
│ ...
│
└───Kernel.php
│
└───module.json
│
└───start.php
module.json
: the module configuration file is based oncomposer.json
form. All properties in themodule.json
will be merged tocomposer.json
of the project.start.php
: the module's start file that will be loaded every requests. So module actions, module views... can be registered in this file.
php artisan module:install <ModuleName>
Clara takes the name of the module that requested to search for it in the app repository that you have registered in config/clara.php
configuration, after downloading the module files, Clara adds the module configuration to the module.json
file
php artisan module:install
This will searches and downloads the modules listed in module.json
from the app repository into the app/Modules/
directory
php artisan module:install <ModuleZipFilePath> <ModuleZipFileURL> ...
php artisan module:enable <ModuleName> ...
php artisan module:disable <ModuleName> ...
php artisan module:remove <ModuleName> ...
php artisan module:remove-all
Using PHP
Module::action('action_name', [params]);
Using blade statement
@action('action_name', [params])
Module::onAction('action_name', function ($params) {
}, PRIORITY);
Handle a action using a controller
Module::onAction('action_name', 'Modules\Example\Controllers\HomeController@action', PRIORITY);
By default, Clara supplies actions:
- module_made
- module_loaded
- module_disabled
- module_enabled
- module_removed
- module_removed_all
Using PHP
Module::view('view_name', [params], IS_MULTI_LAYER);
Module::view('view_name', 'This is a view placeholder', IS_MULTI_LAYER);
Module::view('view_name', function() {
return 'This is a view placeholder';
}, IS_MULTI_LAYER);
Using blade statement
@view('view_name', [params])
Module::onView('view_name', function ($params) {
return view('{module-namespace}:home.index');
}, PRIORITY);
Handle a view using a controller
Module::onView('view_name', 'Modules\ExampleModule\Controllers\HomeController@index', PRIORITY);
Using PHP
$variable = Module::variable('handle', $default, PRIORITY);
Using blade statement
@variable('variable_name', 'handle', $default);
Module::onVariable('hanlde', function ($params) {
}, PRIORITY, NUUM_OF_PARAM);
Clara will create a symbol link from module asset directory app/Modules/{ModuleName}/Resources/Assets
to public/modules/{module-namespace}
while a module was installed, made or enabled.
Using PHP
<script type="text/javascript" src="<?= Module::asset('{module-namespace}/js/demo.js') ?>"></script>
Using blade statement
<script type="text/javascript" src="@asset('{module-namespace}/js/demo.js')"></script>
php artisan module:asset:link <ModuleName>
php artisan module:asset:link --all
All of the configuration files for the module are stored in the {ModuleName}/Config
directory
Sometimes you may need to access configuration values at run-time. You may do so using the Config
class
Config::get('{module-namespace}::app.message', 'hello world');
$modules = Module::all();
$module = Module::this();
$option = Module::option('option.name');
$option = Module::option('option.name', 'option.value');
The Clara is open-sourced software licensed under the MIT license
Email: info@megaads.vn | phult.contact@gmail.com
If you find a bug, please report it here on Github