Cara mendapatkan parameter permintaan di symfony2

203

Saya sangat baru dalam symfony. Dalam bahasa lain seperti java dan lainnya saya dapat menggunakanrequest.getParameter('parmeter name') untuk mendapatkan nilai.

Apakah ada hal serupa yang dapat kita lakukan dengan symfony2.
Saya telah melihat beberapa contoh tetapi tidak ada yang bekerja untuk saya. Misalkan saya memiliki bidang isian dengan nama pengguna . Dalam bentuk tindakan saya mencoba menggunakan sesuatu seperti ini:

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

Saya juga sudah mencoba

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

dan

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

Tapi tidak ada opsi yang berfungsi. Namun berikut ini berfungsi dengan baik:

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

Di mana saya melakukan kesalahan dalam menggunakan getParameter()metode. Bantuan apa pun akan dihargai.

Abdul Hamid
sumber
Anda memiliki salah ketik di baris dua: $request->request-get()seharusnya $request->request->get(). Mungkinkah itu?
Halfer
telah menulis yang sama di code.missed di sini. maaf untuk kesalahan ketik di sini. masih ini tidak berfungsi.
Abdul Hamid
Sudahkah Anda (a) memeriksa manual untuk memastikan bahwa itu get()adalah metode yang benar dan (b) menyalakan pemberitahuan PHP sehingga Anda dapat melihat apakah ada masalah? (c) Apakah Symfony 2 memiliki toolbar debug seperti symfony 1, sehingga Anda dapat melihat apakah Anda telah membuat kesalahan?
halfer
Apakah Anda bingung dengan nama depan dan nama pengguna?
greg0ire
Ada informasi lebih lanjut di sini: roadtodev.com/recuperer-objet-request-de-symfony
Thomas Bredillet

Jawaban:

416

Penamaannya tidak terlalu intuitif:

use Symfony\Component\HttpFoundation\Request;

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

    // $_POST parameters
    $request->request->get('name');
Cerad
sumber
46
Ini berbeda dari apa yang digunakan PHP, tetapi sebenarnya lebih masuk akal. $_GETdata adalah data dari string kueri (tidak ada GETpermintaan yang diperlukan sama sekali) dan $_POSTdata adalah data dari badan permintaan (tidak harus berupa POSTpermintaan juga, bisa saja PUT).
igorw
5
mencoba $ request-> query-> get ('name'); tetapi juga tidak berfungsi.
Abdul Hamid
7
Bagaimana cara saya mendapatkan parameter dari permintaan PUT?
Tjorriemorrie
10
Penamaan yang sangat aneh di sini, pasti $request->getdan $request->postakan lebih sederhana.
crmpicco
3
komentar dari igorw memberi kejelasan pada konvensi penamaan yang aneh ini
Dheeraj
32

Saya melakukannya lebih sederhana:

use Symfony\Component\HttpFoundation\Request;

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

Pilihan lain adalah untuk memperkenalkan parameter Anda ke dalam definisi fungsi aksi Anda:

use Symfony\Component\HttpFoundation\Request;

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

yang, kemudian menganggap bahwa Anda mendefinisikan {foo} dan {bar} sebagai bagian dari pola URL Anda di file routing.yml Anda:

acme_myurl:
    pattern:  /acme/news/{foo}/{bar}
    defaults: { _controller: AcmeBundle:Default:getnews }
pkout
sumber
dan dalam contoh pertama, jika saya memiliki fooparameter dalam string kueri dan dalam tubuh POST, yang mana yang akan dikembalikan $request->get('foo')?
Dimitry K
1
Sepertinya yang diutamakan adalah GET, PATH, POST api.symfony.com/master/Symfony/Component/HttpFoundation/…
Dimitry K
Ini adalah jawaban terbaik
steampowered
7
Bukan itu. Dokumentasi metode itu sendiri mengatakan tidak disarankan untuk menggunakannya karena lebih berat daripada mengakses parameter GET / POST melalui koleksi spesifik mereka.
Jurchiks
1
Jawabannya benar $request->get('foo'); untuk SEMUA tas (urutannya adalah: PATH, GET, POST). Namun demikian, $request->request->get('foo');hanya berfungsi untuk tas POST. Akhirnya, yang pertama ( $request->get()) tidak direkomendasikan jika kita tahu di mana datanya (GET / POST).
F2000
18

Anda bisa menggunakan kode berikut untuk mendapatkan nilai kolom formulir Anda

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');
}

Atau Anda juga bisa mendapatkan semua nilai formulir sebagai array dengan menggunakan

$request->request->all()
Kalajengking
sumber
3
$ request-> request-> all () berfungsi untuk saya tetapi sesuatu seperti $ request-> query-> get ('foo'); tidak bekerja.
Abdul Hamid
13

mencoba

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

periksa nama atribut dari bidang formular Anda

MartinW.
sumber
1
+1, karena saya pikir dari semua respons, hanya yang ini yang benar-benar menyatakan hal yang tidak jelas - dalam kasus Anda telah membuat formulir Anda secara otomatis dengan bantuan pembuat formulir symfony, symfony mengubah nama bidang formulir menjadi sesuatu yang lebih dari yang Anda inginkan mengharapkan. Seperti nama = "acme_demobundle_userform [field_name]"
userfuser
Sintaks yang Anda sebutkan di sini tidak bekerja dengan php 5.3.10. Apa versi minimum untuk mendukung itu?
Justinas Lelys
2
@justinasLelys coba $ userType = $ request-> request-> get ('acme_demobundle_usertype'); $ username = $ userType ['username'];
sleep-er
@JustinasLelys Sintaks adalah PHP 5.4
COil
"nama pengguna" tidak dapat ditentukan. Jadi lebih baik periksa dengan "??" pertama.
Viktor Sydorenko
9

