2010-07-11 3 views
1

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

Движение прямо в дело здесь есть форма в моем «форуме» 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> 

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

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); 
    } 
} 

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

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

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

ответ

1

Я получил его, наконец!

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

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

я решил его путем размещения

$this->Security->validatePost = false; 

в конце beforeFilter.

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

0

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

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

От ln759, http://api.cakephp.org/view_source/router/#line-757

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

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

+0

Это мой beforeFilter код: общественная функция beforeFilter() {\t \t \t \t родитель :: beforeFilter(); \t \t $ this-> Auth-> allowedActions = array ("*"); \t \t если (! Пустые ($ this-> данные)) \t { \t \t \t пр ($ this-> PARAMS); \t \t} \t} И это на вершине мой "индекс" действия пользователя: (! Пусто ($ this-> данные)) \t \t если { \t \t \t пр ($ this-> данные) ; \t \t} \t \t еще { \t \t \t печати ("Пустой"); \t \t} В случае отправки формы внутри «индекса» он не печатает данные $ this-> или «Empty». Это просто не входит в действие «индекса» в случае отправки форума. Пожалуйста, проверьте вывод для $ this-> params, напечатанных внутри beoforeFilter, в следующем комментарии для любого сбоя URL-адреса. –

+0

Массив ( [передать] => Array() [имени] => Array() [плагин] => Форум [контроллер] => Поиск [действие] => индекс [URL] => Массив ( \t \t \t [доб] => HTML \t \t \t [URL] => форум/поиск/индекс \t \t \t) [форма] => Array() [данные] => Array ( \t \t \t \t [Поиск] => Array ( \t \t \t \t \t \t \t [ключевое слово] => Hello Forum \t \t \t \t \t \t \t [расширенный] => 0 \t \t \t \t \t \t \t) \t \t \t \t [Тема] => Массив ( \t \t \t \t \t \t \t [силы] => 0 \t \t \t \t \t \t \t [категория] => \t \t \t \t \t \t \t [название] => \t \t \t \t \t \t \t [Автор развивает] = > \t \t \t \t \t \t \t [SortBy] => Актуальность \t \t \t \t \t \t \t [results_per_page] => 10 \t \t \t \t \t \t \t) \t \t \t) ) –

0

Вы используете ACL или любой другой подобный? В файле beforeFilter выполните запрос запроса. См., Какое действие запрашивается, чтобы убедиться в правильности запроса.

Смежные вопросы