書籍についてのご質問をまとめています。
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(
のように、単数前提で代入する必要があります。
get() や all() で取得するときは、$posts = の用にコレクションで複数要素として代入しました。
コレクションの場合は、foreach や 他のコレクション型のメソッドを使って一つづつの要素を取り出し
コレクションではない時にforeach を使うとエラーになります。findやfirstを使った使った場合には、foreachはビュー側から取り除いておきましょう。
なおコーディングするうえで考えないといけないポイントがあります。
該当する
たとえば、$post = xxxxx->find(900) など 存在しない id をfind の引数に入れたときや、first()でも1軒も該当するレコードがない場合は、$po
そのため、$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>
でエラーが発生しているとのことですが、こちらのエラーは、通常、 ユーザー情報が正しく取得できていない場合に見られます。
特に、 ログインしていない状態でこのコードを実行しようとすると、
ログインした上で、動作をお試しいただけますか。
Au th::user()
がnull
を返すため、null-> name
となりエラーが生じます。ログインした上で、動作をお試しいただけますか。
{{ Auth::user()->name }}は、
Auth
ファサードを使用しています。このコードにより、 現在認証されているユーザーの情報を簡単に取得することができま す。
ご質問の
UsersController
は 必要ありません。なおAuth::user() はログインしていないと取得できないので
実際に使用する場合は、 下記のようなログインチェック用のコードをいれても良いかと思い ます。
実際に使用する場合は、
(下記はコードの例となります。)
===
◆コントローラにおけるログインチェック
1 2 3 |
if (!Auth::check()) { // ユーザーはログインしていない } |
◆Blade.phpにおけるログインチェック
1 2 3 4 |
@guest // ユーザーはログインしていない <p>ログインしてください</p> @endguest |
あるいは、
1 2 3 4 |
@auth // ユーザーは認証済み(ログイン済み) <p>ようこそ、{{ Auth::user()->name }}さん</p> @endauth |