używam embedded controller uczynić formularz, który jest używany na wielu stronach:Przekierowanie z wbudowanym kontrolerem
Gałązka
{% render 'Bundle:Controller:someForm' %}
Controller
public function someFormAction()
{
// Some logic
...
if ($form->isValid()) {
...
$this->get('session')->setFlash('successful', "Woey!");
return $this->redirect($this->generateUrl('homepage'));
}
return $this->render('Bundle:Template:form.html.twig', array('form' => $form->createView()));
}
muszę przekierować z powrotem do strony głównej po tym, jak formularz został pomyślnie przesłany jako część post-redirect-get wzór. Jeśli użyję go tak, jak opisano powyżej, otrzymam wyjątek, ponieważ odpowiedź z wbudowanego kontrolera wynosiła 302 zamiast 200 (przynajmniej spodziewam się, że działa w ten sposób).
Czy w takim scenariuszu można normalnie przekierować? Czy podchodzę do sytuacji (z formularzem renderowanym na wielu stronach) pod zupełnie niewłaściwym kątem?
Hej Ondrej czy kiedykolwiek udało ci się znaleźć czysty sposób, aby to osiągnąć (lub inne pytanie dotyczące ponownego użycia formularza na innej stronie)? Jestem tylko ciekawy, ponieważ mam do czynienia z dokładnie tym samym problemem. Wydaje się, że może to być powszechny problem, jeśli masz formularz wyszukiwania w całej witrynie lub coś takiego. Jedyny sposób, jaki mogę wymyślić, to umieszczenie bezpośrednio na trasie someFormAction, a następnie użycie przekierowania z powrotem do oryginalnego adresu URL i przechowywanie zmiennych formularza w sesji ... wydaje się jednak trochę brudne. – Kasheen
Wygląda na to, że działa tak jak zamierzano. Używam tej samej techniki, którą opisałeś. Przeprowadziłem dalsze badania i nie można uzyskać dostępu do zakresu nadrzędnego z poziomu działania osadzonego. To by bardzo pomogło. –
Ok dzięki. Myślałem, że korzystanie z sesji może być drogą do zrobienia - jeśli spojrzysz na wbudowane uwierzytelnianie formularza logowania, robi to samo (zapisuje nazwę użytkownika i hasło w sesji), a następnie przekierowuje do jakiegoś adresu URL w konfiguracji lub poprzez pole ukryte (myślę). Byłoby o wiele czystsze, gdyby akcja osadzona mogła przekierować przez POSTing do macierzystej trasy działania, ale szkoda, że to nie działa. Dzięki za pomoc. :) – Kasheen