我目前正在使用CakePHP 2.5.2我想集成一个插件来管理用户。我第一次测试它作为一个单一的CakePHP应用程序(控制器在app/controller,模型在app/model,视图在app/view/Users): 是ok的。
我现在正试图将其转换为插件:我已经创建了一个文件夹UserManager在app/plugin.
当我试图去我的控制器之一的url时,我得到消息丢失的控制器。所有插件都在Bootstrap.php (CakePlugin::loadAll();
)中加载。
我试图找到类似的问题和解决方案,但没有一个与我的问题相关(我尝试了一些建议的解决方案,但根本原因不同。
当我在Include部分查看DebugKit时,我可以观察到我的DebugKit插件被加载,但不是我的其他插件…
谁能给我一个解决办法?提前谢谢。(请在下面找到代码的描述)
我添加了控制器,模型和视图如下(骨架由Bake生成并勾选:ok):
1) app/plugin/model中的模型
UserManagerAppModel.php
<?php
App::uses('AppModel', 'Model');
class UserManagerAppModel extends AppModel {
}
?>
User.php
<?php
App::uses('AuthComponent', 'Controller/Component');
class User extends UserManagerAppModel {
...
}
?>
2) app/plugin/controller
中的控制器UserManagerAppModel.php:
<?php
App::uses('AppController', 'Controller');
class UserManagerAppController extends AppController {
}
?>
UserController.php:
<?php
class UsersController extends UserManagerAppController {
public $uses = array('UserManager.User');
public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow('*');
}
public function login() {
}
...
?>
3) app/plugin/view/Users中的视图
没什么特别的。
我认为这是你的路径名称的问题:他们必须包括插件名称。另外,按照惯例,文件夹名称必须以大写字母开头。例如,UserManagerAppModel
必须在以下文件中:app/Plugin/UserManager/Model/UserManagerAppModel.php
.
参见http://book.cakephp.org/2.0/en/plugins.html#creating-your-own-plugins
因为我相信已经在你的AppController loginAction中包含了AuthComponent设置,请注意调用并检查插件的名称。在我的情况下,插件名称是Barracuda,错误不会发生,直到调用Barracuda,第一个字母是小写的。
'loginAction' => array(
'controller' => 'users',
'action' => 'login',
'plugin' => 'Barracuda'
),
'loginAction' => array(
'controller' => 'users',
'action' => 'login',
'plugin' => 'barracuda'
),