laravel-plugins
Plugin system for Laravel 5.x and Lumen 5.x.
Plugins can overwrite and extend each other.
Usage
For Lumen add to bootstrap/app.php:
$app->register(\Astutesixface\LaravelPlugins\PluginServiceProvider::class);
For Laravel add to 'providers' array in config/app.php:
\Astutesixface\LaravelPlugins\PluginServiceProvider::class,
Create a plugin
Structure
Plugins must be in app/Plugins. Example plugin structure:
- Test
- Http
- Controllers
- TestController.php
- views
- test.blade.php
- migrations
- 2018_06_15_000000_create_test_table.php
- routes.php
- TestPlugin.php
The TestPlugin class must extend the Astutesixface\LaravelPlugins\Plugin class, containing a unique $name property and a boot() method.
Views
In the boot() method of your plugin call $this->enableViews()
.
Optional you can pass a relative path to the views directory, default to views
.
Views automatically have a namespace ("plugin:{name}"
), the name is defined by the the main plugin class in a camel case format, with Plugin
stripped from the end. For the example above it would be plugin:test
.
To render a view you can either write the namespace yourself or use the helper method view()
in the plugin class. For example view('plugin:test::some.view.name');
Routes
In the boot() method of your plugin call $this->enableRoutes()
.
Optional you can pass a relative path to the routes file, default to routes.php
.
You automatically have access to the $app
variable.
Routes are automatically grouped to your plugin namespace, so you only have to type the controller name without the namespace.
Controllers
Controllers must be in PluginDirectory->Http->Controllers.
Migrations
In the boot() method of your plugin call $this->enableMigrations()
.
Optional you can pass a relative path to the migrations directory, default to migrations
.
Keep in mind that migrations must follow the yyyy_mm_dd_tttt_<name>.php
naming convention, for example 2014_10_12_000000_create_users_table.php
would be a valid migration.
How to extend another plugin
see examples/extend
ToDo
-
Move plugin directory and project namespace to publishable config file