while building multi-tenancy packages laravel 5 had find out how make paths , namespaces dynamic.
this involve:
- views; adding template directory dynamically available in root namespace
- lang; adding language directory dynamically available in root namespace
- routes; adding routes file dynamically
- config; merging additional configuration files dynamic location
- vendor; allowing custom vendors , packages available dynamic location
views
using service provider can use following in boot()
method views available in root namespace (view('your-view')
instead of view('package::your-view')
):
$this->app['view']->addlocation('/your/new/location');
lang
using service provider can use following in boot()
method $path
new path root namespace translations:
$app->bindshared('translation.loader', function($app) use ($path) { return new \illuminate\translation\fileloader($app['files'], $path); }); $app->bindshared('translator', function($app) { $translator = new \illuminate\translation\translator($app['translation.loader'], $app['config']['app.locale']); $translator->setfallback($app['config']['app.fallback_locale']); return $translator; });
routes
routes far easiest. include them using require_once
or using laravel method: \file::requireonce()
.
config
i used directory allow tenant overrule core configs. please advice there no security nor sanity checks here access should limited.
using service provider can use following in boot()
method
foreach (\file::allfiles('/path/to/configs') $path) { $key = \file::name($path); $app['config']->set($key, array_merge(require $path, $app['config']->get($key, []))); }
this merge existing configurations overruling values provided config files.
vendor
really interesting possibility use dynamically loaded classes. in order need use classloader
adddirectories()
method in service provider
\illuminate\support\classloader::adddirectories(['/path/to/vendors']);
additional considerations
the above code can implemented using service providers. in order server provider work must add them config/app.php
file under providers
array. not doing not enable of code in service provider.
Comments
Post a Comment