20210107のlaravelに関する記事は7件です。

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.js
mix.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.js
mix.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()のことを思い出してください。

参考URL https://readouble.com/laravel/8.x/ja/mix.html

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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ではできるだけ命名規則に従っておこうと思います。

参考

https://readouble.com/laravel/6.x/ja/pagination.html

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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

上記のように書き換えるといいです。

参考サイト

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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() を使う感じかな?
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

テスト投稿

テスト投稿

エンジニアを目指して

これからがんばります!

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を入れようとするも容量不足で入れられず。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

初心者がLaravelでアプリをつくるまで

プログラミングスクールに通い始めて2ヶ月、、
あと1ヶ月で予定の3ヶ月を終えてしまうけど、全然ポートフォリオに使う予定のアプリが完成しない、、
とりあえず、全然連絡の取れなかったメンターの方を変更していただいてようやく方向性が定まってきた。

とりあえず、つくってみるアプリは前々から少し考えていた、アンケートを投稿できるモノにした。
あまり難しそうなものを考えると心が折れそうなので、、

内容としては、登録してくれたユーザが誰でもアンケートを投稿できて、他のユーザに回答してもらえて回答の集計を取れるようなものにしようかと、、
最初はとりあえず型だけつくって、後から時間があれば色々な機能を搭載していければいいかなってくらいです。

まず言われた通り、基本設計とテーブル定義を調べながらやってみたけど、やり方が全然わからないのでとりあえずシートに書いてみました。

機能一覧↓
018496678e2a5cd8a337d937404349fd.png

画面設計↓
08422cc56b25641aa748709dade904c9.png

a1aeef6548ca6759de2f7c4f4f2dc235.png

b184dce9016d9ccd1124620aa0e10e4a.png

url一覧↓
9f3a7cb6144517f2a1ea8bdd927e4c30.png

きっと間違いと足りない部分が多すぎると思うので、明日のメンタリング教えてもらおう、、

コードをこれから書いていくのですが、何から書き始めていいかさっぱりなのでスクールのカリキュラムを真似しながら1つずつ書いて行きます、、

頭の中では、このページのこの部分を押すとここに飛んで、あのボタンを押すとこうなってと、イメージはあるのですが、、
それを、紙にペンで書いていいなら今日中に終わるのに、コードでそれを表現するには初心者の自分からすれば莫大な時間がかかりそうです、、

Qiita書いてて気が付くともう朝方なので、また明日からがんばります!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

laravel を vagrant 上にインストール

laravel を vagrant 上にインストール

composer global require laravel/installer
export PATH=$PATH:$HOME/.config/composer/vendor/bin    

プロジェクトの作成

laravel new laravelapp
composer create-project laravel/laravel laravelapp -prefwe-dist
composer create-project laravel/laravel6 laravelapp -prefwe-dist

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む