it-swarm.com.de

So erhalten Sie die Parameter $ _POST und $ _GET

Ich rufe ajaxly eine Route auf und übergebe Daten an sie. In meinem Controller möchte ich $_POST['var'], $_POST['var2'] Erhalten, anscheinend aufgrund der Verwendung von HttpFoundation in drupal) 8, $_POST Und $_GET Sind in der alten Methode nicht vorhanden. Wie kann ich in einem benutzerdefinierten Controller auf $_POST - Parameter zugreifen?

27
Yusef

Aus dem Datensatz ändern :

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

wird

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

Übrigens würden Sie für GET vars Folgendes verwenden:

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

In einem Controller erhalten Sie die Anforderung mit einem typgesteuerten Argument 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];
  }

}

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

29
4k4

Injizieren Sie das RequestStack in Ihren Controller.

Die aktuelle Anforderung enthält das Attribut query, das wiederum die GET-Parameter enthält. request enthält die Parameter 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');
  }

}
11
Tim

Sie können das Request-Objekt wie überprüfen

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

es wird GET oder POST oder was auch immer) zurückgegeben. Wenn Sie in einem Objekt arbeiten, denken Sie daran, den Anforderungsdienst zu DI.

4
ruloweb

Wenn Sie Content-Type: application/json benutzen Sie bitte :

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

Keine der anderen Antworten hat bei mir funktioniert, aber ich habe Folgendes gefunden:

$request->getContent();
2
joekers

Hier ist das Beispiel für den Zugriff auf URL-Parameter und deren Übergabe an eine TWIG - Vorlage. Ich gehe davon aus, dass Sie Ihr Modul und die erforderlichen Dateien bereits erstellt haben und annehmen, dass "/ test? Fn = admin" Ihre URL ist

  1. Implementieren Sie in Ihrer .module-Datei hook_theme und definieren Sie Variablen und Vorlagennamen (Stellen Sie sicher, dass Sie beim Erstellen der Vorlagendatei "_" durch "-" ersetzen).
function my_module_theme () {   
     return [
      'your_template_name' => [               
         'variables' => [
             'first_name'    => NULL,
          ],   
     ]; 
   }

Erstellen Sie nun Ihren Controller und geben Sie den folgenden Code ein.

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

 }

Jetzt können Sie in Ihrer TWIG - Datei, die "my-template.html.twig" sein sollte, auf diesen Parameter zugreifen als:

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

Und es ist geschafft. Hoffe das hilft.

0
Umesh Patil