Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/megaads-vn/clara
Cool Module manager for Laravel
https://github.com/megaads-vn/clara
clara composer laravel modular module php
Last synced: 17 days ago
JSON representation
Cool Module manager for Laravel
- Host: GitHub
- URL: https://github.com/megaads-vn/clara
- Owner: megaads-vn
- License: mit
- Created: 2019-08-13T05:52:40.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2024-11-19T03:23:57.000Z (about 2 months ago)
- Last Synced: 2024-11-19T03:30:52.048Z (about 2 months ago)
- Topics: clara, composer, laravel, modular, module, php
- Language: PHP
- Homepage:
- Size: 124 KB
- Stars: 2
- Watchers: 7
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Clara
A module management in Laravel## System requirements
- PHP: >=5.6
- Laravel Framework: >=5.4## Installation
Clara is packed as a composer package. So it can be installed quickly:
1. Require the composer package`composer require megaads/clara`
2. Register the provider:
`Megaads\Clara\Providers\ModuleServiceProvider`
3. Register the facade:
`Megaads\Clara\Facades\ModuleFacade`
4. Autoloading
By default, Module classes are not loaded automatically. You can autoload your modules in composer.json
```json
{
"autoload": {
"psr-4": {
"App\\": "app/",
"Modules\\": "app/Modules"
}
},
"extra": {
"merge-plugin": {
"include": [
"app/Modules/*/module.json"
]
}
}
}
```5. 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"
```## Module Management
### Create module
```
php artisan module:make ...
```
#### Naming conventionsModule 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`
#### Folder structure
```
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 on `composer.json` form. All properties in the `module.json` will be merged to `composer.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.### Module installing
#### Install a module using the module name
```
php artisan module:install
```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
#### Install module list from `module.json`
```
php artisan module:install
```This will searches and downloads the modules listed in `module.json` from the app repository into the `app/Modules/` directory
#### Install a module from a zip file or an URL
```
php artisan module:install ...
```### Enable a module
```
php artisan module:enable ...
```### Disable a module
```
php artisan module:disable ...
```### Remove a module
```
php artisan module:remove ...
```### Remove all modules
```
php artisan module:remove-all
```## Module Action
### Fire a action
Using PHP
```php
Module::action('action_name', [params]);
```Using blade statement
```php
@action('action_name', [params])
```### Handle a action
```php
Module::onAction('action_name', function ($params) {
}, PRIORITY);
```
Handle a action using a controller
```php
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## Module View
### Register a view
Using PHP
```php
Module::view('view_name', [params], IS_MULTI_LAYER);
```
```php
Module::view('view_name', 'This is a view placeholder', IS_MULTI_LAYER);
```
```php
Module::view('view_name', function() {
return 'This is a view placeholder';
}, IS_MULTI_LAYER);
```Using blade statement
```php
@view('view_name', [params])
```### Handle a view
```php
Module::onView('view_name', function ($params) {
return view('{module-namespace}:home.index');
}, PRIORITY);
```
Handle a view using a controller
```php
Module::onView('view_name', 'Modules\ExampleModule\Controllers\HomeController@index', PRIORITY);
```## Module variable
### Register a variable
Using PHP
```php
$variable = Module::variable('handle', $default, PRIORITY);
```Using blade statement
```php
@variable('variable_name', 'handle', $default);
```### Handle a variable
```php
Module::onVariable('hanlde', function ($params) {
}, PRIORITY, NUUM_OF_PARAM);
```## Module Assets
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.
### Include a module asset
Using PHP
```php```
Using blade statement
```php```
### Create module asset link manually
```
php artisan module:asset:link
```
### Create module asset link manually for all activated modules
```
php artisan module:asset:link --all
```
## Module ConfigurationsAll of the configuration files for the module are stored in the `{ModuleName}/Config` directory
### Accessing Configuration Values
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');
```## Module Utility Methods
### Get all modules
```php
$modules = Module::all();
```### Get the current module
```php
$module = Module::this();
```### Get module options
```php
$option = Module::option('option.name');
```### Set module option
```php
$option = Module::option('option.name', 'option.value');
```## License
The Clara is open-sourced software licensed under the [MIT license](http://opensource.org/licenses/MIT)
## Contact us / Instant feedback
Email: [email protected] | [email protected]
If you find a bug, please report it [here on Github](https://github.com/megaads-vn/clara/issues)