Laravel:File::files($hoge)で取得した値がprivateで変数に出来ない時の対処法
目次
Laravel:File::files($hoge)で取得した値がprivateで使えない
システムのDirectory内一覧を取得しようとFile関数を利用した時の事。取得した値がPrivateとなり変数として再利用できない。こんな場面に遭遇しました。
Fileの使用目的は画像データの一覧を取得したかったから。画像取得の速度を上げるために、システム内の画像の検索性を上げようと保存しているデータをDBに書いて仕舞えと思ったのですが、Fileで取得した値を再利用できない。
File::files($hoge)の結果を変数に入れる事が出来ない
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
#フォルダ内のファイルを配列で取得 $files = File::files($SearchFolder); foreach($files as $file){ #ファイル名から拡張子を外す $name = pathinfo($file->fileName()); #ファイル名を取得 $item_id = $name['filename']; #パスを取得 $path = $file->path(); #ファイルサイズを取得 $filesize = File::size($path); if($filesize == 0){ #ファイルサイズが0の場合、エラーと判断しファイルを削除 File::delete($path); }else{ #DBに保存する $item = new Imagefilelist; $form = array( 'item_id' => $item_id ); unset($form['_token']); $item->fill($form)->save(); } } |
実行結果
1 |
Cannot access private property Symfony\Component\Finder\SplFileInfo::$relativePathname |
どうやら「【File::】で取得した値はPrivate なのでアナタには使えません」と言われている様子。
そもそも取得できてないのか?と思い確認してみます。
var_dump() すると取得できている
var_dumpで確認するとPrivateと前置きをされていますが欲しい情報が取得できています。
でも使えなきゃ意味ないのだよ!
classのプロパティ―をPublic に 変更する?
いやいや、それ出来るとしてもあまりいい方法じゃないよね。
Getter を使うとちゃんと再利用できる!
上のスクリプトをこんな感じに変えました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
#フォルダ内のファイルを配列で取得 $files = File::files($SearchFolder); foreach($files as $file){ #ファイル名から拡張子を外す //$name = pathinfo($file->fileName()); ※修正前 $name = pathinfo($file->getfileName());//修正後 #ファイル名を取得 $item_id = $name['filename']; #パスを取得 //$path = $file->path(); ※修正前 $path = $file->getpath();//修正後 #ファイルサイズを取得 $filesize = File::size($path); if($filesize == 0){ #ファイルサイズが0の場合、エラーと判断しファイルを削除 File::delete($path); }else{ #保存する $item = new Imagefilelist; $form = array( 'item_id' => $item_id ); unset($form['_token']); $item->fill($form)->save(); } } |
取得したいカラム名の前にgetを付けるだけ。
関数 File::files() は取得した値をobjectで返してくれます。
その為【$name = pathinfo($file->getfileName());】と言った感じになります。
まとめ
システムの関数を使い取得が出来ない値があった場合、Getterを使って取得を試みてみましょう。
さぁ、一時テーブル作ってあげたけど速度上がるかなぁ~。
速度が上がらなかったら、折角作ったけどお蔵入り。
システム作ってるとそんなことはよくありますよね。
-
前の記事
楽天市場SEOの推測:無関係キーワード判断のレベル向上? 2019.09.12
-
次の記事
Laravel:JOBが同期処理は動くのに非同期処理にすると動かない 2019.09.25
コメントを残す