$ _POST ve $ _GET parametreleri nasıl alınır?


27

Ben ajaxly bir rota arayıp benim denetleyicisi, Almak istediğim yılında buraya bilgi aktarmak $_POST['var'], $_POST['var2']bunun nedeni drupal 8'de HttpFoundation kullanmanın görünüyor $_POSTve $_GETben erişebilir nasıl eski yöntemde var olmayan $_POSTözel Kontrolör parametreleri?


2
$ _POST hala var, doğrudan kullanmamalısınız. $ _POST boşsa, istek nesnesi de boş olur ve hatanız daha önce gerçekleşir. Çoğu zaman, bunun nedeni, mod_rewrite işlevinin doğru bir şekilde etkinleştirilmemesi / yapılandırılmaması ve sayfanın yazı verilerini bırakan bulunmayan yönerge üzerinden yönlendirilmesidir.
Berdir

Yanıtlar:


63

Gönderen değişim rekor :

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

olur

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

Bu arada, GETvars için şunları kullanırsınız:

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

1
teşekkürler, ve nasıl tüm öğeleri alabilirim biliyor musunuz? Yani $ _POST tamamen tek bir öğe değil.
Yusef

3
Kontrol etmedim, ama Symfony bilerek varsayıyorum:\Drupal::request()->request->all()
Clive

2
Teşekkürler, beklediğim sonucu almama rağmen sorumun cevabı bu (belki başka bir yerde bir sorun var, başka bir soruda soruyorum.
Yusef

1
Tüm $ _GET değişkenlerini almak için \ Drupal :: request () -> query-> all () kullanabileceğinizi onaylayabilirim.
oknate

29

Bir denetleyicide isteği bir tür ipucu argümanıyla alın 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];
  }

}

Daha fazla bilgi https://www.drupal.org/docs/8/api/routing-system/using-parameters-in-routes


11

RequestStackKontrolörünüze enjekte edin .

Geçerli istek query, GET parametrelerini içeren özniteliği içerir. requestPOST parametrelerini içerir.

<?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

İstek nesnesini aşağıdaki gibi kontrol edebilirsiniz:

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

GET veya POST veya başka bir şey döndürür. Bir nesnenin içinde çalışıyorsanız, İstek hizmeti DI'yi unutmayın.


3

Kullanıyorsanız Content-Type: application/jsonlütfen kullanın:

$post_data = json_decode( $this->request->getContent(),TRUE);

2

Diğer cevapların hiçbiri benim için işe yaramadı ama bunu buldum:

$request->getContent();

0

URL parametrelerine erişme ve bunları bir TWIG şablonuna geçirme örneği, modülünüzü ve gerekli dosyaları zaten oluşturduğunuzu ve "/ test? Fn = admin" URL'nizin olduğunu varsayalım.

  1. .Module dosyanızda hook_theme uygulayın ve değişkenleri ve şablon adını tanımlayın (Şablon dosyasını oluştururken "_" yerine "-" yazdığınızdan emin olun)
function my_module_theme () {   
     return [
      'your_template_name' => [               
         'variables' => [
             'first_name'    => NULL,
          ],   
     ]; 
   }

Şimdi kumandanızı oluşturun ve içine kodu aşağıya yazın.

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

 }

Şimdi "my-template.html.twig" olması gereken TWIG dosyanızda bu parametreye şu şekilde erişebilirsiniz:

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

Ve bitti. Bu yardımcı olur umarım.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.