【解決済み】Uncaught (in promise) TypeError: Cannot read property 'instanceMap' of undefinedと表示された時の対処方法
shiro-changelife
シロウブログ「change life」
こんにちは、シロウです。
Laravelで画像をアップロードをすると下記のバリデーションエラーが発生しました。
ちなみにエラーの日本語バージョンは下記。
・post imageにはファイルを指定してください。
・post imageにはjpeg, png, jpg, bmbのうちいずれかの形式のファイルを指定してください。
すぐに解決できたのですが、他の方も同じようにエラーが出ているかもしれないので、一応解決方法を載せておきます。
ちなみにバリデーションは下記のように設定していました。
$request->validate([
'post_image'=>'file|mimes:jpeg,png,jpg,bmb|max:2048',
]);
結論を言うと、enctype
(読み方:エンクタイプ)属性を設定していないのが原因です。
enctype属性にはフォームで送るデータの形式を指定することができるのですが、画像をアップロードする時はこいつを設定してあげないといけないのです。
具体的には下記のように書きます。
{!! Form::open(['route' => 'posts.store','enctype'=>'multipart/form-data']) !!}
<div class='form-group'>
{!! Form::label('post_image','画像を添付する') !!}
<img src="" id="preview_post_image">
{!! Form::file('post_image') !!}
</div>
{!! Form::submit('投稿する', ['class' => 'btn btn-primary btn-block']) !!}
{!! Form::close() !!}
ポイントは前述した通り「'enctype'=>'multipart/form-data'
」です。
「画像をアップロードしたい時はenctype属性をformタグにつけないといけないんだなぁ〜」程度で覚えておけばOK。
とにかくこいつを設定してあげれば全ては丸く収まります。
ぜひ参考にしてください(*´ω`*)ノ