Symfony2 नियंत्रक में फॉर्म वैल्यू कैसे प्राप्त करें


81

मैं निम्न नियंत्रक कोड के साथ Symfony2 पर एक लॉगिन फ़ॉर्म का उपयोग कर रहा हूं

public function loginAction(Request $request)
{
    $user = new SiteUser();
    $form = $this->createForm(new LoginType(), $user);


    if ($request->getMethod() == 'POST') {
        $form->bindRequest($request);
        $data = $form->getValues();
        // Need to do something with the data here
    }

    return $this->render('GDSiteBundle::header.html.twig', array('form' => $form->createView()));
}

लेकिन मुझे निम्नलिखित चेतावनी मिल रही है:

चेतावनी: array_replace_recursive () [function.array-replace-recursive]: तर्क # 1 एक सरणी नहीं है in \ seller \ symfony \ src \ Symfony \ Component \ Form \ Form \ _php लाइन 593 500 आंतरिक सर्वर त्रुटि - ErrorException

क्या कोई मुझे यह समझने में मदद कर सकता है कि क्या गलत है, और मैं इसे कैसे ठीक कर सकता हूं? धन्यवाद।

अद्यतन: टहनी फ़ाइल कुछ इस तरह है:

<div class="form">
    {{ form_errors(form) }}
    <form action="{{ path('site_user_login') }}" method="POST" {{ form_enctype(form) }}>
        <div class="level1">
            {{ form_row(form.username) }}
            <a href="javascript:void(0)" id="inscription">{% trans %}Registration{% endtrans %}</a>
        </div>
        <div class="level2">
            {{ form_row(form.pwd_hash) }}
            <div class="forget_pass"><a href="#" id="frgt">{% trans %}Forgot Password ?{% endtrans %}</a></div>
        </div>
        <input type="submit" class="submit" name="login" value/>
        <div class="clr"></div>
    </form>
</div>

यहां फॉर्म के प्रकार में फ़ंक्शन है

public function buildForm(FormBuilder $builder, array $options)
{
    $builder->add('username', 'text', array('label' => 'Username : '));
    $builder->add('pwd_hash','password', array('label' => 'Password : '));
}

यहाँ मार्ग है:

site_user_login:
    pattern: /{_locale}/login
    defaults: {_controller: GDSiteBundle:SiteUser:login}

जवाबों:


99

बस:

$data = $form->getData();

1
अच्छा जवाब - RE: नीचे दिए गए उत्तर। समान परिणाम प्राप्त करने के लिए सिम्फनी अक्सर कई तरीकों की अनुमति देती है। SF समाधानों की तलाश में "बेस्ट प्रैक्टिस" पर शोध करना हमेशा अच्छा होता है।
जस्टिन डेप

8
नए संस्करणों के लिए: $ डेटा = $ फ़ॉर्म-> सभी ();
गमजौलेट

92

उपरोक्त में से किसी ने भी मेरे लिए काम नहीं किया। यह मेरे लिए काम करता है:

$username = $form["username"]->getData();
$password = $form["password"]->getData();

मुझे उम्मीद है यह मदद करेगा।


2
हम्म अजीब, मैंने इसे $ अनुरोध के साथ काम किया-> अनुरोध-> प्राप्त ('उपयोगकर्ता नाम'); क्या आपने अनुरोध ऑब्जेक्ट को कार्रवाई के पैरामीटर के रूप में पारित किया है? और आपको उपरोक्त में भी अनुरोध कक्षा को शामिल करना होगा।
विश्वकुमार

59

सिम्फनी 2 (अधिक विशिष्ट, 2.3 संस्करण) में आप किसी क्षेत्र का डेटा प्राप्त कर सकते हैं

$var = $form->get('yourformfieldname')->getData();

या आप भेजे गए सभी डेटा प्राप्त कर सकते हैं

$data = $form->getData();

जहाँ '$ डेटा' एक सरणी है जिसमें आपके फॉर्म फ़ील्ड्स का मान है।


20

Symfony> = 2.3 में, आप एकल फ़ील्ड का मान प्राप्त कर सकते हैं:

$var = $form->get('yourformfieldname')->getData();

दूसरी ओर, आप उपयोग कर सकते हैं:

$data = $form->getData();

लेकिन यह आपको दो अलग चीजें मिलेंगी:

  • यदि आपके फॉर्म में data-classसक्षम विकल्प है (तो यह एक इकाई से जुड़ा हुआ है), फॉर्म द्वारा आबादी वाले मान ; यह विकल्प के साथ किसी भी क्षेत्र को बाहर कर देगा'mapping' => false

  • अन्यथा, सभी प्रपत्र फ़ील्ड के साथ एक सरणी


18

यदि आपके पास फॉर्म में अतिरिक्त क्षेत्र हैं जो एंटिटी में परिभाषित $form->getData()नहीं हैं, तो काम नहीं करता है, एक तरीका यह हो सकता है:

$request->get("form")["foo"] 

या:

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

धन्यवाद! आपने मेरा दिन बचाया!

धन्यवाद! इससे काफी मदद मिली।
Madshvero

अगर आपको क्वेरी की आईडी की आवश्यकता है, तो यह एक वस्तु है जिसे आप निम्नलिखित कमांड को निष्पादित कर सकते हैं: $ फॉर्म-> प्राप्त ('फू') -> getData () -> getId ();
जुआनिटोरक्विज़ा

वास्तव में आपके उत्तर की सराहना करते हैं, यह वास्तव में मददगार था।
इवान फ्रेंको

5

