gpt4 book ai didi

php - 为什么 CakePHP 将 _method 设置为 PUT 而不是 POST

转载 作者:行者123 更新时间:2023-12-02 14:11:54 25 4
gpt4 key购买 nike

我最近将 CakePHP 项目更新到了 2.4.5。

现在,某些表单设置输入隐藏 = PUT。但是,方法是POST。

我不知道为什么会这样。

这是表格:

  <?php echo $this->Form->create('User', array('url' => array('action' => 'new_password', $this->request->data['User']['forget_password'], 'admin' => false), 'autocomplete' => 'off')) ?>

<?php echo $this->Form->hidden('User.id') ?>

<fieldset>
<label class="block clearfix">
<span class="block input-icon input-icon-right">
<?php echo $this->Form->password('User.password', array('label' => false, 'div' => false, 'class' => 'form-control', 'placeholder' => 'Digite a nova senha')) ?>
<i class="icon-user"></i>
</span>
</label>

<label class="block clearfix">
<span class="block input-icon input-icon-right">
<?php echo $this->Form->password('User.password_confirmation', array('label' => false, 'div' => false, 'class' => 'form-control', 'placeholder' => 'Digite novamente a nova senha')) ?>
<i class="icon-user"></i>
</span>
</label>

<div class="space"></div>

<div class="clearfix">
<?php echo $this->Form->button('<i class="icon-key"></i> '. __('Enviar'), array('class' => 'width-35 pull-right btn btn-sm btn-success', 'escape' => false)) ?>
</div>

<div class="space-4"></div>
</fieldset>
<?php echo $this->Form->end() ?>

并且,操作:

/**
* new_password method
*
* @access public
* @param String $forget_password
* @return void
* @since 1.0
* @version 1.0
* @author Patrick Maciel
*/
public function new_password($forget_password)
{

$user = $this->User->findByForgetPassword($forget_password);

if ($user == false) {
$this->Session->setFlash(__('Link inválido'), 'flash/frontend/error');
$this->redirect('/');
}

$this->layout = 'login';

if ($this->request->is('post')) {
$this->User->set = $this->request->data;
if ($this->User->validates(array('fieldList' => array('id', 'forget_password', 'password', 'password_confirmation')))) {

// ...

} else {

// ...

}
}

$user['User']['password'] = null;
$this->request->data = $user;

}

所以...

  • 为什么 CakePHP 这样做?
  • 我可以,如果我将方法更改为验证 $this->request->is('put') 而 POST 会起作用,但是,我不想这样做。我想要一个 POST,而不是 PUT。
  • 我需要知道 CakePHP 如何以及何时在输入隐藏表单中设置 PUT、POST 或 DELETE。

观察:我不强制使用 'type' => 'POST' 方法,因为以前不需要这样做。

抱歉我的英语不好。

最佳答案

正如我从文档中可以推断的那样,当您向 View 提供数据并根据该数据创建表单时,Cake 会假设您想要编辑该表单,因此它会使其成为“放置”请求。

PUT method 是来自 REST 服务的东西,并且此方法与编辑内容相关,而不是 POST用于插入新内容的方法。因此,当 Cake 看到数据被传递到 View 时,它会将其解释为对其进行编辑。

因此,如果您想通过邮寄方式接收此表单,您有两个选择:通过传递选项'type' => 'post'来更改表单方法。 ,或在 Controller 上更改 if($this->request->is('put'))

查看文档以获取更多引用: http://book.cakephp.org/2.0/en/core-libraries/helpers/form.html#options-for-create

关于php - 为什么 CakePHP 将 _method 设置为 PUT 而不是 POST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21238682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com