laravel 5 的动态路径
Dynamic paths for laravel 5
虽然 building multi-tenancy packages for Laravel 5 我必须弄清楚如何使路径和名称空间动态化。
这将涉及:
- 观看次数;动态添加根命名空间中可用的模板目录
- 语言;动态添加根命名空间中可用的语言目录
- 路线;动态添加路由文件
- 配置;从动态位置合并其他配置文件
- 供应商;允许从动态位置获得自定义供应商和包
观看次数
使用 service provider,您可以在 boot()
方法中使用以下内容,以便在根命名空间(view('your-view')
而不是 view('package::your-view')
中使用视图):
$this->app['view']->addLocation('/your/new/location');
语言
使用 service provider,您可以在 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()
.
配置
我使用了一个允许租户否决核心配置的目录。请告知这里没有安全检查或完整性检查,因此访问应该受到限制。
使用 service provider 您可以在 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, [])));
}
这将通过使用提供的配置文件否决它们的值来合并现有配置。
供应商
真正有趣的是可以使用动态加载 类。为此,您需要在 service provider
中使用 ClassLoader
addDirectories()
方法
\Illuminate\Support\ClassLoader::addDirectories(['/path/to/vendors']);
其他注意事项
以上代码可以使用服务提供者来实现。为了让服务器提供商工作,您 必须 将它们添加到 providers
数组下的 config/app.php
文件中。不这样做将不会启用服务提供程序中的任何代码。
虽然 building multi-tenancy packages for Laravel 5 我必须弄清楚如何使路径和名称空间动态化。
这将涉及:
- 观看次数;动态添加根命名空间中可用的模板目录
- 语言;动态添加根命名空间中可用的语言目录
- 路线;动态添加路由文件
- 配置;从动态位置合并其他配置文件
- 供应商;允许从动态位置获得自定义供应商和包
观看次数
使用 service provider,您可以在 boot()
方法中使用以下内容,以便在根命名空间(view('your-view')
而不是 view('package::your-view')
中使用视图):
$this->app['view']->addLocation('/your/new/location');
语言
使用 service provider,您可以在 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()
.
配置
我使用了一个允许租户否决核心配置的目录。请告知这里没有安全检查或完整性检查,因此访问应该受到限制。
使用 service provider 您可以在 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, [])));
}
这将通过使用提供的配置文件否决它们的值来合并现有配置。
供应商
真正有趣的是可以使用动态加载 类。为此,您需要在 service provider
中使用ClassLoader
addDirectories()
方法
\Illuminate\Support\ClassLoader::addDirectories(['/path/to/vendors']);
其他注意事项
以上代码可以使用服务提供者来实现。为了让服务器提供商工作,您 必须 将它们添加到 providers
数组下的 config/app.php
文件中。不这样做将不会启用服务提供程序中的任何代码。