2015-09-30 4 views
2

У меня есть два маршрута/альфа и/бета, настроенные в yml. В alphaAction в flashbag помещается уведомление и происходит перенаправление. В betaAction читается уведомление в flashbag.Почему контроллер дважды выполняется (flashbag, redirectoroute)?

Иногда я получаю 2 уведомления при попытке/alpha в браузере, и иногда я получаю одно уведомление.

Может кто-нибудь объяснить, что происходит, что я делаю неправильно.

public function alphaAction() 
{ 
    $this->get('session')->getFlashBag()->add("notice",mt_rand()); 
    return $this->redirectToRoute("beta"); 
} 

public function betaAction() 
{ 
    $notices= $this->get('session')->getFlashBag()->get('notice');  
    return new Response(implode($notices,", ")); 
} 
+0

'$ this-> получить ('сессии') -> getFlashBag() -> Add ("уведомление", mt_rand());' в Symfony 2.6 и выше, может быть сделано как '$ this-> addFlash ('notice', mt_rand()); 'Вы уверены, что раз, когда вы получаете его дважды, это происходит не потому, что произошла ошибка, и вы только что обновили браузер? – Rooneyl

+0

Я пробовал сокращенную нотацию (addFlash) и все равно получаю аналогичные результаты. Я не обновляюсь в браузере, я просто перепечатываю http: // localhost: 8000/alpha и нажимаю клавишу Enter. Результат в/beta составляет от 1 до 3 (разных) случайных чисел. –

+0

Вы когда-нибудь видели повторяющиеся числа на 'betaAction()'? – Ryan

ответ

0

Используя метод add я мог воспроизвести вопросы вы описали. Это можно исправить с использованием метода set, а не метода add (или setFlash).

public function alphaAction() 
{ 
    $this->get('session')->getFlashBag()->set("notice",mt_rand()); 
    return $this->redirectToRoute("beta"); 
} 

public function betaAction() 
{ 
    $notices= $this->get('session')->getFlashBag()->get('notice');  
    return new Response(implode($notices,", ")); 
} 
+0

Благодарим вас за ответ. Вы уверены, что alphaAction теперь выполняется только один раз? Может быть, alphaAction все еще выполняется несколько раз, а значение в уведомлении перезаписывается? –

+0

Если вы сейчас попытаетесь получить доступ к бета-маршруту напрямую, вы получите ничего, что означает, что альфа не называется – Rooneyl

+0

Я все еще считаю, что альфа выполняется дважды. Я попробовал записывать сгенерированные числа с помощью монолога и получить два числа в app/dev.log вместо одного. $ a = mt_rand(); $ logger = $ this-> get ('logger'); $ logger-> debug ("_ * _ *". $ A); $ this-> get ('session') -> getFlashBag() -> set ("notice", $ a); return $ this-> redirectToRoute ("beta"); –

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