CakePHP 2.0, обнаруживающий тип запроса, ведет себя странно - PullRequest
4 голосов
/ 26 января 2012

Посмотрите на этот код:

   if ($this->request->is('post')){
        $this->request->data['Profile']['userId'] = $this->Auth->user('id');
        if ($this->Profile->save($this->request->data)){
            $this->Profile->setPermissions($this->Profile->id, $this->request->data['Permission']);
            $this->NFSSession->setSuccessMessage('Your profile has been updated.');
        }else{
            $this->NFSSession->setSuccessMessage('There was a problem updating your profile.  Please try again.');
        }
    }else{
        echo 'Not a post request!!?!?!?!?!';
        debug($this->request->data);
    }

Когда я отправляю форму в соответствующем представлении для этого действия, оказывается, что $ this-> request-> is ('post') возвращает false. Другой конец оператора if / else выполняется. Вот странный бит - там есть данные POST, и мой вызов для отладки ($ this-> request-> data) выдает ожидаемые данные!

Вот данные, которые передаются:

Array
(
[Profile] => Array
    (
        [aboutMe] => Hey there
    )

[Permission] => Array
    (
        [Profile] => Array
            (
                [aboutMe] => 1
            )

    )

)

Теперь я, конечно, мог бы просто изменить $ this-> request-> is ('post') на! Empty ($ this-> request-> data), но это не решило бы проблему.

Так что с моим кодом что-то не так? Что происходит?

Спасибо!

Ответы [ 2 ]

13 голосов
/ 26 января 2012

Попробуйте использовать это:

if ($this->request->is('post') || $this->request->is('put'))

http://cakephp.lighthouseapp.com/projects/42648/tickets/2353

1 голос
/ 28 января 2015

Когда вы создаете форму в CakePHP, FormHelper :: create () будет использовать информацию в $ this-> request-> data, чтобы определить, является ли ваша форма формой добавления или формой обновления.Если первичный ключ вашей модели находится в ваших данных, создается скрытое поле ввода для переопределения метода HTTP по умолчанию.Это происходит потому, что, вероятно, вы что-то обновите.

<form id="RecipeEditForm" method="post" action="/recipes/edit/5">
    <input type="hidden" name="_method" value="PUT" />
    ...
</form>

Чтобы проверить, была ли отправлена ​​ваша форма при создании или обновлении чего-либо, вы можете передать массив в CakeRequest :: is () следующим образом:

if($this->request->is(array('post','put')) {
    //...
}

Дополнительная информация: http://book.cakephp.org/2.0/en/core-libraries/helpers/form.html#creating-forms

...