teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2021/12/08 13:07

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -1,3 +1,5 @@
1
+ ## 解説
2
+
1
3
  この用法の `use` ステートメントは, PHP においては **「実際にファイルが存在するかどうか」を一切確認しません。**そのファイル内で短縮名を使えるようにするだけのものです。そのため,その記述それ自体は(PHPStan などの静的解析ツールを使わない限り)決してエラーを引き起こすことはありません。
2
4
 
3
5
  - `use` ステートメントを消した状態で `Auth::user()->folders()->save($folder);` を実行すると,その `Auth` は同じ名前空間から計算されて `App\Http\Controllers\Auth` という名前を指すようになってしまいます。この存在しないクラスを `App\Http\Controllers\Auth::user()` として使ったら,当然別のエラーになるでしょう。
@@ -39,4 +41,20 @@
39
41
  よって,エラー原因は以下のように整理されます。
40
42
 
41
43
  - **チュートリアル記事に,認証が必須であるページに認証を要求する `auth` ミドルウェアを設定していない誤りがある。**
42
- - **あなたがログインせずに `/folders/create` にアクセスしている。**
44
+ - **あなたがログインせずに `/folders/create` にアクセスしている。**
45
+
46
+ ## 対処
47
+
48
+ ```php
49
+ Route::get(/* ... */)->name(/* ... */);
50
+ ```
51
+
52
+
53
+
54
+ ```php
55
+ Route::middleware('auth')->group(function () {
56
+ Route::get(/* ... */)->name(/* ... */);
57
+ });
58
+ ```
59
+
60
+ こうすることで,この中に書いたものはすべて認証必須ということにできます。認証されていない状態でアクセスすると,強制的にログインページにリダイレクトされることになるかなと思います。