web-dev-qa-db-fra.com

Créer un objet Demande Laravel à la volée

Je traite les données dans un contrôleur et je souhaite les transmettre davantage à un autre contrôleur pour éviter les doublons de code.

Existe-t-il un moyen de configurer un objet Request nécessaire dans la méthode store- de l'autre contrôleur,? J'ai tracé l'héritage de Request et suis arrivé à l'objet Request de Symfony qui possède une propriété request qui est en fait un ParameterBag qui contient une méthode add pour ajouter des paramètres avec des valeurs.

J'ai essayé ce qui suit mais je reçois null comme résultat:

$myRequest = new Request();
$myRequest->request->add(['foo' => 'bar']);
var_dump($myRequest->foo);

Je suis sur Laravel 5.1 pour ce projet.

16
Ben

Vous pouvez utiliser replace():

$request = new \Illuminate\Http\Request();

$request->replace(['foo' => 'bar']);

dd($request->foo);

Sinon, il serait plus logique de créer une Job pour tout ce qui se passe dans votre deuxième contrôleur et de supprimer l'interface ShouldQueue pour la faire fonctionner de manière synchrone.

J'espère que cela t'aides!

28
Ross Wilson

La création d'un objet de requête avec $myRequest = new Request(); crée l'objet avec method = 'GET'. Vous pouvez vérifier la méthode de votre demande avec $myRequest->getMethod(). Comme la propriété request contient des données pour les demandes POST], vous ne pouvez pas utiliser $myRequest->request->add() par défaut. Vous devez d’abord définir la méthode de la requête sur POST:

$myRequest = new \Illuminate\Http\Request();
$myRequest->setMethod('POST');
$myRequest->request->add(['foo' => 'bar']);
dd($request->foo);

En passant, en utilisant $myRequest->query->add(), vous pouvez ajouter des données à une requête GET.

14
andras bujna

Vous pouvez ajouter le paramètre request à la volée en utilisant ces méthodes. 

Remplacer

remplace la fonction doc

Si vous êtes dans le contrôleur, passez l'objet Request dans les paramètres de la fonction, comme 

  function createUser(Illuminate\Http\Request $request){
     $request->replace(array_merge(array("new_key1"=>"new_value1","new_key_n"=>"new_value_n"), $request->all()));
}

Fonction de fusion

fusionner la fonction doc

function createUser(Illuminate\Http\Request $request){
     $request->merge(array("new_key1"=>"new_value1","new_key_n"=>"new_value_n"));
}

ajouter une fonction

 function createUser(Illuminate\Http\Request $request){
     $request->request->add(array_merge(array("new_key1"=>"new_value1","new_key_n"=>"new_value_n"), $request->all()));
}

Remarque: dans toutes les fonctions, nous étendons la demande, le paramètre précédent moyen y restera. Vous allez ajouter le vôtre. Vous pouvez tous les remplacer. 

0