symfony2でリクエストパラメーターを取得する方法


203

私はsymfonyに非常に慣れていません。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()メソッドの使い方でどこが間違っているのですか?任意の助けをいただければ幸いです。


2行目にタイプミス$request->request-get()があり$request->request->get()ます:である必要があります。それでいいですか?
ハーフタイム

誤植のコードで同じように書いてあります。ここでの誤植について申し訳ありませんが、これはまだ機能していません。
Abdul Hamid

(a)マニュアルでget()正しい方法であることを確認し、(b)問題があるかどうかを確認できるようにPHPの通知をオンにしましたか?(c)Symfony 2にはsymfony 1のようなデバッグツールバーがあるので、エラーが発生したかどうかを確認できますか?
halfer

名とユーザー名を混同していますか?
greg0ire 2012年

詳細については、こちらをご覧ください。roadtodev.com
Thomas 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データは、要求本体からのデータである(である必要はありませんPOST要求のいずれかである可能性がありPUT)。
igorw

5
$ request-> query-> get( 'name');を試みました しかし、それも機能していません。
Abdul Hamid

7
PUTリクエストからパラメーターを取得するにはどうすればよいですか?
Tjorriemorrie 2013

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ファイルのURLパターンの一部として{foo}と{bar}を定義したと想定します。

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

最初の例で、fooクエリ文字列とPOST本文の両方にパラメーターがある場合、どちらが返され$request->get('foo')ますか?
Dimitry K

1
優先順位のように見えますがGET、PATH、POSTでapi.symfony.com/master/Symfony/Component/HttpFoundation/...
のDimitry K

これが最良の答えです
蒸気動力の2015

7
いいえ、ちがいます。メソッド自体のドキュメントでは、特定のコレクションを介してGET / POSTパラメータにアクセスするよりも重いため、このメソッドを使用することはお勧めしていません。
jurchiks

1
答えは $request->get('foo');すべてのバッグに対して正しい動作です(順序はPATH、GET、POST)。それでも、$request->request->get('foo');POSTバッグでのみ機能します。最後に、$request->get()データがどこにあるか(GET / POST)がわかっている場合、最初の()は推奨されません。
F2000 2017年

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のフォームビルダーの助けを借りてフォームを自動的に作成した場合、symfonyはフォームフィールドの名前をあなたが思った以上のものに変更します期待する。Like name = "acme_demobundle_userform [field_name]"
userfuser 14

ここで述べた構文は、php 5.3.10では機能しません。それをサポートするための最小バージョンは何ですか?
Justinas Lelys 2014

2
@justinasLelys try $ userType = $ request-> request-> get( 'acme_demobundle_usertype'); $ username = $ userType ['username'];
sleep-er 2014

@JustinasLelys構文はPHP 5.4
2017

「ユーザー名」は定義できません。"??"で確認することをお勧めします 最初。
Viktor Sydorenko 2017

9

コントローラーの内部:

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

6
Symfonyの新しいバージョンで$this->getRequest()は、コントローラーアクションにリクエストを挿入することを優先して、非推奨になっています。例:public function showAction(Request $request, $id);
Adam 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,
    ]);
}

もっとについてOptionsResolver- http://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
Stack Overflowへようこそ。次回は読みやすくするために回答をフォーマットしてください。また、このヘルプページを確認してください。回答方法
Fabian Horlacher

取得後に2つの値がある場合はどうなりますか?このように$clientName = $request->query->get('clientName','any');
ムンクデルガートゥメンバイヤー

3

クエリ文字列やフォームパラメータの取得など、ほとんどの場合は上記の回答で説明されています。

の引数として指定したい本文の未加工のJSON文字列など、未加工のデータを操作する場合はjson_decode()、このメソッドRequest::getContent()を使用できます。

$content = $request->getContent();

SymfonyのHTTPリクエストに関するその他の有用な情報は、HttpFoundationパッケージのドキュメントにあります。


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

これは、まだRequestパラメータを持たない関数に行く方法ですか?(たとえば、コントローラクラスのプライベート関数など)
fritzmg '28

1
use Symfony\Component\HttpFoundation\Request;

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

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

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

}

おかげで、上記のコードを使用することもできます


0

selectから値を取得する必要がある場合は、以下を使用できます。

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

0

これを試してみてください

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

よろしく


これは質問にまったく答えません。質問をする人はすでにリクエストオブジェクトにアクセスできません。
レイトンエバーソン2014

1
@LaytonEverson申し訳ありませんが、間違えました。彼のメソッド// $ this-> getRequest()は2.4以降廃止されたため、機能しないので、リクエストオブジェクトに実際にアクセスできません;)
AchrafSoltani

あなたはそれについて間違っていませんが、どのメソッドがリクエストオブジェクトから変数を取得するのか疑問に思っています。@Ceradこの質問に正解しました。彼はRequestオブジェクトにアクセスする正しい方法を提供しただけでなく、質問の質問にも答えました。
レイトンエバーソン2014

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

1
このコードは質問に答える可能性がありますが、それがどのように機能し、いつ使用するかを説明するコンテキストを含めることをお勧めします。コードのみの回答は、長期的には役に立ちません。
Bono

0

symfony 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.