在使用为Laravel 5建造多租赁套餐时,我必须了解如何使路径和命名空间变得动态。
这将涉及:
发布于 2015-05-08 05:47:42
视图
使用服务提供者,您可以在boot()方法中使用以下方法使视图在根命名空间中可用(view('your-view')而不是view('package::your-view')):
$this->app['view']->addLocation('/your/new/location');语言
使用服务提供者,您可以在boot()方法中使用以下内容,其中$path是根命名空间转换的新路径:
$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;
});路线
到目前为止,路线是最简单的。只需使用require_once或使用Laravel方法:\File::requireOnce()将它们包括在内。
配置
我使用了一个目录,允许租户否决核心信任。请注意,这里没有安全检查,也没有卫生检查,因此访问应该受到限制。
使用服务提供者,您可以在boot()方法中使用以下内容
foreach (\File::allFiles('/path/to/configs') as $path) {
$key = \File::name($path);
$app['config']->set($key, array_merge(require $path, $app['config']->get($key, [])));
}这将通过覆盖现有配置的值与提供的配置文件合并现有配置。
供应商
真正有趣的是使用动态加载类的可能性。为此,您需要在您的ClassLoader addDirectories()方法中使用服务提供者
\Illuminate\Support\ClassLoader::addDirectories(['/path/to/vendors']);其他考虑因素
以上代码可以使用服务提供者实现。为了使服务器提供程序工作,必须将它们添加到providers数组下的config/app.php文件中。不这样做将不会启用服务提供程序中的任何代码。
https://stackoverflow.com/questions/30116617
复制相似问题