【问题标题】:Create instance of CakeRequest with type post - cakephp创建带有 post 类型的 CakeRequest 实例 - cakephp
【发布时间】:2014-07-22 10:15:17
【问题描述】:

这是同样的问题, How to programmatically create instance of CakeRequest?

就我而言,我想创建 post 请求

$request = new CakeRequest('/posts/view');
$request->data = array('key' => 'value');

我试过用这个

$request->addDetector('post', 
    array (
        'env' => 'REQUEST_METHOD',
        'value' => 'POST' 
    )
);

但是当我在下一页回显$this->request->method() 时,它总是输出GET。如何将请求类型设置为post

更新 蛋糕2.3版

更新2

我实际上想做的是:假设我有一个用于创建帖子的表单,其中包含标题和内容字段。现在,如果用户未登录,则在该表单下,我将显示登录/注册表单的输入(因此该页面上只有一个表单),因此用户将填写用户名/密码以登录或注册信息和如果他选择注册,请单击signin and publishsignup and publish 按钮。将帖子的信息保存在数据库表的临时行和/或会话中后,我需要对用户进行身份验证,因为我想为用户控制器的 signup and publish 操作发送帖子请求,并且不更改那些注册/登录功能(我正在检查发布请求)我想创建这个发布请求。我知道我也可以将登录/注册操作移动到某个组件,所以我可以从不同的控制器中使用它们,但是注册操作有很多其他部分,并且它使用其他功能和组件,我不想移动所有这些逻辑到组件中。

谢谢

【问题讨论】:

  • 为什么首先需要这样做?在测试用例之外,这感觉有点不对劲。如果你能解释你的意图,那么有人可能会找到更好的方法来解决你想要解决的任何问题。 ps,请务必提及您的确切 CakePHP 版本!
  • @ndm,感谢您的评论,我更新了 qsn

标签: cakephp post request


【解决方案1】:

您可以通过修改 CakeRequest 解析的 PHP 超全局变量来伪造发布请求:

$_POST = array('key' => 'value');
$_SERVER['REQUEST_METHOD'] = 'POST';
$request = new CakeRequest('/posts/view');

但是这是一种黑客行为,应该避免。我无法想象你会想要使用这样的东西的场景。

【讨论】:

  • 是的,我想到了这个,但正如你所说,这是一个肮脏的黑客,所以我想这可能是一种蛋糕方式。只是在我的代码中需要,虽然有解决方法,但这会更好。感谢您的回复。
猜你喜欢
  • 1970-01-01
  • 2012-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多