title
、description
とimage
を取得するフォームがあります。 i dd($requests->all());
の場合、正しい次を返します。
_array:4 [
"projectTitle" => "asd"
"project_description" => "asd"
"project_image" => "15940723_1336567063030425_9215184436331587115_n.jpg"
"_token" => "eUj27iioySvIgut5Afu0ZHMgeVrO99a9e1o7Tw0w"
]
_
そして、私は値を次のように保存しています:
_$project = new Portfolio;
$project->freelancer_id = Auth::user()->id;
$project->title = $request->get('projectTitle');
$project->description = $request->get('project_description');
if($request->hasFile('project_image')){
$project_image = $request->file('project_image');
$filename = time() . '.' . $project_image->getClientOriginalExtension();
Image::make($project_image)->resize(197, 137)->save( public_path('/uploads/portfolios/' . $filename ) );
$project->img = $filename;
}
$project->save();
_
ただし、img
DBテーブルフィールドはnullになります。
if($request->hasFile('project_image'))
はフィールドを取得していません。
また、メソッドがPOST
であるフォームがあり、_enctype="multipart/form-data"
_があり、forファイルには_<input type="file" name="project_image" id="project_image">
_があります。
何が間違っていますか?
エラーはバックエンドコードにはありません。フロントエンドコードのエラーのようです。
ご覧のとおり、dd($ request-> all())の出力が返されます
array:4 [
"projectTitle" => "asd"
"project_description" => "asd"
"project_image" => "15940723_1336567063030425_9215184436331587115_n.jpg"
"_token" => "eUj27iioySvIgut5Afu0ZHMgeVrO99a9e1o7Tw0w"
]
きみの project_image
は単なる文字列ですが、次のようにUploadedFileオブジェクト/インスタンスである必要があります。
array:4 [
"projectTitle" => "asd"
"project_description" => "asd"
"project_file" => UploadedFile {#30
-test: false
-originalName: "15940723_1336567063030425_9215184436331587115_n.jpg"
-mimeType: "image/jpeg"
-size: 5126
-error: 0
}
"_token" => "eUj27iioySvIgut5Afu0ZHMgeVrO99a9e1o7Tw0w"
]
コードのすべてが正しくなる場合、enctypeが欠落している可能性があります。
<form action="{{ route('store') }}" method="POST" enctype="multipart/form-data">
または、フォームヘルパーを使用する場合、そのenctypeはfile = trueフィールドに簡単に含まれます。
{!! Form::open(['route' => ['store'], 'file' => true]) !!}
フォーム定義に以下のような'file' => true
オプションがあることを確認してください。
{!! Form::open(['route' => ['uploadimage'], 'file' => true]) !!}
このオプションにより、HTMLフォームタグのenctype="multipart/form-data"
オプションでフォームがレンダリングされます。これは、form
を使用してファイルをアップロードするために必須です
または、htmlフォームを使用している場合は、次のようなenctype="multipart/form-data"
があることを確認してください。
<form action="{{ route('store') }}" method="POST" enctype="multipart/form-data">
Php.iniでphpディレクティブpload_max_filesizeを確認する必要があります。
通常、そのサイズはデフォルトとして定義されている2Mです。このサイズを超えるファイルをアップロードする場合
Laravel関数
$ request-> hasFile()
falseを返します
それが役に立てば幸い!!
ファイルはサーバーに保存されますか? project_image
フィールドがnullであることに言及しているが、project_image
には何も保存していないが、$project->img = $filename;
でimg
フィールドに保存しようとしているため