Symfony2 में अनुरोध पैरामीटर कैसे प्राप्त करें


203

मैं सिम्फनी के लिए बहुत नया हूं। अन्य भाषाओं जैसे जावा और अन्य में मैं request.getParameter('parmeter name')मूल्य प्राप्त करने के लिए उपयोग कर सकता हूं ।

क्या ऐसा ही कुछ है जो हम symfony2 के साथ कर सकते हैं।
मैंने कुछ उदाहरण देखे हैं लेकिन कोई भी मेरे लिए काम नहीं कर रहा है। मान लीजिए कि मेरे पास उपयोगकर्ता नाम के साथ एक फॉर्म फ़ील्ड है । फॉर्म एक्शन में मैंने कुछ इस तरह इस्तेमाल करने की कोशिश की:

$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()। क्या ऐसा हो सकता है?
रोकें

यहाँ पर लिख दिया गया है। यहाँ पर टाइपो के लिए कोड लिखें। यह काम नहीं कर रहा है।
अब्दुल हमीद

क्या आपने (ए) मैनुअल को यह सुनिश्चित करने के लिए जांचा है कि get()क्या सही तरीका है और (बी) PHP के नोटिस पर चालू है ताकि आप देख सकें कि क्या कोई समस्या है? (c) क्या सिम्फनी 2 में सिम्फनी 1 जैसा डिबग टूलबार है, इसलिए आप देख सकते हैं कि क्या आपने कोई त्रुटि की है?
रोकें

क्या आप पहले नाम और उपयोगकर्ता नाम को भ्रमित कर रहे हैं?
greg0ire

जवाबों:


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
$ अनुरोध की कोशिश की-> क्वेरी-> प्राप्त ('नाम'); लेकिन यह भी काम नहीं कर रहा है।
अब्दुल हमीद

7
PUT अनुरोध से मुझे पैरामीटर कैसे मिलते हैं?
तजोर्रीमोर्री

10
यहाँ बहुत अजीब नामकरण, निश्चित रूप से $request->getऔर $request->postसरल होगा।
क्रैम्पिकको

3
igorw की टिप्पणी इस अजीब नामकरण सम्मेलन में स्पष्टता लाती है
धीरज

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

फिर, मान लें कि आपने अपने रूटिंग में अपने URL पैटर्न के हिस्से के रूप में {foo} और {bar} को परिभाषित किया है।

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

और पहले उदाहरण में, अगर मेरे पास fooक्वेरी स्ट्रिंग और POST बॉडी दोनों में पैरामीटर हैं , तो किसके द्वारा वापस किया जाएगा $request->get('foo')?
दिमित्री के

1
पूर्व की तरह दिखता है GET, PATH, POST api.symfony.com/master/Symfony/Component/HttpFoundation/…
Dimitry K

यह सबसे अच्छा जवाब है
स्टीमपॉवरेड

7
नहीं यह नहीं। विधि का प्रलेखन स्वयं कहता है कि इसका उपयोग करने के लिए इसे हतोत्साहित किया जाता है क्योंकि यह कुछ विशिष्ट संग्रह के माध्यम से GET / POST मापदंडों तक पहुंचने से अधिक भारी है।
jurchiks

