Его было несколько дней, когда я столкнулся с странным поведением с Symfony. У меня есть действие, в котором по какой-то причине мне нужно сохранить случайное значение как форму nonce в сеансе. Nonce передается шаблону ветви, который будет использоваться функцией ajax.Symfony2 | Почему действие контроллера выполняется дважды?
При отправке nonce в соответствующее действие проверяется разностное значение nonce, и поэтому запрос отклоняется.
Тесты показали, что действие выполняется дважды Symfony, поэтому новый nonce будет сохранен без обновления интерфейса. Я не мог определить причину.
После нескольких сотен испытаний выяснилось, что незначительные изменения в маршруте могут решить проблему, но я не уверен, что это окончательное решение, и я не смог найти основную причину.
Любой может помочь?
здесь является проблематичным кодом:
/**
*
* Condo Apartments management
*
* @Route("/condo/apartment")
*/
class ApartmentController extends Controller
{
/**
* Index Condo Apartments
*
* @Route("/edit/{id}/{apartment}", name="edit_apartment")
* @Route("/manage/{id}", name="manage_apartments")
* @ParamConverter("apartment", class="RimakishCondominiumBundle:Apartment", options={"mapping":{"apartment"="id"}})
* @Method({"GET", "POST"})
*/
public function indexApartmentsAction(Request $request, Complex $complex, Apartment $apartment=null){
$session = $request->getSession();
$nonce = sha1(uniqid());
if($session->has('nonce')){
$session->remove('nonce');
}
$session->set('nonce', $nonce);
Я только что изменил первый маршрут следующим образом, и она работала. Теперь мне нужно знать основную причину этой проблемы.
* @Route("/{id}/{apartment}/edit", name="edit_apartment")
Я использую Symfony 2.8 –
Самая простая причина - это, как правило, правильный ответ. Вероятно, ваша функция ajax дважды вызывает URL. Вы должны отлаживать полный запрос - это должно быть очень очевидно, если этот метод вызывается более одного раза через ajax. – Richard
Спасибо, Ричард, но это было частью моих тестов. Я поставил строгий мониторинг взаимодействия с сервером и клиентом, чтобы убедиться, что нет дополнительных запросов, отправленных с сервера на сервер. Я также проверил количество запросов Doctrine на стороне сервера, которые были идентичны. Помните, что ajax вызывает другое действие, и я изменил маршрут, чтобы исправить проблему. Если ajax был проблематичным, изменение маршрута не помогло. –