Symfony2 অনুরোধ অবজেক্টে POST মানগুলি অ্যাক্সেস করুন


93

ঠিক আছে, এটি একটি নবাগত প্রশ্ন, তবে আমি উত্তর কোথাও পাই না। সিমফনি 2-তে একটি নিয়ামক হিসাবে, আমি আমার ফর্মগুলির একটি থেকে POST মানটি অ্যাক্সেস করতে চাই। নিয়ামকটিতে আমার রয়েছে:

public function indexAction()
{ 
    $request = $this->get('request');
    if ($request->getMethod() == 'POST') {
        $form = $this->get('form.factory')->create(new ContactType());
        $form->bindRequest($request);
        if ($form->isValid()) {
            $name_value = $request->request->get('name');

দুর্ভাগ্যক্রমে $name_valueকিছুই ফিরিয়ে দিচ্ছে না। আমি কি ভুল করছি? ধন্যবাদ!

উত্তর:


99

সিমফনি ২.২

এই সমাধানটি ২.৩ থেকে অবহেলিত এবং 3.0 এ সরানো হবে, ডকুমেন্টেশন দেখুন

$form->getData();

ফর্ম পরামিতিগুলির জন্য আপনাকে একটি অ্যারে দেয়

থেকে symfony2 বই পৃষ্ঠা 162 (অধ্যায় 12: ফরম)

[...] কখনও কখনও, আপনি কেবল ক্লাস ছাড়াই একটি ফর্ম ব্যবহার করতে এবং জমা দেওয়া ডেটার একটি অ্যারে ফিরে পেতে চাইতে পারেন। এটি আসলেই সহজ:

public function contactAction(Request $request) {
  $defaultData = array('message' => 'Type your message here');
  $form = $this->createFormBuilder($defaultData)
  ->add('name', 'text')
  ->add('email', 'email')
  ->add('message', 'textarea')
  ->getForm();
  if ($request->getMethod() == 'POST') {
    $form->bindRequest($request);
    // data is an array with "name", "email", and "message" keys
    $data = $form->getData();
  }
  // ... render the form
}

আপনি অনুরোধ অবজেক্টের মাধ্যমে সরাসরি পোস্টের মানগুলি (এই ক্ষেত্রে "নাম") অ্যাক্সেস করতে পারেন:

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

তবে পরামর্শ দিন, বেশিরভাগ ক্ষেত্রে getData () পদ্ধতি ব্যবহার করা আরও ভাল পছন্দ, যেহেতু এটি ফর্মের কাঠামোর দ্বারা রূপান্তরিত হওয়ার পরে ডেটা (সাধারণত কোনও বস্তু) ফেরত দেয়।

আপনি যখন ফর্ম টোকেনটি অ্যাক্সেস করতে চান তখন আপনাকে সমস্যার উত্তরটি ব্যবহার করতে হবে $postData = $request->request->get('contact');কারণ getData()অ্যারের থেকে উপাদানটি সরিয়ে দেয়


সিমফনি ২.৩

২.৩ থেকে আপনার handleRequestপরিবর্তে ব্যবহার করা উচিত bindRequest:

 $form->handleRequest($request);

ডকুমেন্টেশন দেখুন


4
এটি দুর্দান্ত এবং এখন সেরা উত্তর। the form-> getData () উপস্থিত ছিল না বা আমি প্রশ্ন জিজ্ঞাসা করার সময় নথিভুক্ত ছিল না।
আকায়রা

4
নতুন সংস্করণে ফর্ম অনুরোধ ডেটা বাঁধতে আপনার should ফর্ম-> হ্যান্ডেলউইকেষ্ট ($ অনুরোধ) ব্যবহার করা উচিত; পরিবর্তে $ ফর্ম-> জমা দিন ($ অনুরোধ); আমি মনে করি. আরও বিশদ বিবরণ symfony.com/doc/2.3/book/forms.html#handling-for-submitted
adridev

127

ফর্ম পোস্ট মান অনুরোধে ফর্মের নামে সংরক্ষণ করা হয়। উদাহরণস্বরূপ, যদি আপনি getName()"পরিচিতি" ফিরিয়ে দেওয়ার জন্য কন্টাক্টটাইপ () এর পদ্ধতিটি ওভাররাইড করে থাকেন তবে আপনি এটি করবেন:

$postData = $request->request->get('contact');
$name_value = $postData['name'];

যদি আপনার এখনও সমস্যা var_dump()হয় $request->request->all()তবে পোস্টের সমস্ত মান দেখতে চেষ্টা করে দেখুন।


4
ধন্যবাদ. Var_dump সাহায্য করেছে, আমি ফর্ম ডেটা যেমন $ postData = $ অনুরোধ-> অনুরোধ-> পেতে ('acme_somebundle_contact_type') পুনরুদ্ধার করার জন্য পুরো নাম দিয়ে আক্রমণ করা শেষ করেছি
আকায়রা

4
নীচে টিমাসচে থেকে উত্তর দেখুন, যেহেতু এটি জিজ্ঞাসা করা হয়েছিল, সিমফনি 2 একটি নতুন পদ্ধতি যুক্ত করেছে: $ ফর্ম-> getData ();
আকায়রা

4
আপনি যদি ওভাররাইড করে থাকেন getName(), তবে হার্ডকোডের নামগুলি না রাখাই বোঝায়:$request->request->get($form->getName());
মেজে

আপনাকে ধন্যবাদ .. আমার অনেক সময় রক্ষিত :) চিয়ার্স !!
অঞ্জনা সিলভা

38

আমার জন্য যা কাজ করেছিল তা এটি ব্যবহার করছিল:

$data = $request->request->all();
$name = $data['form']['name'];

এটিই সমস্যাযুক্ত উল্লেখ করেছে, + সেখানে @ মাইজের মন্তব্য দেখুন
phpsherpa

17

ParameterBag::get()পদ্ধতি সহ একটি কৌশল আছে । আপনি অতিরিক্ত পরিবর্তনশীল ছাড়াই প্রয়োজনীয় গভীর নেস্ট করা মানটিতে $deepপ্যারামিটার সেট করতে trueএবং অ্যাক্সেস করতে পারেন :

$request->request->get('form[some][deep][data]', null, true);

এছাড়াও আপনার ডিফল্ট মান ( get()পদ্ধতির দ্বিতীয় প্যারামিটার ) সেট করার সম্ভাবনা রয়েছে , এটি অনর্থক isset($form['some']['deep']['data'])কল এড়াতে পারে ।


তৃতীয় প্যারামিটারটি 3.0 থেকে অবচয় করা হয়েছে এবং সরানো হয়েছে দ্রষ্টব্য: গভীর আইটেমগুলি সন্ধান করা সংস্করণ 2.8 থেকে অবচয় করা হয়েছে, 3.0-এ সরানো হবে। : github.com/symfony/symfony/blob/…
AL

8

ক্ষেত্রের ডেটাটি একটি নিয়ামক সহ এর সাথে অ্যাক্সেস করা যেতে পারে: তালিকাভুক্ত 12-34

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

তদাতিরিক্ত, আনম্যাপযুক্ত ক্ষেত্রের ডেটাও সরাসরি সংশোধন করা যেতে পারে: তালিকা 12-35 5

$form->get('dueDate')->setData(new \DateTime());

পৃষ্ঠা 164 সাইমফনি 2 বই (9 ই অক্টোবর, 2013 এ উত্পন্ন)


7

আমি আমার মাল্টিপার্ট পোস্ট অনুরোধের জন্য নিম্নলিখিত উপায়ে টিকিট নম্বর প্যারামিটারটি অ্যাক্সেস করছি।

$data = $request->request->all();
$ticketNumber = $data["ticketNumber"];

1

আমি মনে করি যে অনুরোধ ডেটা পেতে, ফর্ম অবজেক্ট দ্বারা আবদ্ধ এবং বৈধতা পেতে আপনার অবশ্যই ব্যবহার করতে হবে:

$form->getClientData();


7
getClientData হ্রাস করা হয়েছে। GetData, getViewData, getNormData ব্যবহার করুন .... ফর্ম উপাদানটি এসএফ 2 তে সত্যই অগোছালো (তাদের সত্যই জাভা বিশ্ব এবং শীতল অনুরোধডাটা বাইন্ডার দ্বারা অনুপ্রাণিত হওয়া উচিত ....)
থমাস ডেকাক্স

0

অনুরোধ ডেটা পেতে সিমফনি ডক

অবশেষে, অনুরোধের বডি সহ প্রেরিত কাঁচা ডেটা getContent () ব্যবহার করে অ্যাক্সেস করা যেতে পারে:

$ সামগ্রী = $ অনুরোধ-> getContent ();


-14

আপনি যদি নবাগত হন তবে সিমফনি 2-তে একটি ওপেন-সোর্স প্রকল্পে স্বাগতম, যদি আপনি অনেক কিছু শিখতে চান তবে আপনি উত্সটি খুলতে পারেন!

"ফর্ম.এফপি" থেকে:

getData () getNormData () getViewData ()

আপনি এই ফাইলটিতে আরও বিশদ খুঁজে পেতে পারেন।


সর্বদা সিমফনি উপায়ে ব্যবহার করুন, $ _POST, $ অনুরোধটি নোংরা
টমাস ডেকাক্স

হ্যাঁ আমি ব্যাখ্যার পক্ষে ভাল নই ^^ তবে $form->getData();আমি জানি মানুষ যে অলস এবং কিছুটা চিন্তা না করেই সমাধান চায় তা নিশ্চিত করার তুলনায় এটি ঠিক একই সমাধান ;-(
টমাস ডেকাক্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.