1
उत्तर $request->get('foo'); सभी बैग के लिए सही काम है (आदेश है: पेट, जीईटी, पोस्ट)। फिर भी, $request->request->get('foo');केवल POST बैग के लिए काम करता है। अंत में, पहले एक ( $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
$ अनुरोध-> अनुरोध-> सभी () मेरे लिए काम कर रहा है, लेकिन $ अनुरोध-> क्वेरी-> ('फू'); काम नहीं कर रहा।
अब्दुल हमीद

13

प्रयत्न

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

अपने सूत्र क्षेत्र की विशेषता नाम का निरीक्षण करें


1
+1, चूँकि मुझे लगता है कि सभी प्रतिक्रियाओं के बाद, केवल यह एक वास्तव में गैर-स्पष्ट बात बताता है - ऐसे मामलों में जब आपने सिम्फनी के फॉर्म बिल्डर की मदद से अपने फॉर्म स्वचालित रूप से बनाए हैं, सिम्फनी फॉर्म फ़ील्ड का नाम बदलकर आपसे कुछ अधिक कर देता है। उम्मीद करते हैं। जैसे नाम = "acme_demobundle_userform [field_name]"
यूज़रफुसर

आपके द्वारा यहां बताया गया सिंटैक्स php 5.3.10 के साथ काम नहीं कर रहा है। समर्थन करने के लिए न्यूनतम संस्करण क्या है?
जस्टिनस लेलेस

2
@justinasLelys $ userType = $ request-> request-> get ('acme_demobundle_usertype') आज़माएँ; $ उपयोगकर्ता नाम = $ उपयोगकर्ता टाइप ['उपयोगकर्ता नाम'];
नींद में एर

@JustinasLelys सिंटैक्स PHP 5.4 है
कॉइल

"उपयोगकर्ता नाम" को परिभाषित नहीं किया जा सकता है। तो "" के साथ बेहतर जाँच करें प्रथम।
विक्टर सिडोरेंको

9

एक नियंत्रक के अंदर:

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

6
सिम्फनी के नए संस्करणों में, $this->getRequest()अनुरोध को नियंत्रक क्रिया में इंजेक्ट करने के पक्ष में public function showAction(Request $request, $id);
चित्रित

9

आपके विकल्प:

  1. सरल:
    • $request->request->get('param')( $_POST['param']) या
    • $request->query->get('param')( $_GET['param'])
  2. सभी मान्यताओं, मूल्य संप्रेषण और त्रुटियों और कई अन्य विशेषताओं के साथ प्रस्तुतिकरण के साथ अच्छा सिम्फनी रूप:
  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/compenders/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

क्या होगा अगर पाने के बाद 2 मूल्य है? इस तरह$clientName = $request->query->get('clientName','any');
मुनकादेलगर तुमनबयार

3

अधिकांश मामले जैसे कि क्वेरी स्ट्रिंग या प्रपत्र पैरामीटर ऊपर दिए गए उत्तरों में शामिल हैं।

कच्चे डेटा के साथ काम करते समय, शरीर में कच्चे JSON स्ट्रिंग की तरह जिसे आप एक तर्क के रूप में देना चाहते हैं json_decode(), विधि Request::getContent()का उपयोग किया जा सकता है।

$content = $request->getContent();

सिम्फनी में HTTP अनुरोधों पर अतिरिक्त उपयोगी informations 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();

सादर


यह प्रश्न का उत्तर नहीं देता है। प्रश्न पूछने वाला व्यक्ति अनुरोध वस्तु पर पहले से ही पहुँच प्राप्त कर रहा है।
लेटन एवरसन 18

1
@LaytonEverson क्षमा करें, लेकिन आप गलत हैं, उसकी विधि // $ इस-> getRequest () 2.4 के बाद से पदावनत है, इसीलिए यह काम नहीं कर रहा है, इसलिए उसका वास्तव में अनुरोध वस्तु तक पहुंच नहीं है;)
Achrafololtani

यद्यपि आप इसके बारे में गलत नहीं हैं, पूछने वाला सोच रहा है कि अनुरोध वस्तु से कोई चर क्या प्राप्त होता है। @ करद ने इस सवाल का सही जवाब दिया। न केवल उन्होंने अनुरोध ऑब्जेक्ट तक पहुंचने का सही तरीका प्रदान किया, बल्कि वह प्रश्न प्रश्न का उत्तर भी देता है।
लैटन एवरसन

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

1
हालांकि यह कोड प्रश्न का उत्तर दे सकता है, लेकिन कुछ संदर्भों को शामिल करना बेहतर होगा, यह बताते हुए कि यह कैसे काम करता है और इसका उपयोग कब करना है। कोड-केवल उत्तर लंबे समय में उपयोगी नहीं हैं।
बोनो


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.