【发布时间】:2013-11-18 21:55:09
【问题描述】:
我正在开发一个 cakephp 插件。
我在Plugin/Permissions/Controller 内部创建了一个名为PermissionsController.php 的控制器
此控制器扩展了另一个控制器:PermissionManagerAppController.php 在同一目录中。
我想知道如何从另一个控制器(如 UsersController.php)调用插件内的函数
这是我的插件控制器现在是空的:
class PermissionsController extends PermissionManagerAppController {
public $uses = array('PermissionManager.Permission');
public function index() {
}
public function test($string) {
echo'<p>TEST: '.$string.'</p>';
}
}
我想从另一个控制器调用动作测试。
我试过这个:
App::uses('Permissions', 'PermissionsController.Controller');
class UsersController extends AppController {
public $name = 'Users';
public $scaffold;
public function beforeFilter () {
parent::beforeFilter();
$permissions = new Permissions();
$permissions->test('test');
}
}
我也试过
App::uses('Permissions', 'Permissions.Controller');
总是返回这个错误:
Fatal error: Class 'Permissions' not found
我试过了:
$this->permissions->test('test');
我找回了这个错误:
Fatal error: Call to a member function test() on a non-object
如何解决?
【问题讨论】:
-
考虑进行此类调用是不遵循 CakePHP 提出的 MVC 模式的指标。根据您的
test()方法提供的功能,它可能应该进入组件或模型,或者您应该扩展插件控制器。 -
好的,但如果我只写一个供应商文件?因为我没有写入数据库。 .还是只制作一个组件更好?我使用了控制器因为我必须进行重定向。 .如何在组件或供应商中做到这一点? @ndm
-
在不知道您要共享的确切功能的情况下,我无法向您推荐任何东西,您必须展示一些实际代码和/或描述此功能的用途。我现在只能说重定向可以从代码中的任何地方完成(尽管模型真的不应该这样做),所以你不限于控制器,如果功能与 CakePHP 相关并且不与数据库,然后a component可能是要走的路。
-
Weel,代码是一个简单的函数,其中参数是一个数组。在它里面有一个视图和 user_group 列表,在实际 URL 的花瓶中(通过的操作)我检查该用户(在其组中)是否可以访问该页面,如果不能重定向到另一个页面。 @ndm
-
听起来类似于 ACL 和 auth 组件所做的事情......从您提供的信息来看,我会说组件是要走的路。