回答編集履歴
5
改行位置変更
test
CHANGED
@@ -62,8 +62,12 @@
|
|
62
62
|
|
63
63
|
その後、アクセスしたurlに合っているrouteを決定するために、作成したrouting list を上から見ていき、合致したものがあった場合はそのrouteのactionを実行します。(通常はControllerの指定したfunction)
|
64
64
|
|
65
|
-
このrouting list を上から見ていくが
|
65
|
+
このrouting list を上から見ていく処理がLaravelのrouteは先勝ちと言った部分の処理であり、
|
66
|
+
|
67
|
+
routing listを作成する処理は後勝ちでした。
|
66
68
|
|
67
69
|
|
68
70
|
|
69
|
-
同じuriを使った別groupのrouteは後に書かれたものしかrouteに登録されませんので
|
71
|
+
同じuriを使った別groupのrouteは、後に書かれたものしかrouteに登録されませんので
|
72
|
+
|
73
|
+
uriが被らないようにrouteを設定しましょう。
|
4
Laravelのrouteの内部処理について追記
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
結論を冒頭に持ってくるように変更
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
文言を追加
test
CHANGED
@@ -37,3 +37,7 @@
|
|
37
37
|
|
38
38
|
|
39
39
|
やりたいことを実現するだけなら上のコードです。
|
40
|
+
|
41
|
+
Laravelのrouteでログインしているかしていないかで同じURIの別のviewを表示するのは諦めましょう。
|
42
|
+
|
43
|
+
もしどうしてもそうしたいならControllerでログインしているかを判断してreturnするviewを分岐させましょう。
|
1
具体的にどうすればいいかを追加
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
|
+
やりたいことを実現するだけなら上のコードです。
|