Cakephp - возникла проблема при отправке формы в действие контроллера плагина - PullRequest
1 голос
/ 11 июля 2010

Мне больше 3 лет, и я сталкиваюсь с несколько странной проблемой с отправкой формы для действия контроллера плагина (я использую плагин первый раз). Попробовав разные известные вещи я выкладываю этот.

Если перейти непосредственно к этому вопросу, то в форме "index" моего плагина search_controller.php моего плагина "форум":

echo $form->create("Search", array('url'=>array('controller' =>
'search', 'action' => 'index','plugin'=>'forum'),
'id'=>'searchFormMain'));
<input type="text" name="data[Search][keyword]" style="width:357px; margin-left:9px;"><p><span id="searchButton"><input
type="image" src="/img/button_search.jpg" style="height:40px;width:
136px;border:0;" class="handcursor"></span></p>
</form>

Поскольку я отправляю эту форму в действие «index» поискового контроллера Плагин форума, следующий код ничего не печатает:

public function index($type='') {
    if(!empty($this->data)) {
        pr($this->data);
        die;
    }
}

Хотя, если я попробую тот же код в beforeFilter того же контроллер, т.е. search_controller.php, он работает хорошо и печатает как следующим образом:

Array
(
    [Search] => Array
        (
            [keyword] => Hello Forum
        )

)

И, наконец, вот код beforeFilter (search_controller.php):

public function beforeFilter() {
    parent::beforeFilter();
    if(!empty($this->data)) {
        pr($this->data);
    }
}

Кстати, не имеет значения, если я закомментирую "parent :: beforeFilter ();" или же даже отключить использование $ моего контроллера (если они вам кажутся сомнительными) результат тот же, то есть элемент управления не входит в действие "index" в случае отправки формы пока работает нормально в случае страницы вызов. URL / действие на странице: http://localhost.rfdf.org/forum/search/index. Если я вызываю URL-адрес напрямую, он нормально загружает форму, но когда я ее отправляю, никогда не попадает в действие "index" контроллера, поэтому нет представления оказаны.

Если я попробую тот же набор кода из плагина "форум", то есть в обычном приложении, он будет работать нормально

Я пытался найти выход из этого в течение последних 3+ часов, но нет успеха Буду признателен за любую помощь в решении этой головоломки.

Ответы [ 3 ]

1 голос
/ 14 июля 2010

Наконец-то я понял!

Компонент Securty сбрасывал запрос в черную дыру всякий раз, когда ему не удавалось найти токен безопасности с данными формы.Я узнал, что компонент «Безопасность» «вмешивается» в метод $ form-> create () и помещает токен как скрытое поле при каждом вызове $ form-> create ().При отправке формы, сразу после beforeFilter и непосредственно перед тем, как войти в «действие» контроллера, он проверяет этот токен и просто умирает все в случае ошибки проверки.К сожалению, в журнале тортов нет ни сообщения об ошибке, ни записи.

В моем случае я создавал собственный тег, а не с помощью метода $ form-> create, поэтому токен не создавался, что приводиловся боль.

Я решил ее, поместив

$this->Security->validatePost = false; 

в конце beforeFilter.

Спасибо всем!

0 голосов
/ 13 июля 2010

Используете ли вы ACL или что-то подобное? В beforeFilter сделайте pr запроса. Посмотрите, какое действие запрашивается, чтобы убедиться, что запрос правильный

0 голосов
/ 13 июля 2010

Вы пытались вставить еще что-то в if(!empty($this->data)) и делать pr(), так как может быть, что ваш пост не пустой.

Либо это, либо формат вашего массива url неверен.

Из №759 http://api.cakephp.org/view_source/router/#line-757

$defaults = $params = array('plugin' => null, 'controller' => null, 'action' => 'index');

Итак, я думаю, вам нужен плагин первым?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...