Come ottenere i parametri $ _POST e $ _GET


24

Chiamo ajaxly un percorso e gli passo i dati, nel mio controller, voglio ottenere $_POST['var'], $_POST['var2']sembra a causa dell'utilizzo di HttpFoundation in drupal 8 $_POSTe $_GETnon esistono nel vecchio metodo, Come posso accedere ai $_POSTparametri nel controller personalizzato?


2
$ _POST esiste ancora, non devi semplicemente usarlo direttamente. Se $ _POST è vuoto, anche l'oggetto richiesta sarà vuoto e l'errore si verifica in precedenza. Spesso, ad esempio, perché mod_rewrite non è abilitato / configurato correttamente e la pagina viene reindirizzata attraverso la direttiva non trovata, che elimina i dati post.
Berdir,

Risposte:


60

Dal record di modifica :

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

diventa

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

Per inciso, per vari, GETuseresti:

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

1
grazie e sai come posso ottenere tutti gli articoli? Voglio dire $ _POST completamente non un elemento.
Yusef,

3
Non ho controllato, ma sapendo che Symfony suppongo:\Drupal::request()->request->all()
Clive

2
Grazie, questa è la vera risposta alla mia domanda, anche se non ho ottenuto il risultato previsto (forse c'è un problema in un altro posto, lo faccio in un'altra domanda.
Yusef

1
Posso confermare che puoi usare \ Drupal :: request () -> query-> all () per ottenere tutte le variabili $ _GET.
Oknate,

29

In un controller ottenere la richiesta con un argomento suggerito dal tipo 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];
  }

}

Maggiori informazioni https://www.drupal.org/docs/8/api/routing-system/using-parameters-in-routes


11

Iniettare il RequestStacknel controller.

La richiesta corrente contiene l' queryattributo che a sua volta contiene i parametri GET. requestcontiene i parametri POST.

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

Puoi controllare l'oggetto Richiesta come

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

restituirà GET o POST o qualsiasi altra cosa. Se stai lavorando all'interno di un oggetto, ricordati di DI il servizio di richiesta.


3

Se si sta utilizzando Content-Type: application/json, utilizzare:

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

2

Nessuna delle altre risposte ha funzionato per me, ma ho trovato questo che ha fatto:

$request->getContent();

0

Ecco l'esempio dell'accesso ai parametri URL e del loro passaggio a un modello TWIG, sto considerando che hai già creato il modulo e richiesto i file e supponiamo che "/ test? Fn = admin" sia il tuo URL

  1. Nel tuo file .module implementa hook_theme e definisci le variabili e il nome del modello (assicurati di sostituire "_" con "-" quando crei il file modello)
function my_module_theme () {   
     return [
      'your_template_name' => [               
         'variables' => [
             'first_name'    => NULL,
          ],   
     ]; 
   }

Ora crea il tuo controller e inserisci il codice seguente.

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

 }

Ora nel tuo file TWIG che dovrebbe essere "my-template.html.twig" puoi accedere a questo parametro come,

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

Ed è fatto. Spero che sia di aiuto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.