$ _POST और $ _GET पैरामीटर कैसे प्राप्त करें


26

मैं ajaxly एक मार्ग कॉल और इसे करने के लिए डेटा पास, मेरे नियंत्रक, मैं प्राप्त करना चाहते हैं में $_POST['var'], $_POST['var2']यह इसलिए क्योंकि Drupal 8 में HttpFoundation का उपयोग करने का लगता है, $_POSTऔर $_GETपुराना तरीका में मौजूद है, मैं कैसे उपयोग कर सकते हैं नहीं कर रहे हैं $_POSTकस्टम नियंत्रक में पैरामीटर?


2
$ _POST अभी भी मौजूद है, आप बस इसे सीधे उपयोग नहीं करते हैं। यदि $ _POST खाली है, तो अनुरोध वस्तु भी खाली हो जाएगी और आपकी त्रुटि पहले हो जाएगी। अक्सर, यह उदाहरण के लिए है क्योंकि mod_rewrite सक्षम नहीं है / सही ढंग से कॉन्फ़िगर किया गया है और पृष्ठ अनुपलब्ध निर्देश के माध्यम से पुनर्निर्देशित होता है, जो पोस्ट डेटा को ड्रॉप करता है।
बेर्दिर

जवाबों:


62

से परिवर्तन रिकॉर्ड :

$name = $_POST['name']; // form param

हो जाता है

$name = \Drupal::request()->request->get('name'); // form param

संयोग से, GETvar के लिए, आप उपयोग करेंगे:

$query = \Drupal::request()->query->get('name');

1
धन्यवाद, और क्या आप जानते हैं कि मुझे सभी आइटम कैसे मिल सकते हैं? मेरा मतलब है कि $ _POST पूरी तरह से एक आइटम नहीं है।
युसुफ

3
मैं जाँच नहीं की है, लेकिन यह जानकर Symfony मुझे लगता है चाहते हैं:\Drupal::request()->request->all()
क्लाइव

2
धन्यवाद, यह मेरे प्रश्न का सही उत्तर है, हालांकि मुझे अपेक्षित परिणाम नहीं मिला (हो सकता है कि किसी अन्य स्थान पर कोई समस्या हो, मैं एक अन्य प्रश्न में पूछता हूं।
युसेफ

1
मैं पुष्टि कर सकता हूं कि आप सभी $ _GET चर प्राप्त करने के लिए \ Drupal :: अनुरोध () -> क्वेरी-> सभी () का उपयोग कर सकते हैं।
ओकेनेट करें

29

नियंत्रक में एक प्रकार-संकेत तर्क के साथ अनुरोध प्राप्त करें Request $request:

<?php

namespace Drupal\mymodule\Controller;

use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\HttpFoundation\Request;

class ExampleController extends ControllerBase {

  /**
   * Controller to return a POST or a GET parameter.
   */
  public function action(Request $request) {

    // get your POST parameter
    $foo = $request->request->get('foo');

    // or get your GET parameter
    $foo = $request->query->get('foo');

    return ['#markup' => $foo];
  }

}

अधिक जानकारी https://www.drupal.org/docs/8/api/rout-system/using-parameters-in-routes


11

RequestStackअपने नियंत्रक में इंजेक्ट करें ।

वर्तमान अनुरोध में वह queryगुण है जो बदले में GET पैरामीटर शामिल करता है। requestPOST पैरामीटर शामिल हैं।

<?php

namespace Drupal\example_module\Controller;

use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * An example controller.
 */
class ExampleController extends ControllerBase {

  /**
   * @var Symfony\Component\HttpFoundation\RequestStack
   */
  private $requestStack;

  /**
   * Constructor.
   *
   * @param Symfony\Component\HttpFoundation\RequestStack $request_stack
   */
  public function __construct(RequestStack $request_stack) {
    $this->requestStack = $request_stack;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static(
      $container->get('request_stack')
    );
  }

  /**
   * {@inheritdoc}
   */
  public function action() {
    // Get your GET parameter here.
    $this->requestStack->getCurrentRequest()->query->get('foo');
  }

}

4

आप अनुरोध वस्तु की जांच कर सकते हैं जैसे

\Drupal::request()->getMethod();

यह GET या POST या जो भी लौटाएगा। यदि आप किसी ऑब्जेक्ट के अंदर काम कर रहे हैं, तो DI अनुरोध सेवा को याद रखें।



2

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

$request->getContent();

0

यहां URL पैरामीटर तक पहुंचने और उन्हें TWIG टेम्पलेट पर भेजने का उदाहरण है, मैं विचार कर रहा हूं कि आपने पहले ही अपना मॉड्यूल और आवश्यक फाइलें बना ली हैं और मान लीजिए "/ test? Fn = admin" आपका URL है

  1. आपकी .module फ़ाइल में हुक_टैम लागू करें और वैरिएबल और टेम्प्लेट नाम को परिभाषित करें (सुनिश्चित करें कि आप "_" को "-" के साथ बदलें "जब टेम्पलेट फ़ाइल बनाते हैं)
function my_module_theme () {   
     return [
      'your_template_name' => [               
         'variables' => [
             'first_name'    => NULL,
          ],   
     ]; 
   }

अब अपना कंट्रोलर बनाएं और उसमें नीचे कोड डालें।

 namespace Drupal\my_module\Controller;

 use Drupal\Core\Controller\ControllerBase;
 use Symfony\Component\HttpFoundation\Request;


 class MyModule extends ControllerBase {

   public function content(Request $request) {

     return [
       '#theme' => 'my_template',
       '#first_name' => $request->query->get('fn'), //This is because the parameters are in $_GET, if you are accessing from $_POST then use "request" instead "query"
     ];
   }

 }

अब आपकी TWIG फाइल में "my-template.html.twig" होनी चाहिए, आप इस पैरामीटर को इस प्रकार एक्सेस कर सकते हैं,

 <h3>First Name: {{ first_name }}</h3>

और इसका किया। उम्मीद है की यह मदद करेगा।

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