developer tip

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

copycodes 2020. 8. 29. 11:25
반응형

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'];

There is one trick with ParameterBag::get() method. You can set $deep parameter to true and access the required deep nested value without extra variable:

$request->request->get('form[some][deep][data]', null, true);

Also you have possibility to set a default value (2nd parameter of get() method), it can avoid redundant isset($form['some']['deep']['data']) call.


The field data can be accessed in a controller with: Listing 12-34

$form->get('dueDate')->getData();

In addition, the data of an unmapped field can also be modified directly: Listing 12-35

$form->get('dueDate')->setData(new \DateTime());

page 164 symfony2 book(generated on October 9, 2013)


I access the ticketNumber parameter for my multipart post request in the following way.

$data = $request->request->all();
$ticketNumber = $data["ticketNumber"];

I think that in order to get the request data, bound and validated by the form object, you must use :

$form->getClientData();


If you are newbie, welcome to Symfony2, an open-source project so if you want to learn a lot, you can open the source !

From "Form.php" :

getData() getNormData() getViewData()

You can find more details in this file.

참고URL : https://stackoverflow.com/questions/6916324/access-post-values-in-symfony2-request-object

반응형