- 投稿日:2021-01-07T23:36:44+09:00
Laravelで「npm run dev」してもCSS&JSが反映されない?それはブラウザのキャッシュが原因かも!
「npm run dev」してもCSSとJSファイルが反映されない…
Laravel 8で「Laravel Mix」を使用してアプリ開発の練習をしていた際に、
npm run dev
コマンドを打った後、ブラウザで確認してもCSSとJSファイルが反映されなかったことがあったので、その解決メモ。最初に答えを言ってしまうと、バージョン付け をすることで、ブラウザのキャッシュ対策をすれば解決できました。
Laravel 8をインストールした直後では、
webpack.mix.js
は以下のような感じだと思います。webpack.mix.jsmix.js('resources/js/app.js', 'public/js') .postCss('resources/css/app.css', 'public/css', [ require('postcss-import'), require('tailwindcss'), ]) .webpackConfig(require('./webpack.config'));これを以下のように
.version()
を付けくわえてください。webpack.mix.jsmix.js('resources/js/app.js', 'public/js') .postCss('resources/css/app.css', 'public/css', [ require('postcss-import'), require('tailwindcss'), ]) .version() .webpackConfig(require('./webpack.config'));この様に
.version()
を付けた後に、npm run dev
を実行してみてください。作成された新しいCSSファイル、またはJSファイルがロードされるようになると思います。これは、
.version()
によって、以前のキャッシュファイルが読み込まれないようにするために、コンパイルされたCSSファイル及びJSファイル名に一意のハッシュを付け加えているためです。
public/mix-manifest.json
を見てみてください。public/mix-manifest.json{ "/js/app.js": "/js/app.js?id=********************", "/css/app.css": "/css/app.css?id=********************" }
***
のところはハッシュの文字列になっていると思います。
これで、一意なハッシュを加えたファイル名として読み込めば、以前のキャッシュされたファイルを読み込むことを防げるというわけです。あとは、
mix関数
をblade内で使用することで、自動的に最新のバージョン付けされたファイルを読み込むことができます。<script src="{{ mix('/js/app.js') }}"></script>もし、
npm run dev
してもCSSが反映されない…となったときは、ぜひ.version()
のことを思い出してください。
- 投稿日:2021-01-07T21:21:22+09:00
LaravelのPaginateでエラーが出たワケ
はじめに
初めてLaravelを触ってみました。プログラミング初心者らしすぎる凡ミスですが、記録的として残したいと思います。
環境
PHP 7.4
Laravel 6.20.8エラー内容
BadMethodCallException Call to undefined method App\XXX(model)::links() (View: /work/resources/views/XXX.blade.php)Paginateメソッドについて
Laravelにはページネーションがデフォルトで備わっています。
例えばUserController$users = User::orderBy('created_at', 'desc')->paginate(10); return view('user.index', ['users' => $users ]);users.blade.php@foreach($users as $user) {{ $user->name }} @endforeach {{ $users->links() }}これだけで、10件ごとにユーザー名が表示されるページネーションが簡単にできます。
今回のエラーの原因
Laravelでは、テーブル名を複数形、モデルを単数形にするというルールがありますが、今回私はどうしてもinfoという不可算名詞を使用したかったため、任意の名前でテーブル名を設定しました。
ですので、viewのforeachをこれまで書いていたものと同様、Laravelに頼りすぎて何も考えず下記のように書きました。example.blade.php@foreach($info as $info) {{ $info->name }} @endforeach {{ $info->links() }}すると先程のエラー。
変数がオーバーライドされるので、当たり前ですね...下記のように変更(例)しました。example.blade.php@foreach($info as $information) {{ $information->name }} @endforeach {{ $info->links() }}無事ページネーションができました。
おわりに
恥ずかしながらLaravelの便利さ故に詰まってしまいました。自分で任意の名前でテーブル名を設定できますが、できれば変なところで詰まりたくないので、Laravelではできるだけ命名規則に従っておこうと思います。
参考
- 投稿日:2021-01-07T17:46:39+09:00
PHP8にアップデートしたら、laravelでMethod ReflectionParameter::getClass() is deprecated in ... エラーが出た話
使用していたバージョン
Laravel Framework 7.30.1
PHP 8.0.0エラー発生時
laravelでいつものように
php artisan コマンド
を使ったが、Method ReflectionParameter::getClass() is deprecated in ...長ったらしい文が出てきて、コマンドが使えない。
参考サイトによるとphp8で推奨されていないらしい、、、。
解決方法
- composer.jsonファイルのphpのバージョンを変更 例えば
php:^7.2.5 => php:^8.0
- コマンドで
composer update
を実行 で解決します。** また、バージョン変更により本番環境でがシステムが動かなくなる可能性があるので、
念のためphp:^7.2.5 => php:^8.0 ではなく php:^7.2.5|^8.0上記のように書き換えるといいです。
参考サイト
- 投稿日:2021-01-07T15:41:31+09:00
Eloquentのall()ってなんなの? いきなりget()しちゃダメなの?
はじめに
LaravelでDBからデータを取り出す処理を書いているときに、大体
all()
ってやるじゃないですか。$hoges = Hoge::all()で、自分で書いておきながら「あれ? 全件取り出しの時
all()
って書いたのなにげに初めてじゃね?」って思ったんですね。実際、他のところではいきなりget()
してました。$fugas = Fuga::get();で、この2つ、同じ動きをするわけなんですが、何が違うんじゃ? と思った次第です。
all()
のコードを見てみよう公式ドキュメント見ても何がどう違うのか書いてはいなかったので、コードを見てみることにしました。
vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(454-465)/** * Get all of the models from the database. * * @param array|mixed $columns * @return \Illuminate\Database\Eloquent\Collection|static[] */ public static function all($columns = ['*']) { return static::query()->get( is_array($columns) ? $columns : func_get_args() ); }どうも、普通に
get()
を呼んでいるだけのようです。
ただ、違うところは取得するカラムを引数で指定できるようになっているのですが、配列、もしくは可変長で取れる様になっているところみたいです。つまり、
$hoges = Hoge::all(['id', 'updated_at']);$hoges = Hoge::all('id', 'updated_at');は同じ動きをするってことですね。
get()
の場合は引数が1つの配列、もしくは文字列しか取れないので動かない例$hoges = Hoge::get('id', 'updated_at');これは動きません。
結論
- いきなり
get()
でも良さそう- 全件取得してるよ!ってのを明示的にしたければ
all()
を使う感じかな?
- 投稿日:2021-01-07T15:24:34+09:00
テスト投稿
テスト投稿
エンジニアを目指して
これからがんばります!
phpのインストール時のエラー
Error: The following formula cannot be installed from bottle and must be built from source. python@3.9 Install the Command Line Tools: xcode-select --installと出た。xcodeってなんだっけと思いながら
xcode-select --installを実行するもエラー。
そういえばPCの容量一杯になったときにアプリ消したか?覚えてないけどとにかくxcodeを入れようとするも容量不足で入れられず。
- 投稿日:2021-01-07T05:25:43+09:00
初心者がLaravelでアプリをつくるまで
プログラミングスクールに通い始めて2ヶ月、、
あと1ヶ月で予定の3ヶ月を終えてしまうけど、全然ポートフォリオに使う予定のアプリが完成しない、、
とりあえず、全然連絡の取れなかったメンターの方を変更していただいてようやく方向性が定まってきた。とりあえず、つくってみるアプリは前々から少し考えていた、アンケートを投稿できるモノにした。
あまり難しそうなものを考えると心が折れそうなので、、内容としては、登録してくれたユーザが誰でもアンケートを投稿できて、他のユーザに回答してもらえて回答の集計を取れるようなものにしようかと、、
最初はとりあえず型だけつくって、後から時間があれば色々な機能を搭載していければいいかなってくらいです。まず言われた通り、基本設計とテーブル定義を調べながらやってみたけど、やり方が全然わからないのでとりあえずシートに書いてみました。
きっと間違いと足りない部分が多すぎると思うので、明日のメンタリング教えてもらおう、、
コードをこれから書いていくのですが、何から書き始めていいかさっぱりなのでスクールのカリキュラムを真似しながら1つずつ書いて行きます、、
頭の中では、このページのこの部分を押すとここに飛んで、あのボタンを押すとこうなってと、イメージはあるのですが、、
それを、紙にペンで書いていいなら今日中に終わるのに、コードでそれを表現するには初心者の自分からすれば莫大な時間がかかりそうです、、Qiita書いてて気が付くともう朝方なので、また明日からがんばります!
- 投稿日:2021-01-07T01:37:20+09:00