2016-05-14 15 views
0

イメージファイル名で配列が設定されているのに、マージが機能していないような 'pic'値を置き換えようとしています。マージ要求が機能していません

ログに次のコードのエラーはありません。私はまだ画像を埋め込むことは許されていないと思うので、以下のリンクがあります。私はLaravelプロジェクトをやっています。

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

任意のアイデア?

答えて

3

ファイルを簡単に削除することはできません。ここの問題は複雑ですが、私は説明しようとします。

基本的に、リクエストを初期化してからデータを取得しようとすると、リクエストによってすべてのファイルが変換され、保護された配列に格納されます。
->all()を要求すると、すべてのプレーン入力をファイル入力と再帰的にマージするので、名前がpicのプレーンテキスト入力と名前がpicのファイルがある場合、プレーンテキスト入力よりもファイルの表示優先度が高くなります。

そして今、汚い安いソリューション:あなたが簡単にあなたがそれに必要なものは何でもマージすることができますので、元の要求からの属性を持つ

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

フォーム新しい要求が、その後、あなたの新しい要求は、任意のファイルを持っていません。結論でそう


:あなたがリクエストから任意の値にアクセスしようとしたら、それは保護された配列内のファイルを保存し、今それらを削除する方法はありません。
クリーンなリクエストがあった場合、以前にアクセスしなくても、次の行を書くことで簡単に削除できます。$request->files = collect();

+0

これは機能します!どうもありがとうございます。より多くのポイントを獲得するとすぐに私はあなたの答えをアップアップします。 リクエストにアクセスした後、ファイルを保護された配列に保存する理由についてのドキュメントを教えてください。私はそれがなぜあるのか知りたいです。 – roerjo

+0

@roerjoドキュメントではこれらのものを見つけることはできません。自分で掘り起こす必要があります。基本的に、これは問題ですhttps://github.com/laravel/framework/blob/eedb619baa9​​7105901d7256166df8875afd71c59/src/Illuminate/Http/Request.php#L433 '$ convertedFiles'は保護された変数なので、あなたはそれを変更できません簡単に。 –

関連する問題