использование состояния формы->set() внутри обратного вызова ajax, но не может вернуть значение за пределами обратного вызова


Я хочу добавить некоторую произвольную переменную, чтобы сохранить ее в form_state и использовать ее снова, поэтому в одной из моих функций обратного вызова ajax я установил свойство с именем var:

public function MyFunctionCallback(array &$form, FormStateInterface &$form_state) {
....
$terms = array('1'=>'one','2'=>'two');
$form_state->set('var', $terms);
....
}

Это работает, и массив хранения form_state содержит элемент var

К сожалению, при попытке вернуть var обратно в другую функцию обратного вызова он возвращает значение null. на самом деле при отладке массив хранения form_state пуст

public function MyOtherFunctionCallback(array &$form, FormStateInterface &$form_state) {
....
$terms = $form_state->get('var');
....
}
Author: Emad Karhely, 2016-09-23

3 answers

Вы не можете изменить $form или $form_state в обратном вызове ajax. После обратного вызова больше нет кода, который мог бы это обработать. Единственная цель обратного вызова ajax - подготовить и вернуть ответ ajax.

 0
Author: 4k4, 2016-09-24 08:13:57

Как 4k4 упоминалось, вы не можете изменить состояние формы внутри функции обратного вызова ajax.

Однако вы можете изменить его в функции отправки кнопки ajax.

$form['ajax_button']['#submit'][] = [static::class, 'ajaxButtonSubmit'];

public static function ajaxButtonSubmit($form, $form_state) {
  //...
}
 2
Author: Eyal, 2017-04-13 12:47:02

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

Вместо переменных сеанса PHP вы можете попытаться изменить логику и переместить свой код в обратный вызов проверки для всей формы. И оттуда вы можете установить значения состояния формы.

$form['#validate'][] = '::handleInputs';

Поскольку, вероятно, то, что вам нужно, - это часть проверки пользовательских вводов и отображения конкретных параметры зависят от вводимых пользователем данных.

 0
Author: Saud Alfadhli, 2019-08-12 16:45:55