回答編集履歴

5

改行位置変更

2021/04/05 05:47

投稿

kaya754
kaya754

スコア133

test CHANGED
@@ -62,8 +62,12 @@
62
62
 
63
63
  その後、アクセスしたurlに合っているrouteを決定するために、作成したrouting list を上から見ていき、合致したものがあった場合はそのrouteのactionを実行します。(通常はControllerの指定したfunction)
64
64
 
65
- このrouting list を上から見ていくがLaravelのrouteは先勝ち部分であり、routing list 自体は後勝ちです。
65
+ このrouting list を上から見ていく処理がLaravelのrouteは先勝ちと言った部分の処理であり、
66
+
67
+ routing listを作成する処理は後勝ちでした。
66
68
 
67
69
 
68
70
 
69
- 同じuriを使った別groupのrouteは後に書かれたものしかrouteに登録されませんのでuriが被らないようにurlを設計しましょう。
71
+ 同じuriを使った別groupのrouteは後に書かれたものしかrouteに登録されませんので
72
+
73
+ uriが被らないようにrouteを設定しましょう。

4

Laravelのrouteの内部処理について追記

2021/04/05 05:47

投稿

kaya754
kaya754

スコア133

test CHANGED
@@ -30,7 +30,7 @@
30
30
 
31
31
  以下補足
32
32
 
33
- Laravelのrouteは基本先勝ち(コードで上に書いてあるURIを優先する)なのですが、2つ同じURIがある場合は振り分けられる前に両方のmiddlewareの処理が走ります。
33
+ ~~ Laravelのrouteは基本先勝ち(コードで上に書いてあるURIを優先する)なのですが、2つ同じURIがある場合は振り分けられる前に両方のmiddlewareの処理が走ります。~~
34
34
 
35
35
 
36
36
 
@@ -39,3 +39,31 @@
39
39
 
40
40
 
41
41
  今回はそれに加えてログインページのrouteが定義されてませんので、Route [login] not defined.のエラーとなります。
42
+
43
+
44
+
45
+
46
+
47
+
48
+
49
+ #### 内部コードを追っていたら上の説明が間違っていたため追記します。
50
+
51
+
52
+
53
+ まずLaravelはweb.phpのようなrouteファイルをもとに、routing list を作成します。(追記で貼ってくださったやつ)
54
+
55
+ そのrouting listの作成はgroupを1つづつ処理した後にそれらをmergeしてるのですが、
56
+
57
+ 違うgroupで同じuriが設定されていることは考慮されていません。
58
+
59
+ つまり後から書かれたgroupに前に書かれたgroupで定義されたrouteと同じuriがある場合は上書きされます。
60
+
61
+
62
+
63
+ その後、アクセスしたurlに合っているrouteを決定するために、作成したrouting list を上から見ていき、合致したものがあった場合はそのrouteのactionを実行します。(通常はControllerの指定したfunction)
64
+
65
+ このrouting list を上から見ていくが、Laravelのrouteは先勝ちの部分であり、routing list 自体は後勝ちです。
66
+
67
+
68
+
69
+ 同じuriを使った別groupのrouteは後に書かれたものしかrouteに登録されませんのでuriが被らないようにurlを設計しましょう。

3

結論を冒頭に持ってくるように変更

2021/04/05 04:22

投稿

kaya754
kaya754

スコア133

test CHANGED
@@ -1,15 +1,3 @@
1
- Laravelのrouteは基本先勝ち(コードで上に書いてあるURIを優先する)なのですが、2つ同じURIがある場合は振り分けられる前に両方のmiddlewareの処理が走ります。
2
-
3
-
4
-
5
- 今回のケースですと['middleware' => ['auth']]の処理が走り、ログインしてないのでログインページ(route('login'))へリダイレクトしようとしています。
6
-
7
-
8
-
9
- 今回はそれに加えてログインページのrouteが定義されてませんので、Route [login] not defined.のエラーとなります。
10
-
11
-
12
-
13
1
  ```php
14
2
 
15
3
  Route::get("/login", "Auth\AuthController@index")->name('login');
@@ -22,8 +10,6 @@
22
10
 
23
11
  Route::group(['middleware' => ['auth']], function () {
24
12
 
25
- // これが入るとエラーになる
26
-
27
13
  Route::get('/', function () {
28
14
 
29
15
  return view('welcome');
@@ -34,10 +20,22 @@
34
20
 
35
21
  ```
36
22
 
37
-
38
-
39
23
  やりたいことを実現するだけなら上のコードです。
40
24
 
41
25
  Laravelのrouteでログインしているかしていないかで同じURIの別のviewを表示するのは諦めましょう。
42
26
 
43
27
  もしどうしてもそうしたいならControllerでログインしているかを判断してreturnするviewを分岐させましょう。
28
+
29
+
30
+
31
+ 以下補足
32
+
33
+ Laravelのrouteは基本先勝ち(コードで上に書いてあるURIを優先する)なのですが、2つ同じURIがある場合は振り分けられる前に両方のmiddlewareの処理が走ります。
34
+
35
+
36
+
37
+ 今回のケースですと['middleware' => ['auth']]の処理が走り、ログインしてないのでログインページ(route('login'))へリダイレクトしようとしています。
38
+
39
+
40
+
41
+ 今回はそれに加えてログインページのrouteが定義されてませんので、Route [login] not defined.のエラーとなります。

2

文言を追加

2021/04/05 03:06

投稿

kaya754
kaya754

スコア133

test CHANGED
@@ -37,3 +37,7 @@
37
37
 
38
38
 
39
39
  やりたいことを実現するだけなら上のコードです。
40
+
41
+ Laravelのrouteでログインしているかしていないかで同じURIの別のviewを表示するのは諦めましょう。
42
+
43
+ もしどうしてもそうしたいならControllerでログインしているかを判断してreturnするviewを分岐させましょう。

1

具体的にどうすればいいかを追加

2021/04/05 01:53

投稿

kaya754
kaya754

スコア133

test CHANGED
@@ -7,3 +7,33 @@
7
7
 
8
8
 
9
9
  今回はそれに加えてログインページのrouteが定義されてませんので、Route [login] not defined.のエラーとなります。
10
+
11
+
12
+
13
+ ```php
14
+
15
+ Route::get("/login", "Auth\AuthController@index")->name('login');
16
+
17
+ Route::post('/login', 'Auth\AuthController@login');
18
+
19
+
20
+
21
+
22
+
23
+ Route::group(['middleware' => ['auth']], function () {
24
+
25
+ // これが入るとエラーになる
26
+
27
+ Route::get('/', function () {
28
+
29
+ return view('welcome');
30
+
31
+ });
32
+
33
+ });
34
+
35
+ ```
36
+
37
+
38
+
39
+ やりたいことを実現するだけなら上のコードです。