我想在 Cakephp3 的插件中创建一个插件。我找到了Cakephp2的解决方案,但它似乎在Cakephp3中无效:
Is it possible to create a plugin inside a plugin with CakePHP?
我怎么能在Cakephp3中做到这一点?
答案 0 :(得分:1)
我将假设您的问题是在CakePHP 3.x应用程序中插入加载插件,而不是创建插件: - )
注意:这个答案假定您使用composer安装了Cake。
举个例子,假设我们想要创建一个插件主题,这个插件将包含其他插件,蓝色和红色强>
按照惯例,主题插件应包含在 your_app / plugins / Themes 和蓝色和红色插件可以分别包含在 your_app / plugins / Themes / plugins / Blue 和 your_app / plugins / Themes / plugins / Red 中。
在 your_app / config / bootstrap.php 中,添加以下内容:
Plugin::load('Themes', ['bootstrap' => true]);
(有关插件配置的信息,请参阅https://book.cakephp.org/3.0/en/plugins.html#plugin-configuration)
上面的代码告诉Cake加载Themes插件,并查找并加载插件的bootstrap文件。
如果您还没有这样做,请在 your_app / plugins / Themes / config / bootstrap.php 中创建Themes插件的引导程序文件,并使其看起来类似于:
<?php
use Cake\Core\Plugin;
// load the red and blue child plugins
Plugin::load('Themes/plugins/Red');
Plugin::load('Themes/plugins/Blue');
重要:由于您尝试手动编写插件而不是通过编辑器进行安装,因此您需要修改 your_app / composer.json 以包含某些内容像:
"autoload": {
"psr-4": {
"App\\": "src",
"Red\\": "./plugins/Themes/plugins/Red/src",
"Blue\\": "./plugins/Themes/plugins/Blue/src"
}
}
(有关自动加载插件类的详细信息,请参阅https://book.cakephp.org/3.0/en/plugins.html#autoloading-plugin-classes。)
现在,从 your_app / 中运行:
php composer.phar dumpautoload
(或等效命令,具体取决于计算机在计算机上的安装方式)
这告诉作曲家刷新自动加载缓存。如果您要检查 your_app / vendor / cakephp-plugins.php ,您应该会看到Themes插件文件夹的路径已添加到预先存在的插件路径列表中。
现在,在应用程序的主控制器中,您应该可以拥有以下内容:
public function initialize()
{
// load (supposedly-existing) components from the "Red" or "Blue" themes
// load GradientComponent of the "Red" theme
$this->loadComponent('Red.Gradient');
// load ColorComponent of the "Blue" theme
$this->loadComponent('Blue.Color');
// use what you asked for...
$this->Color->someMethod(['data']);
parent::initialize();
}
另外,要使用视图文件(您希望主题插件提供:-)):
public function beforeRender(Event $event)
{
// use the "home" layout from the Red theme
$this->viewBuilder()->setLayout('Themes/plugins/Red.home');
parent::beforeRender($event);
}