কিভাবে symfony2 এ অনুরোধ পরামিতি পেতে


203

আমি সাইফনিতে খুব নতুন। জাভা এবং অন্যের মতো অন্যান্য ভাষায় আমি request.getParameter('parmeter name')মান পেতে ব্যবহার করতে পারি।

অনুরূপ কিছু আছে যা আমরা সিফনি 2 দিয়ে করতে পারি।
আমি কয়েকটি উদাহরণ দেখেছি কিন্তু কেউই আমার পক্ষে কাজ করছে না। ধরুন নাম ব্যবহারকারীর নাম সহ আমার একটি ফর্ম ক্ষেত্র রয়েছে । ফর্ম ক্রিয়ায় আমি এই জাতীয় কিছু ব্যবহার করার চেষ্টা করেছি:

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

আমি চেষ্টাও করেছি

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

এবং

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

তবে বিকল্পগুলির মধ্যে কোনওটিই কাজ করছে না following

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

getParameter()পদ্ধতিটি ব্যবহার করার ক্ষেত্রে আমি কোথায় ভুল করছি । যে কোন ধরণের সাহায্য গ্রহন করা হবে.


আপনার দুটি লাইনে টাইপ রয়েছে: $request->request-get()হওয়া উচিত $request->request->get()। এটা হতে পারে?
অর্ধেক

কোডে একই লিখেছেন hereহাত মিস করেছেন। এখানে টাইপোর জন্য দুঃখিত। এখনও এটি কাজ করছে না।
আব্দুল হামিদ

আপনি (ক) get()সঠিক পদ্ধতিটি নিশ্চিত করার জন্য ম্যানুয়ালটি পরীক্ষা করেছেন এবং (খ) পিএইচপি বিজ্ঞপ্তি চালু করেছেন যাতে কোনও সমস্যা আছে কিনা তা আপনি দেখতে পারেন? (গ) সিমফনি 2 এর কি সিমফনি 1 এর মতো একটি ডিবাগ টুলবার রয়েছে, তাই আপনি কোনও ত্রুটি করেছেন কিনা তা আপনি দেখতে পারেন?
অর্ধেক

আপনি কি প্রথম নাম এবং ব্যবহারকারীর নামটি বিভ্রান্ত করছেন?
গ্রেগ টায়ার

এখানে আরও তথ্য রয়েছে: Roadtodev.com/recuperer-objet-request-de-symfony
টমাস ব্রেডিলিট

উত্তর:


416

নামকরণটি এতটা স্বজ্ঞাত নয়:

use Symfony\Component\HttpFoundation\Request;

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

    // $_POST parameters
    $request->request->get('name');

46
এটি পিএইচপি যা ব্যবহার করে তার থেকে আলাদা, তবে এটি আসলে আরও বোধ করে more $_GETডেটা হ'ল ক্যোরিয় স্ট্রিংয়ের ডেটা (কোনও GETঅনুরোধের প্রয়োজন নেই ) এবং $_POSTডেটা হ'ল অনুরোধের বডি থেকে ডেটা (হয় POSTঅনুরোধের দরকার হয় না, হতে পারে PUT)।
igorw

5
চেষ্টা করা $ অনুরোধ-> ক্যোয়ারী-> ('নাম') পান; কিন্তু এটি কাজ করছে না।
আবদুল হামিদ

7
PUT অনুরোধ থেকে আমি কীভাবে পরামিতিগুলি পেতে পারি?
টজোররিমোর্রি

10
এখানে খুব অদ্ভুত নামকরণ, অবশ্যই $request->getএবং $request->postসহজ হবে।
crmpicco

