Ich stoße auf eine Situation in Laravel, während ich eine store () - oder update () -Methode mit dem Parameter Request aufrufe, um der Anfrage einen zusätzlichen Wert hinzuzufügen, bevor ich eloquente Funktionen aufrufe.
function store(Request $request)
{
// some additional logic or checking
User::create($request->all());
}
$request->all()
Array Schlüsselwerte hinzufügen ?array_add()
Helfer nicht benutzen ?$array = array_add($request->all(), 'new_key', $value);
: laravel.com/docs/5.2/helpers#method-array-add Wenn dies nicht die Art von Sache ist, nach der Sie suchen, können Sie weitere Informationen für Ihre Frage bereitstellen?Antworten:
Normalerweise möchten Sie einem Anforderungsobjekt nichts hinzufügen. Verwenden Sie besser Sammlung und
put()
Hilfsmittel:function store(Request $request) { // some additional logic or checking User::create(array_merge($request->all(), ['index' => 'value'])); }
Oder Sie könnten Arrays vereinen :
User::create($request->all() + ['index' => 'value']);
Wenn Sie einem Anforderungsobjekt jedoch wirklich etwas hinzufügen möchten, gehen Sie folgendermaßen vor:
$request->request->add(['variable' => 'value']); //add request
quelle
Bezugnehmend auf die
Alexey Mezenin
Antwort:Während ich seine Antwort verwendete, musste ich etwas direkt zum Anforderungsobjekt hinzufügen und verwendete:
$request->request->add(['variable', 'value']);
Damit werden zwei Variablen hinzugefügt:
$request[0] = 'variable', $request[1] = 'value'
Wenn Sie ein Neuling wie ich sind und ein assoziiertes Array benötigen, ist dies der richtige Weg
$request->request->add(['variable' => 'value']);
Hoffe ich habe dir etwas Zeit gespart
PS: Danke
@Alexey
, du hast mir mit deiner Antwort wirklich geholfenquelle
Model
protected $fillable = ['slug'];
Ich habe die
$request->merge($array)
Funktion in Laravel 5.2 ausprobiert und sie funktioniert einwandfrei.Beispiel:
$request->merge(["key"=>"value"]);
quelle
In Laravel 5.6 können wir beispielsweise Parameter zwischen Middlewares übergeben:
FirstMiddleware
public function handle($request, Closure $next, ...$params) { //some code return $next($request->merge(['key' => 'value'])); }
SecondMiddleware
public function handle($request, Closure $next, ...$params) { //some code dd($request->all()); }
quelle
$request->merge()
Methode FTW! Vielen Dank.genug gesagt zu diesem Thema, aber ich konnte nicht widerstehen, meine eigene Antwort hinzuzufügen. Ich glaube, der einfachste Ansatz ist
request()->merge([ 'foo' => 'bar' ]);
quelle
Sie können auch den folgenden Code verwenden
$request->request->set(key, value).
Passt besser zu mir.
quelle
So fügen Sie
newParam
dem aktuellenRequest
Objekt einen neuen Parameter hinzu, z. B .:$newParam = "paramvalue"; $request->request->add(['newParam' => $newParam]);
Nach dem Hinzufügen des neuen Parameters können Sie diesen neu hinzugefügten Parameter zum Anforderungsobjekt anzeigen, indem Sie:
dd($request);//prints the contents of the Request object
quelle
Ich habe diesen Code verwendet, um meiner Anfrage etwas hinzuzufügen.
$req->query->add(['key'=>'variable']); $req->request->add(['key'=>'variable']);
quelle
Sie können direkt mit auf das Anforderungsarray zugreifen
$request['key'] = 'value'
.quelle
Basierend auf meinen Beobachtungen :
$request->request->add(['variable' => 'value']);
funktioniert (meistens) in POST-, PUT- und DELETE- Methoden, da Werte übergeben werden, einer davon ist_token
. Wie Beispiel unten.<form action="{{ route('process', $id) }}" method="POST"> @csrf </form> public function process(Request $request, $id){ $request->request->add(['id' => $id]); }
Aber [unter Code] funktioniert nicht, da keine Werte übergeben wurden, es wird nicht wirklich hinzugefügt.
<a href='{{ route('process', $id) }}'>PROCESS</a> public function process(Request $request, $id){ $request->request->add(['id' => $id]); }
Bei Verwendung der GET- Methode können Sie entweder Request deklarieren und direkt Werte zuweisen. Wie unten:
public function process($id){ $request = new Request(['id' => $id]); }
Oder Sie können verwenden
merge
. Dies ist tatsächlich besser, als$request->request->add(['variable' => 'value']);
weil Anforderungswerte initialisiert und hinzugefügt werden können, die für alle Methoden funktionieren ( GET , POST , PUT , DELETE ).public function process(Request $request, $id){ $request->merge(['id' => $id]); }
Tag: laravel5.8.11
quelle
Das beste, das ich verwendet und recherchiert habe, ist $ request-> merge ([]) (Check My Piece of Code):
public function index(Request $request) { not_permissions_redirect(have_premission(2)); $filters = (!empty($request->all())) ? true : false; $request->merge(['type' => 'admin']); $users = $this->service->getAllUsers($request->all()); $roles = $this->roles->getAllAdminRoles(); return view('users.list', compact(['users', 'roles', 'filters'])); }
Überprüfen Sie Zeile 3 in der Indexfunktion.
quelle
Sie können der Anforderung von einer Middleware aus folgende Parameter hinzufügen:
public function handle($request, Closure $next) { $request->route()->setParameter('foo', 'bar'); return $next($request); }
quelle
quelle