좋습니다. 이것은 초보자 질문이지만 어디에서도 답을 찾을 수 없습니다. Symfony2의 컨트롤러에서 내 양식 중 하나에서 POST 값에 액세스하고 싶습니다. 컨트롤러에는 다음이 있습니다.
public function indexAction()
{
$request = $this->get('request');
if ($request->getMethod() == 'POST') {
$form = $this->get('form.factory')->create(new ContactType());
$form->bindRequest($request);
if ($form->isValid()) {
$name_value = $request->request->get('name');
불행히도 $name_value
아무것도 반환하지 않습니다. 내가 뭘 잘못하고 있죠? 감사!
답변
심포니 2.2
이 솔루션은 2.3부터 사용되지 않으며 3.0에서 제거됩니다. 문서를 참조하십시오.
$form->getData();
양식 매개 변수에 대한 배열을 제공합니다.
symfony2 책 162 페이지 에서 (12 장 : 양식)
[…] 때로는 클래스없이 양식을 사용하고 제출 된 데이터의 배열을 다시 가져오고 싶을 수 있습니다. 이것은 실제로 정말 쉽습니다.
public function contactAction(Request $request) {
$defaultData = array('message' => 'Type your message here');
$form = $this->createFormBuilder($defaultData)
->add('name', 'text')
->add('email', 'email')
->add('message', 'textarea')
->getForm();
if ($request->getMethod() == 'POST') {
$form->bindRequest($request);
// data is an array with "name", "email", and "message" keys
$data = $form->getData();
}
// ... render the form
}
다음과 같이 요청 객체를 통해 직접 POST 값 (이 경우 “이름”)에 액세스 할 수도 있습니다.
$this->get('request')->request->get('name');
그러나 대부분의 경우 getData () 메서드를 사용하는 것이 더 나은 선택입니다. 양식 프레임 워크에 의해 변환 된 데이터 (일반적으로 객체)를 반환하기 때문입니다.
양식 토큰에 액세스 하려면 배열에서 요소를 제거 $postData = $request->request->get('contact');
하기 때문에 Problematic의 답을 사용해야합니다.
getData()
심포니 2.3
2.3부터 다음 handleRequest
대신 사용해야 합니다 bindRequest
.
$form->handleRequest($request);
답변
양식 게시 값은 요청의 양식 이름으로 저장됩니다. 예를 들어 getName()
“contact”를 반환하도록 ContactType () 메서드를 재정의 한 경우 다음을 수행합니다.
$postData = $request->request->get('contact');
$name_value = $postData['name'];
여전히 문제가있는 경우 일을하려고 var_dump()
에 $request->request->all()
모든 게시물의 값을 볼 수 있습니다.
답변
나를 위해 일한 것은 이것을 사용하는 것입니다.
$data = $request->request->all();
$name = $data['form']['name'];
답변
방법에는 한 가지 트릭이 있습니다 ParameterBag::get()
. 추가 변수없이 $deep
매개 변수 를 설정 true
하고 필요한 깊은 중첩 값에 액세스 할 수 있습니다 .
$request->request->get('form[some][deep][data]', null, true);
또한 기본값 ( get()
메소드의 두 번째 매개 변수 )을 설정할 수 있으므로 중복 isset($form['some']['deep']['data'])
호출을 피할 수 있습니다 .
답변
컨트롤러에서 필드 데이터에 액세스 할 수 있습니다. 목록 12-34
$form->get('dueDate')->getData();
또한 매핑되지 않은 필드의 데이터를 직접 수정할 수도 있습니다. 예제 12-35
$form->get('dueDate')->setData(new \DateTime());
164 쪽 symfony2 book (2013 년 10 월 9 일 생성)
답변
다음과 같은 방법으로 멀티 파트 게시 요청에 대한 ticketNumber 매개 변수에 액세스합니다.
$data = $request->request->all();
$ticketNumber = $data["ticketNumber"];
답변
양식 객체에 의해 바인딩되고 유효성이 검사되는 요청 데이터를 얻으려면 다음을 사용해야한다고 생각합니다.
$form->getClientData();