0
0

最近出たエラーのふりかえり、解決法

Posted at

初心者ゆえのくだらないミスだけど、忘れないように残します。
あうとぷっちょ

環境

OS: Windows11 バージョン23H2
Laravel: 9.52.16
PHP: 8.1.0
開発環境:MAMP

目次

①「Unable to guess the MIME type as no guessers are available (have you enable the php_fileinfo extension?)」

②「must not be greater than 11」

③「Log::●●();」「dd();」などを記入してもLaravel.logに反映されない。


①「Unable to guess the MIME type as no guessers are available (have you enable the php_fileinfo extension?)」

●なんて言ってんの?
→「php_fileinfoという拡張モジュールがないからMIME typeがわからんやで。php_fileinfo持ってる?」

●解決法
php.iniに「extension=php_fileinfo.dll」を追記する。
☟参考記事

参考記事と同じく自分もiniにそもそも記述がなかったので、単純に文言を追加した。

●php_fileinfoってなに
php_fileinfoはファイルの拡張子を判別するために必要。
画像ファイルのアップロードやバリデーションの時に必要になる。

②「must not be greater than 11」

●なんて言ってんの?
→「11より大きい数字はあかんやで。」

●解決法
Request.php/rules()に記述した「max:11」を変更した。

これはエラーというより、バリデーションで引っかかった内容。
自分の中でよくわからない勘違いをしていただけだった。
課題の中で商品を新規登録するために情報を入力するフォームがあり、金額などを入力するところでこのルールが適用されてしまったからエラーが出た。

「バリデーションルール」と「データベース定義」がなぜかごっちゃになっていた。
そのためバリデーションルールとデータ型を少し調べなおした。
☟参考記事

●調べたまとめ
・INT(11)の11は表示幅のこと。max:数値は実際に入力する値の上限のこと。
・データ型varcharは文字列のために、INTは数値のために使う。
ただしバリデーションルールのmaxは文字列にもなるし数値にもなる。
・データ型にcharがあるけど、varcharとの違いは可変or固定文字列かどうか。

③「Log::▽▽();」「dd();」などを記入してもLaravel.logに反映されない。

●解決法
bladeに{{$error}}を追加した。

新規登録のblade
    @if ($errors->any()) <!-- エラーが出たときに表示される部分 -->
        <div class="alert alert-danger">
            <ul>
                @foreach ($errors->all() as $error)
                    <li>{{ $error }}</li>
                @endforeach
            </ul>
        </div>
    @endif

データ新規登録しようにもデータの送信がされるだけで、データベースに保存されてない。
→デバッグしよう!
ということでコントローラーやモデルに「Log::▽▽();」「dd();」を記述しても履歴が残らなかった。
bladeに上記を記述して、見た目もログ上にもエラー文言が表示されるようになった。

☟Logファサードについて Laravel公式


おわりに

いまは「call to a member function メソッド名 on null」に苦しめられている。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0