回答編集履歴
5
改行位置変更
answer
CHANGED
@@ -30,6 +30,8 @@
|
|
30
30
|
つまり後から書かれたgroupに前に書かれたgroupで定義されたrouteと同じuriがある場合は上書きされます。
|
31
31
|
|
32
32
|
その後、アクセスしたurlに合っているrouteを決定するために、作成したrouting list を上から見ていき、合致したものがあった場合はそのrouteのactionを実行します。(通常はControllerの指定したfunction)
|
33
|
-
このrouting list を上から見ていくが
|
33
|
+
このrouting list を上から見ていく処理がLaravelのrouteは先勝ちと言った部分の処理であり、
|
34
|
+
routing listを作成する処理は後勝ちでした。
|
34
35
|
|
35
|
-
同じuriを使った別groupのrouteは後に書かれたものしかrouteに登録されませんので
|
36
|
+
同じuriを使った別groupのrouteは、後に書かれたものしかrouteに登録されませんので
|
37
|
+
uriが被らないようにrouteを設定しましょう。
|
4
Laravelのrouteの内部処理について追記
answer
CHANGED
@@ -14,8 +14,22 @@
|
|
14
14
|
もしどうしてもそうしたいならControllerでログインしているかを判断してreturnするviewを分岐させましょう。
|
15
15
|
|
16
16
|
以下補足
|
17
|
-
Laravelのrouteは基本先勝ち(コードで上に書いてあるURIを優先する)なのですが、2つ同じURIがある場合は振り分けられる前に両方のmiddlewareの処理が走ります。
|
17
|
+
~~ Laravelのrouteは基本先勝ち(コードで上に書いてあるURIを優先する)なのですが、2つ同じURIがある場合は振り分けられる前に両方のmiddlewareの処理が走ります。~~
|
18
18
|
|
19
19
|
今回のケースですと['middleware' => ['auth']]の処理が走り、ログインしてないのでログインページ(route('login'))へリダイレクトしようとしています。
|
20
20
|
|
21
|
-
今回はそれに加えてログインページのrouteが定義されてませんので、Route [login] not defined.のエラーとなります。
|
21
|
+
今回はそれに加えてログインページのrouteが定義されてませんので、Route [login] not defined.のエラーとなります。
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
#### 内部コードを追っていたら上の説明が間違っていたため追記します。
|
26
|
+
|
27
|
+
まずLaravelはweb.phpのようなrouteファイルをもとに、routing list を作成します。(追記で貼ってくださったやつ)
|
28
|
+
そのrouting listの作成はgroupを1つづつ処理した後にそれらをmergeしてるのですが、
|
29
|
+
違うgroupで同じuriが設定されていることは考慮されていません。
|
30
|
+
つまり後から書かれたgroupに前に書かれたgroupで定義されたrouteと同じuriがある場合は上書きされます。
|
31
|
+
|
32
|
+
その後、アクセスしたurlに合っているrouteを決定するために、作成したrouting list を上から見ていき、合致したものがあった場合はそのrouteのactionを実行します。(通常はControllerの指定したfunction)
|
33
|
+
このrouting list を上から見ていくが、Laravelのrouteは先勝ちの部分であり、routing list 自体は後勝ちです。
|
34
|
+
|
35
|
+
同じuriを使った別groupのrouteは後に書かれたものしかrouteに登録されませんのでuriが被らないようにurlを設計しましょう。
|
3
結論を冒頭に持ってくるように変更
answer
CHANGED
@@ -1,22 +1,21 @@
|
|
1
|
-
Laravelのrouteは基本先勝ち(コードで上に書いてあるURIを優先する)なのですが、2つ同じURIがある場合は振り分けられる前に両方のmiddlewareの処理が走ります。
|
2
|
-
|
3
|
-
今回のケースですと['middleware' => ['auth']]の処理が走り、ログインしてないのでログインページ(route('login'))へリダイレクトしようとしています。
|
4
|
-
|
5
|
-
今回はそれに加えてログインページのrouteが定義されてませんので、Route [login] not defined.のエラーとなります。
|
6
|
-
|
7
1
|
```php
|
8
2
|
Route::get("/login", "Auth\AuthController@index")->name('login');
|
9
3
|
Route::post('/login', 'Auth\AuthController@login');
|
10
4
|
|
11
5
|
|
12
6
|
Route::group(['middleware' => ['auth']], function () {
|
13
|
-
// これが入るとエラーになる
|
14
7
|
Route::get('/', function () {
|
15
8
|
return view('welcome');
|
16
9
|
});
|
17
10
|
});
|
18
11
|
```
|
19
|
-
|
20
12
|
やりたいことを実現するだけなら上のコードです。
|
21
13
|
Laravelのrouteでログインしているかしていないかで同じURIの別のviewを表示するのは諦めましょう。
|
22
|
-
もしどうしてもそうしたいならControllerでログインしているかを判断してreturnするviewを分岐させましょう。
|
14
|
+
もしどうしてもそうしたいならControllerでログインしているかを判断してreturnするviewを分岐させましょう。
|
15
|
+
|
16
|
+
以下補足
|
17
|
+
Laravelのrouteは基本先勝ち(コードで上に書いてあるURIを優先する)なのですが、2つ同じURIがある場合は振り分けられる前に両方のmiddlewareの処理が走ります。
|
18
|
+
|
19
|
+
今回のケースですと['middleware' => ['auth']]の処理が走り、ログインしてないのでログインページ(route('login'))へリダイレクトしようとしています。
|
20
|
+
|
21
|
+
今回はそれに加えてログインページのrouteが定義されてませんので、Route [login] not defined.のエラーとなります。
|
2
文言を追加
answer
CHANGED
@@ -17,4 +17,6 @@
|
|
17
17
|
});
|
18
18
|
```
|
19
19
|
|
20
|
-
やりたいことを実現するだけなら上のコードです。
|
20
|
+
やりたいことを実現するだけなら上のコードです。
|
21
|
+
Laravelのrouteでログインしているかしていないかで同じURIの別のviewを表示するのは諦めましょう。
|
22
|
+
もしどうしてもそうしたいならControllerでログインしているかを判断してreturnするviewを分岐させましょう。
|
1
具体的にどうすればいいかを追加
answer
CHANGED
@@ -2,4 +2,19 @@
|
|
2
2
|
|
3
3
|
今回のケースですと['middleware' => ['auth']]の処理が走り、ログインしてないのでログインページ(route('login'))へリダイレクトしようとしています。
|
4
4
|
|
5
|
-
今回はそれに加えてログインページのrouteが定義されてませんので、Route [login] not defined.のエラーとなります。
|
5
|
+
今回はそれに加えてログインページのrouteが定義されてませんので、Route [login] not defined.のエラーとなります。
|
6
|
+
|
7
|
+
```php
|
8
|
+
Route::get("/login", "Auth\AuthController@index")->name('login');
|
9
|
+
Route::post('/login', 'Auth\AuthController@login');
|
10
|
+
|
11
|
+
|
12
|
+
Route::group(['middleware' => ['auth']], function () {
|
13
|
+
// これが入るとエラーになる
|
14
|
+
Route::get('/', function () {
|
15
|
+
return view('welcome');
|
16
|
+
});
|
17
|
+
});
|
18
|
+
```
|
19
|
+
|
20
|
+
やりたいことを実現するだけなら上のコードです。
|