在 CakePHP 3 中动态加载插件配置文件
Dynamically Loading Plugin Configuration Files in CakePHP 3
问题:如何从 Plugin/config 目录加载配置文件?
演示项目:https://github.com/CakePHPKitchen/CakeDC-Users-Permissions-Example
我正在使用 CakeDC/users 插件,它有一个 permissions.php 文件,它从中加载 RBAC 权限。据我所知,它要么加载用户插件配置文件夹中的默认权限文件,要么加载 app/config 文件夹中的 permissions.php 文件。
现在,对于我的应用程序框架,我在 app/config/permissions.php 中拥有大量权限,但是,我不想修改该文件,因为我将这样做 git从上游回购中提取,我想避免冲突。
所以我想做的是,在应用框架中 bootstrap
我愿意
foreach(Plugin::loaded() as $plugin) {
$path = Plugin::path($plugin) . 'config/permissions.php';
if(file_exists($path)) {
Configure::load($path, 'default', true);
}
}
但我收到以下错误....
Error: The application is trying to load a file from the /Users/jlroberts/Projects/JeffreyLRobertsCom/CakePHPKitchen/PluginDemos/plugins/SharpAgent/config/permissions plugin.
Make sure your plugin /Users/jlroberts/Projects/JeffreyLRobertsCom/CakePHPKitchen/PluginDemos/plugins/SharpAgent/config/permissions is in the /Users/jlroberts/Projects/JeffreyLRobertsCom/CakePHPKitchen/PluginDemos/plugins/ directory and was loaded.
关于如何从 Plugin/config 目录加载 permissions.php 文件有什么想法吗?
已编辑:您可以像现在一样从插件加载 permissions.php 文件,但更改 permissions.php 的内容以保留配置中定义的现有权限,例如:
config/permissions.php
$permissions = [
// add your app permissions here
[
// ...
],
];
// there are more permissions in this config key, defined across your plugins
$morePermissions = \Cake\Core\Configure::read('MyPermissions');
$allPerms = array_merge($permissions, $morePermissions);
return ['CakeDC/Auth.permissions' => $allPerms];
然后在每个插件中你可以有:
YOUR_PLUGIN/config/bootstrap.php
$permissions = \Cake\Core\Configure::read('MyPermissions');
$someMorePermissions = [
[
// permissions injected into the app from this plugin
]
];
$permissions = array_merge((array)$permissions, $someMorePermissions);
\Cake\Core\Configure::write('MyPermissions', $permissions);
允许每个插件动态 inject/manage 进入应用程序的权限。
我在此处使用此代码创建了一个 c9.io 环境 https://ide.c9.io/steinkel/users-35-custom-permissions
问题:如何从 Plugin/config 目录加载配置文件?
演示项目:https://github.com/CakePHPKitchen/CakeDC-Users-Permissions-Example
我正在使用 CakeDC/users 插件,它有一个 permissions.php 文件,它从中加载 RBAC 权限。据我所知,它要么加载用户插件配置文件夹中的默认权限文件,要么加载 app/config 文件夹中的 permissions.php 文件。
现在,对于我的应用程序框架,我在 app/config/permissions.php 中拥有大量权限,但是,我不想修改该文件,因为我将这样做 git从上游回购中提取,我想避免冲突。
所以我想做的是,在应用框架中 bootstrap
我愿意
foreach(Plugin::loaded() as $plugin) {
$path = Plugin::path($plugin) . 'config/permissions.php';
if(file_exists($path)) {
Configure::load($path, 'default', true);
}
}
但我收到以下错误....
Error: The application is trying to load a file from the /Users/jlroberts/Projects/JeffreyLRobertsCom/CakePHPKitchen/PluginDemos/plugins/SharpAgent/config/permissions plugin.
Make sure your plugin /Users/jlroberts/Projects/JeffreyLRobertsCom/CakePHPKitchen/PluginDemos/plugins/SharpAgent/config/permissions is in the /Users/jlroberts/Projects/JeffreyLRobertsCom/CakePHPKitchen/PluginDemos/plugins/ directory and was loaded.
关于如何从 Plugin/config 目录加载 permissions.php 文件有什么想法吗?
已编辑:您可以像现在一样从插件加载 permissions.php 文件,但更改 permissions.php 的内容以保留配置中定义的现有权限,例如:
config/permissions.php
$permissions = [
// add your app permissions here
[
// ...
],
];
// there are more permissions in this config key, defined across your plugins
$morePermissions = \Cake\Core\Configure::read('MyPermissions');
$allPerms = array_merge($permissions, $morePermissions);
return ['CakeDC/Auth.permissions' => $allPerms];
然后在每个插件中你可以有:
YOUR_PLUGIN/config/bootstrap.php
$permissions = \Cake\Core\Configure::read('MyPermissions');
$someMorePermissions = [
[
// permissions injected into the app from this plugin
]
];
$permissions = array_merge((array)$permissions, $someMorePermissions);
\Cake\Core\Configure::write('MyPermissions', $permissions);
允许每个插件动态 inject/manage 进入应用程序的权限。
我在此处使用此代码创建了一个 c9.io 环境 https://ide.c9.io/steinkel/users-35-custom-permissions