2016-05-14 6 views
0

Ich versuche, den "pic" -Wert, der als ein Array festgelegt ist, mit einem Bilddateinamen zu ersetzen, aber die Zusammenführung scheint nicht zu funktionieren.Zusammenführungsanforderung funktioniert nicht

Ich bekomme keine Fehler im Protokoll mit dem folgenden Code. Ich schätze, ich darf noch keine Bilder einbetten, daher gibt es unten Links. Ich mache ein Laravel-Projekt.

Log::info($request); 

$image = $request->file('pic'); 
$imageName = $image->getClientOriginalName(); 

$request->merge(array('pic' => $imageName)); 
$request->file('pic')->move(base_path()."/public/profile_pics",$imageName); 

Log::info($request); 

Laravel Log

Irgendwelche Ideen?

Antwort

3

Sie können Dateien nicht so einfach loswerden. Das Problem hier ist komplex, aber ich werde versuchen, es zu erklären.

Also im Grunde jedes Mal, wenn Sie Anfrage initialisieren und versuchen, Daten daraus zu erhalten, wird die Anfrage alle Dateien konvertieren und sie in einem geschützten Array speichern.
Dann, wenn Sie für ->all() anfordern rekursiv alle einfachen Eingaben mit Dateien Eingänge zusammenführen, so wenn Sie Nur-Text-Eingabe mit dem Namen pic und Datei mit dem Namen pic, Datei haben höhere Priorität angezeigt werden, als Nur-Text-Eingabe.

Und jetzt schmutzig billige Lösung:

$request = new Request($request->all()); 
    $request->merge(['pic' => 'zzz']); 
    dd($request->all()); 

Formular neue Anforderung mit Attributen von den ursprünglichen Anfrage, dann Ihre neue Anforderung keine Dateien, so dass Sie leicht, was Sie in es brauchen fusionieren können.


abschließend Also: Wenn Sie versuchen, von der Anfrage eines beliebigen Wert zuzugreifen, wird es Dateien im geschützten Array speichern und es gibt keine Möglichkeit, sie jetzt zu entfernen.
Aber wenn Sie sauber Anfrage haben, ohne vorherigen Zugriff darauf, Sie können sie leicht entfernen, indem Sie diese Zeile schreiben: $request->files = collect();

+0

Das funktioniert! Ich danke dir sehr. Sobald ich mehr Punkte gesammelt habe, werde ich deine Antwort aufwerten. Können Sie mir auf irgendeine Dokumentation verweisen, warum sie nach dem Zugriff auf die Anfrage Dateien in einem geschützten Array speichern? Ich würde gerne wissen, warum das so ist. – roerjo

+0

@roerjo Sie können diese Dinge nicht in der Dokumentation finden, Sie müssen für sich selbst graben. Im Grunde ist dies das Problem https://github.com/laravel/framework/blob/eedb619baa97105901d7256166df8875afd71c59/src/Illuminate/Http/Request.php#L433 weil '$ convertedFiles' geschützte Variable ist, so dass Sie es nicht ändern können leicht. –

Verwandte Themen