Jestem bardzo nowy w symfony. W innych językach, takich jak Java i innych, których mogę użyć, request.getParameter('parmeter name')
aby uzyskać wartość.
Czy jest coś podobnego, co możemy zrobić z symfony2.
Widziałem kilka przykładów, ale żaden nie działa dla mnie. Załóżmy, że mam pole formularza o nazwie nazwa użytkownika . W akcji formularza próbowałem użyć czegoś takiego:
$request = $this->getRequest();
$username= $request->request->get('username');
Próbowałem też
$username = $request->getParameter('username');
i
$username=$request->request->getParameter('username');
Ale żadna z opcji nie działa, jednak następujące działały dobrze:
foreach($request->request->all() as $req){
print_r($req['username']);
}
Gdzie robię źle stosując getParameter()
metodę. Każda pomoc będzie mile widziana.
$request->request-get()
powinno być$request->request->get()
. Czy to możliwe?get()
jest to poprawna metoda i (b) włączyłeś powiadomienia PHP, abyś mógł zobaczyć, czy są jakieś problemy? (c) Czy Symfony 2 ma pasek narzędzi do debugowania, taki jak Symfony 1, więc możesz sprawdzić, czy popełniłeś jakieś błędy?Odpowiedzi:
Nazewnictwo nie jest aż tak intuicyjne:
źródło
$_GET
dane to dane z ciągu zapytania (w ogóle nie jestGET
wymagane żądanie), a$_POST
dane to dane z treści żądania (może to nie byćPOST
żądanie, może byćPUT
).$request->get
i$request->post
byłoby prostsze.Robię to jeszcze prościej:
Inną opcją jest wprowadzenie parametrów do definicji funkcji akcji:
który następnie zakłada, że zdefiniowałeś {foo} i {bar} jako część wzorca adresu URL w pliku routing.yml:
źródło
foo
parametr zarówno w ciągu zapytania, jak i w treści POST, który zostanie zwrócony przez$request->get('foo')
?$request->get('foo');
dla WSZYSTKICH worków (kolejność to: ŚCIEŻKA, GET, POST). Niemniej jednak$request->request->get('foo');
działa tylko w przypadku torby POST. Wreszcie pierwsza ($request->get()
) nie jest zalecana, jeśli wiemy, gdzie są dane (GET / POST).Możesz użyć następującego kodu, aby uzyskać wartości pól formularza
Lub Możesz również uzyskać wszystkie wartości formularza jako tablicę za pomocą
źródło
próbować
sprawdź nazwę atrybutu pola formalnego
źródło
Wewnątrz kontrolera:
źródło
$this->getRequest()
jest przestarzały, na korzyść wprowadzenia żądania do działania kontrolera, np .:public function showAction(Request $request, $id);
Twoje opcje:
$request->request->get('param')
($_POST['param']
) lub$request->query->get('param')
($_GET['param']
)Więcej informacji
OptionsResolver
- http://symfony.com/doc/current/components/options_resolver.htmlźródło
Ponieważ teraz
$this->getRequest()
metoda jest przestarzała, musisz wstrzyknąćRequest
obiekt do akcji kontrolera w następujący sposób:po tym możesz użyć jednego z poniższych.
Jeśli chcesz pobrać dane POST z żądania, wykonaj następujące czynności:
ale jeśli chcesz pobrać dane GET z żądania, użyj tego:
źródło
Możesz to zrobić:
Czasami, gdy atrybuty są chronione, nie można uzyskać dostępu, aby uzyskać wartość dla wspólnej metody dostępu:
(POCZTA)
(DOSTAĆ)
(OGÓLNY)
źródło
$clientName = $request->query->get('clientName','any');
Większość przypadków, takich jak uzyskanie ciągu zapytania lub parametrów formularza, jest omówiona w odpowiedziach powyżej.
Podczas pracy z surowymi danymi, takimi jak nieprzetworzony ciąg JSON w ciele, który chcesz podać jako argument
json_decode()
,Request::getContent()
można zastosować metodęDodatkowe przydatne informacje na temat żądań HTTP w Symfony można znaleźć w dokumentacji pakietu HttpFoundation .
źródło
źródło
Request
parametru? (np. w prywatnych funkcjach klasy kontrolera na przykład)Dzięki, możesz również użyć powyższego kodu
źródło
Jeśli potrzebujesz uzyskać wartość z wyboru, możesz użyć:
źródło
Spróbuj tego, to działa
pozdrowienia
źródło
źródło
Dla użytkowników Symfony 4:
źródło
# www.example / register / admin
źródło