Di dalam controller:

$request = $this->getRequest();
$username = $request->get('username');
Reinherd
sumber
6
Dalam versi yang lebih baru dari Symfony, $this->getRequest()tidak digunakan lagi, demi menyuntikkan Permintaan ke dalam tindakan pengontrol, misalnya:public function showAction(Request $request, $id);
Adam Elsodaney
9

Pilihan Anda:

  1. Sederhana:
    • $request->request->get('param')( $_POST['param']) atau
    • $request->query->get('param')( $_GET['param'])
  2. Formulir Symfony yang baik dengan semua validasi, transormasi nilai, dan perenderan formulir dengan kesalahan dan banyak fitur lainnya:
  3. Sesuatu di antaranya (lihat contoh di bawah)
<?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,
    ]);
}

Lebih lanjut tentang OptionsResolver- http://symfony.com/doc/current/components/options_resolver.html

luchaninov
sumber
8

Karena $this->getRequest()metode sekarang sudah tidak digunakan lagi, Anda perlu menyuntikkan Requestobjek ke dalam tindakan pengontrol Anda seperti ini:

public function someAction(Request $request)

setelah itu Anda dapat menggunakan salah satu dari yang berikut ini.

Jika Anda ingin mengambil data POST dari permintaan, gunakan yang berikut:

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

tetapi jika Anda ingin mengambil data GET dari permintaan gunakan ini:

$request->query->get('var_name');
Ashish Awasthi
sumber
6

Anda dapat melakukannya:

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

Terkadang, ketika atribut dilindungi, Anda tidak dapat memiliki akses untuk mendapatkan nilai untuk metode akses umum:

(POS)

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

(DAPATKAN)

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

(UMUM)

$clientName = $request->get('clientName');
Yoander
sumber
1
Selamat datang di Stack Overflow. Harap format jawaban Anda agar lebih mudah dibaca di lain waktu dan periksa juga halaman bantuan ini: Cara Menjawab
Fabian Horlacher
bagaimana jika ada 2 nilai setelah dapatkan? seperti ini$clientName = $request->query->get('clientName','any');
Munkhdelger Tumenbayar
3

Sebagian besar kasus seperti mendapatkan string kueri atau parameter formulir tercakup dalam jawaban di atas.

Saat bekerja dengan data mentah, seperti string JSON mentah di tubuh yang ingin Anda berikan sebagai argumen json_decode(), metode Request::getContent()ini dapat digunakan.

$content = $request->getContent();

Informasi tambahan yang berguna tentang permintaan HTTP di Symfony dapat ditemukan pada dokumentasi paket HttpFoundation .

Antonis Charalambous
sumber
1
$request = Request::createFromGlobals();
$getParameter = $request->get('getParameter');
Manuel M.
sumber
Apakah ini masih cara untuk pergi untuk fungsi yang tidak memiliki Requestparameter? (misalnya dalam fungsi pribadi dari kelas controller misalnya)
fritzmg
1
use Symfony\Component\HttpFoundation\Request;

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

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

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

}

Terima kasih, Anda juga dapat menggunakan kode di atas

Memenuhi
sumber
0

Jika Anda perlu mendapatkan nilai dari pilih, Anda dapat menggunakan:

$form->get('nameSelect')->getClientData();
sncardonam
sumber
0

Coba ini, ini berhasil

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

Salam

AchrafSoltani
sumber
Ini sama sekali tidak menjawab pertanyaan. Orang yang mengajukan pertanyaan sudah memiliki akses ke objek permintaan.
Layton Everson
1
@LaytonEverson maaf tetapi Anda salah, metodenya // $ this-> getRequest () sudah tidak digunakan lagi sejak 2.4, itu sebabnya tidak berfungsi, jadi dia tidak benar-benar memiliki akses ke objek permintaan;)
AchrafSoltani
Meskipun Anda tidak salah tentang itu, penanya bertanya-tanya metode apa yang mengambil variabel dari objek permintaan. @Cerad menjawab pertanyaan ini dengan benar. Tidak hanya menyediakan cara yang benar untuk mengakses objek Permintaan, ia juga menjawab pertanyaan pertanyaan.
Layton Everson
0
public function indexAction(Request $request)
{
   $data = $request->get('corresponding_arg');
   // this also works
   $data1 = $request->query->get('corresponding_arg1');
}
Abhinand
sumber
1
Meskipun kode ini dapat menjawab pertanyaan, akan lebih baik untuk memasukkan beberapa konteks, menjelaskan cara kerjanya dan kapan menggunakannya. Jawaban kode saja tidak berguna dalam jangka panjang.
Bono
0

Untuk pengguna symfony 4:

$query = $request->query->get('query');
Smith
sumber
0

# www.example / register / admin

  /**
 * @Route("/register/{role}", name="app_register", methods={"GET"})
 */
public function register(Request $request, $role): Response
{
 echo $role ;
 }
Khandaker Toihidul Islam
sumber