[php] Symfony2 요청 객체의 POST 값에 액세스

좋습니다. 이것은 초보자 질문이지만 어디에서도 답을 찾을 수 없습니다. 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();