書籍に関するFAQ

書籍についてのご質問をまとめています。

Livewireの認証機能がおかしい。115ページでエラーになる

認証機能のサーバーサイド部分(処理部分)は、Livewireではなく、Fortifyを使った処理に変更されました。そのため、下記に影響がでています。

108~110ページ

この変更により、app/Livewire/Authディレクトリがなくなりました。
ユーザー登録用のビュー部分(表示部分)は、引き続き、resources/views/livewire/auth以下にあります。ですが、form内のコードは変更されています。

115~118ページ

この変更によって、115~118ページでご紹介したコードが、register.blade.phpで使えなくなりました。コードを実行するとエラーとなります。

ただ、ログイン後のプロフィール画面ではLivewireを使って処理が書かれているため、115~118ページでご紹介したコードを使用できます。
resources/views/livewire/settings/profile.blade.phpファイルを開き、115ページでご紹介したコードをお試しください。
【profile.blade.php】

リアルタイムバリデーションについては、app/Livewire/Settings/Profile.phpの中のupdatedNameメソッドを下記のように変更します。ユーザー名が2文字以上の場合はエラーとなります。

【Profile.php】

first()やfind(1)メソッドを使うとエラーになる

Laravelの教科書P230~231

7-3-5なのですが、get()までは問題なく表示されていたのですが、first()やfind(1)メソッドに書き換えますとエラーが出ました。Attempt to read property “title” on boolと出ます。

first や find で レコードを1つだけ取得する場合は
$post = Post::where…………->find(1);
のように、単数前提で代入する必要があります。

get() や all() で取得するときは、$posts = の用にコレクションで複数要素として代入しました。

コレクションの場合は、foreach や 他のコレクション型のメソッドを使って一つづつの要素を取り出してから使う必要がありましたが、first()の場合は、取り出したあとの単数がすでに 変数に入っているということになります。

コレクションではない時にforeach を使うとエラーになります。findやfirstを使った使った場合には、foreachはビュー側から取り除いておきましょう。

なおコーディングするうえで考えないといけないポイントがあります。

該当するデータが無い場合の処理です。

たとえば、$post = xxxxx->find(900) など 存在しない id をfind の引数に入れたときや、first()でも1軒も該当するレコードがない場合は、$post に値が入っていない状態になります。

そのため、$post->title などと使用する前に
@if (isset($post))
@endif
のようにしておくと、存在する場合だけ値を処理できます。

{{ Auth::user()->name }}でエラーになる

app.blade.phpでnavigation.blade.phpをincludeしているようなのですが、その中に

{{ Auth::user()->name }}

という箇所があります。そこでエラーになっているようです。userオブジェクトが取得できていないようです。

 navigation.blade.php内の<div>{{ Auth::user()->name }}</div>でエラーが発生しているとのことですが、
こちらのエラーは、通常、ユーザー情報が正しく取得できていない場合に見られます。
特に、ログインしていない状態でこのコードを実行しようとすると、Auth::user()nullを返すため、null->nameとなりエラーが生じます。
ログインした上で、動作をお試しいただけますか。
{{ Auth::user()->name }}は、Authファサードを使用しています。
このコードにより、現在認証されているユーザーの情報を簡単に取得することができます。
ご質問のUsersControllerは 必要ありません。
なおAuth::user() はログインしていないと取得できないので
実際に使用する場合は、下記のようなログインチェック用のコードをいれても良いかと思います。
(下記はコードの例となります。)
===
◆コントローラにおけるログインチェック

◆Blade.phpにおけるログインチェック


あるいは、

Laravel Sail環境で環境構築を試しているが、401 Unauthorizedエラーで先に進めない

test-projectを作成するコマンドを実行すると下記エラーがでて先に進めません。プロジェクトも作成できていません。

docker: Error response from daemon: failed to resolve reference “docker.io/laravelsail/php84-composer:latest”:
failed to authorize: failed to fetch oauth token: unexpected status from GET request to ***
401 Unauthorized

Run ‘docker run –help’ for more information
bash: line 17: cd: test-project: No such file or directory
bash: line 23: ./vendor/bin/sail: No such file or directory
bash: line 24: ./vendor/bin/sail: No such file or directory

メッセージから判断すると、OAuth トークンの取得に失敗して 401 Unauthorized が返り、Laravel Sail のイメージを pull できずにプロジェクト生成が途中で止まったようです。

通常は Docker Desktop にサインインしなくても Sail プロジェクトを作れますが、環境によってこのエラーが起きる可能性があります。下記をお試しください。

①Desktop Dockerを開き、右上の「Sign in」をクリックし、Docker Hub にログインを行ってから、プロジェクト作成してみていただけますか?

②なおらない場合には、 Ubuntuでdocker logoutを実施した後、docker login -u <my-user-name>を行ってみてください。my-user-nameには、Desktop DockerのSignin時に設定した名前をいれてください。

無事ログインできたら、プロジェクトを作成してください。

40代からプログラミング!
タイトルとURLをコピーしました