【问题标题】:CakePHP: Use function from Plugin Controller in Main ControllerCakePHP:在主控制器中使用插件控制器中的功能
【发布时间】:2013-04-13 11:42:31
【问题描述】:

这应该很简单,但我花了一个多小时试图弄清楚,所以感谢您的帮助。

我有一个 CakePHP 插件 Usermgmt,控制器位于此处:

./app/Plugin/Usermgmt/Controller/UsersController.php

我正在尝试从我的一个主控制器中调用该控制器中的函数userIdFromUsernameAndPassword(),使用类似:

$userID = $this->UsersController->userIdFromUsernameAndPassword( 'user@host.com','pass' );

我需要导入/包含/初始化什么才能使其正常工作?

我尝试了各种导入语句,例如文件顶部的App::uses('UsersController', 'Usermgmt.Controller');,但没有得到任何结果。

谢谢!

【问题讨论】:

    标签: php cakephp cakephp-2.3


    【解决方案1】:

    简答:使用 OOP 并扩展其他控制器。还要了解 MVC。你不应该在另一个控制器中使用一个控制器的方法,在 CakePHP 中这应该作为一个组件来完成。它们可以在控制器之间共享。 Check the CakePHP Book.

    插件名称和方法名称也表明这是一个坏插件。这听起来好像有人不知道 CakePHP 的 Auth 组件。再次,检查 AuthComponent 的书。 You want a custom authentication adapter.

    如果用户已登录,您可以通过调用 $this->Auth->user('id') 来获取其 id。阅读关于 Auth 的章节。如果您想要一个正确完成的用户插件,请查看:CakeDC Users

    【讨论】:

    • 我对 OOP 和 MVC 的了解来自 Objective-C 和 Python,因此我对这些方法与 PHP 之间的差异感到有些困惑。一年前,当我开始这个项目时,我查看了 CakeDC 用户,但要么我无法让它工作,要么它还没有完全准备好。我知道如何通过调用 $this->Auth->user('id') 来获取用户 ID,但这是针对 API 的,因此用户不会登录(用户/密码随 Post 请求一起传递) .
    • 我意识到从另一个控制器调用一个控制器不是在这里做事的正确方法。那么,使用用户/密码响应 Post 调用、检查这些值并为他们提供来自不同模型的信息的正确方法是什么?
    • @nickv2002 在我看来userIdFromUsernameAndPassword() 应该是User model 的方法,例如访问它应该类似于ClassRegistry::init('Usermgmt.User')->userIdFromUsernameAndPassword('user@host.com','pass');,您不应该使用另一个 Controller 从 MVC 中的 Model 获取数据。 (可选)将 if 包装在 Component 中以提供建议的可重用代码。
    • 您拥有的是无状态身份验证,这仍然可以通过身份验证组件和身份验证适配器来完成。正如我之前所说,请阅读本书的 Auth 章节。 ;)
    • 谢谢大家,我重写了它,以便大部分动作发生在一个组件中,现在它可以工作了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    相关资源
    最近更新 更多