1

在添加管理员前缀/路由之前,一切正常......

目前,我有一个带有以下功能的 QuestionsController.php 文件:

public function admin_add() {
    if ($this->request->is('post') ) {
        $this->Question->create();
        if ($this->Question->save($this->request->data)) {
            $this->Session->setFlash('Your question has been saved.');
            $this->redirect(array('action' => 'index'));
        } else {
            $this->Session->setFlash('Unable to add your question.');
        }
    } else {
            $this->Session->setFlash('Not post.');
    }

}

这是 /views/Questions/admin_add.php 的内容:

<h2>Add a question</h2>
<?php
echo $this->Form->create('Question');
echo $this->Form->input('nickname');
echo $this->Form->input('content');
echo $this->Form->input('option1');
echo $this->Form->input('option2');
echo $this->Form->input('option3');
echo $this->Form->end('Save question');

echo $this->Html->link('Cancel', array('controller' => 'questions', 'action' => 'index'));

注意到控制器底部的 setFlash("Not post.") 了吗?每次单击“保存问题”按钮时,我都会看到该消息?为什么?

更新 我们已经确定请求方法是get,这就解释了为什么它不起作用。但现在真正的问题是为什么会这样get。我很确定这是post在添加管理员前缀之前。

4

2 回答 2

1
<?php echo $this->Form->create('Question', array( 'type' => 'POST' ) ); ?>

试试看:)

您还可以向该$options数组添加其他选项,例如操作、编码、默认值、url 等。

更新

根据您的评论,我认为您是在告诉我们 GET 是由控制器确定的。检查源代码中的 FORM 以查看是否type="post"存在,或者是否显示type="get".

如果它正在发布,那么您将在发布时被重定向,类似于PRG模式。这就是你失去它的地方。发布表单后,您最终会使用哪个 URL?

于 2013-04-11T00:03:28.580 回答
1

如果它到达 if 块的后半部分,则不会发布请求。

要找出它是什么,只需在 if 块之前添加以下代码:

debug(CakeRequest::method());

(假设您的调试级别为 2 用于开发模式)

然后,一旦你知道发生了什么样的请求,就检查一下。

于 2013-04-10T23:57:08.557 回答