我正在尝试使用CakePHP 3.0创建一个API客户端。我正在使用Http Client(http://book.cakephp.org/3.0/en/core-libraries/httpclient.html)来完成所有请求,但我不需要使用数据库,所以至少现在我不需要模型。假设你有:
现在来自CarsController我希望(从API)获得所有用户(使用方法进入UsersController)。如何使用CakePHP 3.0从CarsController访问UsersController?我读到的所有文档都只适用于具有数据库的应用程序(使用映射到db的模型)。谢谢!
答案 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