Как проверить POST нестандартного действия в Cake PHP 1.3 - PullRequest
2 голосов
/ 09 октября 2011

Использование CakePHP 1.3

У меня есть контроллер с нестандартным именем действия - скажем:

class WidgetsController extends AppController {

function modifyColor($id = null) {
// Some code that modifies the background color of a widget 
}

}

и сопутствующее представление views / widgets / modifyColor.ctp

Шаблон modifyColor ПРЕДОСТАВЛЯЕТ действие:

echo $this->Form->create('User',array('url' => array('controller' => 'widgets', 'action' => 'modifyColor')));

Я получаю 404 на POST, поскольку компонент CakePHP Security пытается проверить форму, и я хотел бы иметь возможность проверить POST.

Кажется, что единственный способ заставить это работать - отключить проверку POST

 if ($this->action == 'modifyColor') {
    $this->Security->validatePost = false;
}

Это кажется плохим решением.

Как использовать компонент Security нанестандартное действие?позволенные действия, кажется, не работают Спасибо Дэнни

Отвечая на мой собственный вопрос.

A.Нет проблем с использованием любых именованных действий в CakePHP B. Концептуальная ошибка с CakePHP, связанная с использованием одной и той же функции для формы GET и формы POST

В форме GET у меня было следующее:

    if (empty($this->data)) {
          $this->data = $this->Widget->read(null, $id);
    }

Сама форма имела некоторый код, подобный следующему:

      echo $this->Form->input('id');
      echo $this->formView('Current color', 'CurrentColor');
      echo $this->formView('New color',     'NewColor');
      echo $this->formView('New background color', 'BackgrdColor');

Что было хорошо, за исключением того, что ни одно из этих полей не появилось в модели виджетов - и компонент CakePHP Security интерпретирует это как своего родаАтака XSRF - так как она находит поля в форме, которые не принадлежат модели.Вот почему:

 $this->Security->validatePost = false;

решил «проблему».

Правильное решение - просто не заполнять данные $ this-> моделью в действии контроллера и обрабатывать назначения полей наПОСТ:

function modcolor () {
    $this->layout = 'app_ui_listview';
    if (!empty($this->data)) {
          $id = $this->Session->read('Auth.User.id');
          $u = $this->Widget->read(null, $id);
                 // Assign fields from the form to the model....


    }
}

1 Ответ

0 голосов
/ 25 июля 2013

проблема в том, что вы пытаетесь передать URL, и вы тоже пытаетесь передать содержимое контроллера.

echo $this->Form->create('Widget', array('controller' => 'widgets', 'action' => 'modifyColor'));

или

echo $this->Form->create('Widget', array('url' => '/widgets/modifyColor'));

...