3
আইগোরউয়ের মন্তব্য এই অদ্ভুত নামকরণ সম্মেলনে স্পষ্টতা এনেছে
ধীররাজ

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} এবং {বার {সংজ্ঞায়িত করেছেন:

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

এবং প্রথম উদাহরণে, যদি আমার কাছে fooক্যোরিয় স্ট্রিং এবং পিওএসটি বডি উভয় ক্ষেত্রে প্যারামিটার থাকে তবে কোনটি দ্বারা ফিরে আসবে $request->get('foo')?
দিমিত্রি কে

1
দেখে মনে হচ্ছে প্রাধান্য হ'ল জিইটি, পাঠ
দিমিত্রি কে

এটি সেরা উত্তর
23:55

7
না এইটা না. পদ্ধতির নিজেই ডকুমেন্টেশন বলেছে যে এটি ব্যবহার করতে নিরুৎসাহিত করা হয়েছে কারণ এটি নির্দিষ্ট নির্দিষ্ট সংগ্রহের মাধ্যমে জিইটি / পোষ্ট প্যারামিটারগুলি অ্যাক্সেস করার চেয়ে ভারী।
jurchiks

1
উত্তর হ'ল $request->get('foo'); সমস্ত ব্যাগের জন্য সঠিক কাজ (অর্ডারটি হ'ল: পাঠ, জিইটি, পোস্ট)। তবুও, $request->request->get('foo');কেবল পোস্ট ব্যাগের জন্যই কাজ করে। শেষ পর্যন্ত, প্রথমটি ( $request->get()) প্রস্তাবিত হয় না যদি আমরা জানি ডেটা কোথায় রয়েছে (জিইটি / পোস্ট)।
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
$ অনুরোধ-> অনুরোধ-> সমস্ত () আমার পক্ষে কাজ করছে তবে $ অনুরোধ-> কোয়েরি-> get ('foo') এর মতো কিছু; কাজ করছে না.
আবদুল হামিদ

13

চেষ্টা

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

আপনার সূত্রযুক্ত ক্ষেত্রের বিশিষ্টতার নামটি পরীক্ষা করুন


1
+1, যেহেতু আমি সমস্ত প্রতিক্রিয়াগুলির কথা মনে করি, কেবলমাত্র এইটি প্রকৃতপক্ষে অ-স্পষ্টতাকে বলে - আপনি সিম্ফনির ফর্ম নির্মাতার সহায়তায় আপনার ফর্মগুলি স্বয়ংক্রিয়ভাবে তৈরি করেছেন, সিমফনি ফর্ম ফিল্ডটির নাম পরিবর্তন করে আপনার চেয়ে আরও কিছু পরিবর্তন করে আশা। নামটির মতো = "এক্মি_ডেমোবান্ডেল_উজারফর্ম [ক্ষেত্রের নাম]"
ব্যবহারকারীফিউজার

আপনি এখানে উল্লিখিত সিনট্যাক্স পিএইচপি 5.3.10 এর সাথে কাজ করছেন না। এটি সমর্থন করার জন্য ন্যূনতম সংস্করণটি কী?
জাস্টিনাস লেলিস

2
@justinasLelys চেষ্টা করুন $ ইউজারটাইপ = $ অনুরোধ-> অনুরোধ-> পেতে ('acme_demobundle_usertype'); $ ব্যবহারকারীর নাম = $ ব্যবহারকারী টাইপ ['ব্যবহারকারীর নাম'];
ঘুম-এর

@ জাস্টিনাস লিলিজ সিনট্যাক্স পিএইচপি 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/components/options_resolver.html


8

যেহেতু এখন $this->getRequest()পদ্ধতিটি অবহেলা করা হয়েছে আপনাকে Requestআপনার নিয়ামক ক্রিয়ায় এর মতো বস্তু ইনজেক্ট করতে হবে :

public function someAction(Request $request)

এর পরে আপনি নিম্নলিখিতগুলির মধ্যে একটি ব্যবহার করতে পারেন।

আপনি যদি অনুরোধ ব্যবহারের মাধ্যমে POST ডেটা পেতে চান তবে:

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

তবে আপনি যদি অনুরোধ থেকে জিইটি ডেটা আনতে চান তবে এটি ব্যবহার করুন:

$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
স্ট্যাক ওভারফ্লোতে আপনাকে স্বাগতম। আপনার উত্তরটি পরের বারে আরও পঠনযোগ্য করে তুলতে এটি ফর্ম্যাট করুন এবং এই সহায়তা পৃষ্ঠাটিও দেখুন: কীভাবে উত্তর দিন
ফ্যাবিয়ান হরল্যাচার

পাওয়ার পরে যদি 2 মান হয়? এর মতো$clientName = $request->query->get('clientName','any');
মুনখদেলগার তুমেনবায়ের

3

ক্যোয়ারী স্ট্রিং বা ফর্মের পরামিতিগুলি পাওয়ার মতো বেশিরভাগ ক্ষেত্রে উপরের উত্তরে .াকা থাকে।

কোনও কাঁচা JSON স্ট্রিংয়ের মতো কাঁচা ডেটা দিয়ে কাজ করার সময় যা আপনি যুক্তি হিসাবে দিতে চান json_decode(), পদ্ধতিটি Request::getContent()ব্যবহার করা যেতে পারে।

$content = $request->getContent();

সিমফোনিতে এইচটিটিপি অনুরোধের অতিরিক্ত দরকারী তথ্যগুলি এইচটিটিপিফাউন্ডেশন প্যাকেজের ডকুমেন্টেশনে পাওয়া যাবে ।


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

Requestপ্যারামিটারটি নেই এমন ফাংশনগুলিতে যাওয়ার কি এখনও এই উপায় ? (উদাহরণস্বরূপ নিয়ামক শ্রেণীর ব্যক্তিগত ফাংশনে)
ফ্রিজমগ

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();

শুভেচ্ছা সহ


এটি প্রশ্নের কোনও উত্তর দেয় না। প্রশ্ন জিজ্ঞাসা করা ব্যক্তির ইতিমধ্যে অনুরোধ অবজেক্টটিতে অ্যাক্সেস রয়েছে।
লেটন ইভারসন

1
@ লেটনএভারসন দুঃখিত, তবে আপনি ভুল করছেন, তার পদ্ধতিটি // $ এটি-> getRequest () ২.৪ থেকে অবহেলিত হয়েছে, এজন্য এটি কাজ করছে না, তাই অনুরোধের অবজেক্টটিতে তার সত্যিই অ্যাক্সেস নেই;)
আচারফসোল্টানি ani

যদিও আপনি সে সম্পর্কে ভুল নন, জিজ্ঞাসাবাদকটি ভাবছেন যে কী পদ্ধতিটি অনুরোধের বস্তু থেকে কোনও ভেরিয়েবলগুলি পুনরুদ্ধার করে। @ কেরাদ এই প্রশ্নের সঠিক উত্তর দিয়েছেন। অনুরোধ অবজেক্টটি অ্যাক্সেস করার জন্য তিনি কেবল সঠিক পথই সরবরাহ করেননি, তিনি প্রশ্নের প্রশ্নের উত্তরও দিয়েছেন।
লেটন ইভারসন

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

1
এই কোডটি প্রশ্নের উত্তর দিতে পারে, তবে এটি কীভাবে কাজ করে এবং কখন এটি ব্যবহার করবে তা ব্যাখ্যা করে কিছু প্রসঙ্গ অন্তর্ভুক্ত করা ভাল। কোড-কেবল উত্তরগুলি দীর্ঘমেয়াদে কার্যকর নয়।
বোনো


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.