如何从另一个控制器操作中访问控制器操作?

时间:2015-12-30 20:35:53

标签: php cakephp cakephp-3.0

我正在尝试使用CakePHP 3.0创建一个API客户端。我正在使用Http Client(http://book.cakephp.org/3.0/en/core-libraries/httpclient.html)来完成所有请求,但我不需要使用数据库,所以至少现在我不需要模型。假设你有:

  • UsersController
  • CarsController

现在来自CarsController我希望(从API)获得所有用户(使用方法进入UsersController)。如何使用CakePHP 3.0从CarsController访问UsersController?我读到的所有文档都只适用于具有数据库的应用程序(使用映射到db的模型)。谢谢!

3 个答案:

答案 0 :(得分:5)

你不这样做!

如果你需要访问另一个控制器,并且这不能通过继承在逻辑上解决,那么这表明你做错了,并且你计划违反CakePHP建议的MVC原则。

如果您需要在其他独立控制器之间共享功能,那么您应该考虑将该功能移动到components(哪种代表服务层),服务类(可能是模型层的一部分)或模型。

因为在CakePHP 3.x中模型,或者更好地说模型层的表类,是高度以数据库为中心的,并且你不想使用数据库,你应该选择前两个选项中的一个,即组件或服务类,但它确实取决于,您的模型层当然可以保留任何业务功能,甚至不会强制表类与数据库通信,它的数据源可以是您实现它的任何内容。

答案 1 :(得分:1)

如果确实需要,可以使用Cake\Routing\RequestActionTrait::requestAction()方法

$this->requestAction([
    'controller' => 'Users', 
    'action' => 'fancyAction'
]);

阅读文档(http://book.cakephp.org/3.0/en/development/routing.html#requestactiontrait

中的更多内容

答案 2 :(得分:0)

就个人而言,我不知道为什么蛋糕不会让这更容易获得。作为组件,不能完成工作,因为您无法访问所有类等。因此,大多数还原为$this->requestAction,具体取决于需要,另一个选项是将action1重定向到action2 - action2将是某种东西喜欢

public function action2($controller=null, $action=null){

,然后做它应该做的事情并重定向回到行动1