symfony2에서 요청 매개 변수를 얻는 방법


203

나는 심포니를 처음 접했습니다. java 및 다른 언어와 같은 다른 언어에서는 request.getParameter('parmeter name')값을 얻는 데 사용할 수 있습니다 .

symfony2로 할 수있는 것과 비슷한 것이 있습니까?
나는 몇 가지 예를 보았지만 나를 위해 아무것도 효과가 없다. username 이라는 이름 의 양식 필드가 있다고 가정하십시오 . 양식 작업에서 다음과 같은 것을 사용하려고했습니다.

$request = $this->getRequest();
$username= $request->request->get('username'); 

나는 또한 시도했다

$username = $request->getParameter('username');

$username=$request->request->getParameter('username');

그러나 어떤 옵션도 작동하지 않습니다.

foreach($request->request->all() as $req){
    print_r($req['username']);
}

getParameter()방법 을 사용할 때 내가 잘못하고있는 곳은 무엇입니까? 도움을 주시면 감사하겠습니다.


두 번째 줄에 오타 $request->request-get()가 있습니다 $request->request->get(). 그럴 수 있습니까?
11

코드에서 동일하게 작성했습니다. 여기서 누락되었습니다. 오타가 죄송하지만 여전히 작동하지 않습니다.
Abdul Hamid

(a) 매뉴얼을 확인 get()하여 올바른 방법 인지 확인 하고 (b) PHP 알림을 켜서 문제가 있는지 확인 했습니까? (c) Symfony 2에는 symfony 1과 같은 디버그 도구 모음이 있으므로 오류가 발생했는지 확인할 수 있습니까?
12

이름과 사용자 이름을 혼동하십니까?
greg0ire

자세한 내용은 여기에 있습니다 : roadtodev.com/recuperer-objet-request-de-symfony
토마스 Bredillet

답변:


416

명명이 그렇게 직관적 인 것은 아닙니다.

use Symfony\Component\HttpFoundation\Request;