सिम्फनी रूपों में , दो अलग-अलग प्रकार के ट्रांसफार्मर हैं और अंतर्निहित डेटा यहाँ छवि विवरण दर्ज करें के तीन अलग-अलग प्रकार हैं: किसी भी रूप में, तीन अलग-अलग प्रकार के डेटा हैं:

  • मॉडल डेटा

    यह आपके एप्लिकेशन में उपयोग किए गए प्रारूप में डेटा है (उदाहरण के लिए कोई समस्या)। यदि आप कॉल करते हैं Form::getData()या Form::setData(), आप "मॉडल" डेटा के साथ काम कर रहे हैं।

  • सामान्य डेटा

    यह आपके डेटा का सामान्यीकृत संस्करण है और आमतौर पर आपके "मॉडल" डेटा (हालांकि हमारे उदाहरण में नहीं) के समान है। यह आमतौर पर सीधे उपयोग नहीं किया जाता है।

  • डेटा देखें

    यह वह प्रारूप है जिसका उपयोग फ़ॉर्म फ़ील्ड को स्वयं भरने के लिए किया जाता है। यह वह प्रारूप भी है जिसमें उपयोगकर्ता डेटा जमा करेगा। जब आप कॉल करते हैं Form::submit($data), तो $ डेटा "दृश्य" डेटा प्रारूप में होता है।

दो अलग-अलग प्रकार के ट्रांसफार्मर इन प्रकार के डेटा में से प्रत्येक को परिवर्तित करने में मदद करते हैं:

  • मॉडल ट्रांसफार्मर :

    transform(): "मॉडल डेटा" => "मानक डेटा"
    reverseTransform(): "मानक डेटा" => "मॉडल डेटा"

  • ट्रांसफार्मर देखें :

    transform(): "मानक डेटा" => "डेटा देखें"
    reverseTransform(): "डेटा देखें" => "मानक डेटा"

आपको किस ट्रांसफार्मर की आवश्यकता है यह आपकी स्थिति पर निर्भर करता है।

दृश्य ट्रांसफार्मर का उपयोग करने के लिए, कॉल करें addViewTransformer()


यदि आप सभी फ़ॉर्म डेटा प्राप्त करना चाहते हैं:

$form->getData();

यदि आप एक विशिष्ट फॉर्म फ़ील्ड के बाद हैं (उदाहरण के लिए first_name):

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

5

किसी विशिष्ट फ़ील्ड का डेटा प्राप्त करने के लिए,

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

या सभी फॉर्म डेटा के लिए

$form->getData();

डॉक्स से लिंक करें: https://symfony.com/doc/2.7/forms.html


4

मुझे इसके द्वारा काम मिला:

if ($request->getMethod() == 'POST') {
    $username = $request->request->get('username');
    $password = $request->request->get('password');

    // Do something with the post data
}

आपको फ़ंक्शन में पैरामीटर के रूप में अनुरोध $ अनुरोध करने की आवश्यकता है! उम्मीद है की यह मदद करेगा।


यदि आपका फॉर्म sf2 फॉर्म बिल्डर का उपयोग करके उत्पन्न नहीं कर रहा है, तो केवल यह आपको अन्य मूल्य नहीं के रूप में दिखाएगा। +1 मेट
निखिल चौधरी

4

मुझे लगता है कि अनुरोध डेटा प्राप्त करने के लिए, प्रपत्र ऑब्जेक्ट द्वारा बाध्य और मान्य है, तो आपको इस आदेश का उपयोग करना होगा:

$form->getViewData();
$form->getClientData(); // Deprecated since version 2.1, to be removed in 2.3.

यह वही है जिसे मैं देख रहा था। मैं जिस प्रोजेक्ट पर काम कर रहा हूं वह सिम्फनी 2.0 में है और उसे अपडेट नहीं किया जा सकता।
नाओमी

3
private function getFormDataArray($form)
{
    $data = [];
    foreach ( $form as $key => $value) {
        $data[$key] = $value->getData();
    }
    return $data;
}

आपके प्रपत्र subforms है, इस कोड की तरह होना चाहिए:$data[$key] = is_object($value->getData()) ? $this->getFormDataArray($value) : $value->getData();
Aliance

2

यदि आप Symfony 2 सुरक्षा प्रबंधन का उपयोग कर रहे हैं, तो आपको पोस्ट किए गए मान प्राप्त करने की आवश्यकता नहीं है, आपको केवल फ़ॉर्म टेम्प्लेट प्रबंधित करने की आवश्यकता है ( दस्तावेज़ देखें )।

यदि आप Symfony 2 सुरक्षा प्रबंधन का उपयोग नहीं कर रहे हैं, तो मैं आपको इसका उपयोग करने के लिए दृढ़ता से सलाह देता हूं। यदि आप नहीं चाहते हैं या यदि आप नहीं कर सकते हैं, तो क्या आप हमें LoginTypeस्रोत दे सकते हैं ?


धन्यवाद @BlackCharly मैं प्रलेखन पढ़ने के लिए शुरुआत कर रहा हूँ। मैंने उसी के साथ पाठक को पूरी स्पष्टता देने के लिए कोड भी अपडेट किया है। आपकी सहायता की सराहना।
विश्वकुमार

1

यदि सिम्फनी 4 या 5, तो इस कोड का उपयोग करें (जहां नाम आपके क्षेत्र का नाम है):

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

0

मैप किए गए फ़ॉर्म फ़ील्ड के लिए मैं $ फ़ॉर्म का उपयोग करता हूं-> ('inputName') -> getViewData ();

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