public function updateAction(Request $request)
{
    // $_GET parameters
    $request->query->get('name');

    // $_POST parameters
    $request->request->get('name');

46
PHP가 사용하는 것과는 다르지만 실제로는 더 의미가 있습니다. $_GET데이터는 쿼리 문자열 (아무 데이터입니다 GET전혀 필요 요청) 및 $_POST요청 본문에서 데이터의 (a 될 필요가 없습니다 수있는 데이터 POST, 하나 요청을 할 수있다 PUT).
igorw

5
시도한 $ request-> query-> get ( 'name'); 그러나 그것은 또한 작동하지 않습니다.
Abdul Hamid

7
PUT 요청에서 매개 변수를 얻으려면 어떻게해야합니까?
Tjorriemorrie

10
아주 이상한 여기에 이름, 확실 $request->get하고 $request->post간단 할 것입니다.
crmpicco

3
igorw의 코멘트는이 기묘한 명명 규칙에 명확성을 제공합니다
Dheeraj

32

나는 심지어 더 간단합니다.

use Symfony\Component\HttpFoundation\Request;

public function updateAction(Request $request)
{
    $foo = $request->get('foo');
    $bar = $request->get('bar');
}

다른 옵션은 매개 변수를 조치 함수 정의에 도입하는 것입니다.

use Symfony\Component\HttpFoundation\Request;

public function updateAction(Request $request, $foo, $bar)
{
    echo $foo;
    echo $bar;
}

그러면 routing.yml 파일에서 {foo} 및 {bar}를 URL 패턴의 일부로 정의했다고 가정합니다.

acme_myurl:
    pattern:  /acme/news/{foo}/{bar}
    defaults: { _controller: AcmeBundle:Default:getnews }

첫 번째 예 foo에서 쿼리 문자열과 POST 본문 모두에 매개 변수 가있는 경우 어떤 매개 변수가 $request->get('foo')?
Dimitry K


이것은 최선의 답변입니다
steampowered

7
아닙니다. 방법 자체의 문서는 특정 모음을 통해 GET / POST 매개 변수에 액세스하는 것보다 무겁기 때문에 사용하지 않는 것이 좋습니다.
jurchiks

1
답은 $request->get('foo'); 모든 가방에 대한 올바른 작동입니다 (주문은 PATH, GET, POST). 그럼에도 불구하고 $request->request->get('foo');POST bag에서만 작동합니다. 마지막으로, $request->get()데이터가 어디에 있는지 (GET / POST) 알고 있으면 첫 번째 ( )는 권장되지 않습니다.
F2000

18

다음 코드를 사용하여 양식 필드 값을 얻을 수 있습니다.

use Symfony\Component\HttpFoundation\Request;

public function updateAction(Request $request)
{
    // retrieve GET and POST variables respectively
    $request->query->get('foo');
    $request->request->get('bar', 'default value if bar does not exist');
}

또는 다음을 사용하여 모든 양식 값을 배열로 가져올 수도 있습니다.

$request->request->all()

3
$ request-> request-> all ()은 나를 위해 일하고 있지만 $ request-> query-> get ( 'foo'); 작동하지 않는다.
Abdul Hamid

13

시험

$request->request->get('acme_demobundle_usertype')['username']

공식 필드의 속성 이름을 검사하십시오.


1
+1, 나는 모든 응답 중 하나만 실제로는 명백하지 않은 것을 진술합니다. 심포니의 폼 빌더를 사용하여 자동으로 폼을 만들면 symfony는 폼 필드의 이름을 원하는 것보다 더 많이 변경합니다 배고 있다. like name = "acme_demobundle_userform [field_name]"
userfuser

여기에 언급 한 구문은 PHP 5.3.10에서 작동하지 않습니다. 이를 지원하는 최소 버전은 무엇입니까?
Justinas Lelys

2
@justinasLelys 시도 $ userType = $ request-> request-> get ( 'acme_demobundle_usertype'); $ username = $ userType [ '사용자 이름'];
sleep-er

@JustinasLelys 구문은 PHP 5.4
COil

"사용자 이름"을 정의 할 수 없습니다. "??"로 확인하는 것이 좋습니다. 먼저.
Viktor Sydorenko

9

컨트롤러 내부 :

$request = $this->getRequest();
$username = $request->get('username');

6
심포니의 최신 버전으로, $this->getRequest()컨트롤러 액션에 요청을 주입의 찬성되지 않으며, 예를 들면 :public function showAction(Request $request, $id);
아담 Elsodaney

9

귀하의 옵션 :

  1. 단순한:
    • $request->request->get('param')( $_POST['param']) 또는
    • $request->query->get('param')( $_GET['param'])
  2. 모든 유효성 검사, 가치 변환 및 오류 및 기타 여러 기능이 포함 된 양식 렌더링이 포함 된 우수한 Symfony 양식 :
  3. 사이에있는 것 (아래 예 참조)
<?php
/**
 * @Route("/customers", name="customers")
 *
 * @param Request $request
 * @return Response
 */
public function index(Request $request)
{
    $optionsResolver = new OptionsResolver();
    $optionsResolver->setDefaults([
        'email' => '',
        'phone' => '',
    ]);
    $filter = $optionsResolver->resolve($request->query->all());

    /** @var CustomerRepository $customerRepository */
    $customerRepository = $this->getDoctrine()->getRepository('AppBundle:Customer');

    /** @var Customer[] $customers */
    $customers = $customerRepository->findFilteredCustomers($filter);

    return $this->render(':customers:index.html.twig', [
        'customers' => $customers,
        'filter' => $filter,
    ]);
}

추가 정보 -httpOptionsResolver : //symfony.com/doc/current/components/options_resolver.html


8

이제 $this->getRequest()메소드가 더 이상 사용되지 않으므로 다음 Request과 같이 컨트롤러 작업에 객체 를 주입해야합니다 .

public function someAction(Request $request)

그 후 다음 중 하나를 사용할 수 있습니다.

요청에서 POST 데이터를 가져 오려면 다음을 사용하십시오.

$request->request->get('var_name');

그러나 요청에서 GET 데이터를 가져 오려면 다음을 사용하십시오.

$request->query->get('var_name');

6

당신은 이것을 할 수 있습니다 :

$clientName = $request->request->get('appbundle_client')['clientName'];

속성이 보호 될 때 공통 액세스 방법에 대한 값을 얻기 위해 액세스 할 수없는 경우가 있습니다.

(게시하다)

 $clientName = $request->request->get('clientName');

(가져 오기)

$clientName = $request->query->get('clientName');

(일반적인)

$clientName = $request->get('clientName');

1
스택 오버플로에 오신 것을 환영합니다. 다음에 더 읽기 쉽게 답을 작성하고 다음 도움말 페이지를 확인하십시오. 답변 방법
Fabian Horlacher

get 후 2 개의 값이 있으면 어떻게됩니까? 이처럼$clientName = $request->query->get('clientName','any');
Munkhdelger Tumenbayar

3

쿼리 문자열이나 양식 매개 변수를 얻는 것과 같은 대부분의 경우 위의 답변에서 다룹니다.

본문에 인수로 제공하려는 원시 JSON 문자열과 같은 원시 데이터로 작업 할 때 json_decode()메소드를 Request::getContent()사용할 수 있습니다.

$content = $request->getContent();

Symfony의 HTTP 요청에 대한 추가 유용한 정보는 HttpFoundation 패키지의 문서 에서 찾을 수 있습니다 .


1
$request = Request::createFromGlobals();
$getParameter = $request->get('getParameter');

이것은 여전히 Request매개 변수 가없는 기능을 수행하는 방법 입니까? (예를 들어 컨트롤러 클래스의 개인 기능에서)
fritzmg

1
use Symfony\Component\HttpFoundation\Request;

public function indexAction(Request $request, $id) {

    $post = $request->request->all();

    $request->request->get('username');

}

감사합니다, 당신은 또한 위의 코드를 사용할 수 있습니다


0

선택에서 값을 얻으려면 다음을 사용할 수 있습니다.

$form->get('nameSelect')->getClientData();

0

이것을 시도하십시오, 그것은 작동합니다

$this->request = $this->container->get('request_stack')->getCurrentRequest();

문안 인사


이것은 질문에 전혀 대답하지 않습니다. 질문을하는 사람은 이미 요청 객체에 액세스 할 수 없습니다.
Layton Everson

1
@LaytonEverson 죄송하지만 실수입니다. 그의 메소드 // $ this-> getRequest ()는 2.4 이후로 더 이상 사용되지 않으므로 작동하지 않으므로 실제로 요청 객체에 액세스 할 수 없습니다.)
AchrafSoltani

그것에 대해 틀린 것은 아니지만 asker는 어떤 메소드가 요청 객체에서 변수를 검색하는지 궁금합니다. @Cerad가이 질문에 올바르게 답변했습니다. 요청 오브젝트에 액세스 할 수있는 올바른 방법을 제공했을뿐만 아니라 질문 질문에 대답했습니다.
Layton Everson

0
public function indexAction(Request $request)
{
   $data = $request->get('corresponding_arg');
   // this also works
   $data1 = $request->query->get('corresponding_arg1');
}

1
이 코드는 질문에 대한 답변을 제공 할 수 있지만 작동 방식 및 사용시기를 설명하는 컨텍스트를 포함하는 것이 좋습니다. 코드 전용 답변은 장기적으로 유용하지 않습니다.
Bono

0

심포니 4 사용자 :

$query = $request->query->get('query');

0

# www.example / register / admin

  /**
 * @Route("/register/{role}", name="app_register", methods={"GET"})
 */
public function register(Request $request, $role): Response
{
 echo $role ;
 }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.