解決しました
勉強中の教材: Brad Schiff - Let's Learn Laravel: A Guided Path For Beginners
レッスン35
Laravel 11.6.0
PHP 8.3.7
目的
Gateを使って、特定のIDが付けられたユーザーのみに閲覧許可されたページを作る。
今回の場合はidAdminが1のユーザーが対象であり、0のユーザーは非対象。
問題
教材ではAuthServiceProvider.php
にGateの設定をしていたが、Laravel11からはサービスプロバイダがAppServiceProvider.php
のみとなる。
Laravel11リリースノート - サービスプロバイダ
そのためAuthServiceProvider.php
は削除しAppServiceProvider.php
にGateの設定をしてみたところ、idAdmin1のユーザーでも閲覧拒否ページに飛んでしまった。
(ちなみにAuthServiceProvider.php
に設定をしても結果は変わらない。)
設定
Route::get("/admins-only", function() {
if (Gate::allows("visitAdminPages")) {
return "Only admin.";
}
return "You cannot view this page";
});
Gate::define("visitAdminPages", function(User $user) {
return $user->idAdmin === 1;
});
結果
idAdminが1または0どちらでも「You cannot view this page」と表示されてしまう。
余談
一つ前のレッスンでidAdmin1のユーザーのみ、他人の投稿を編集・削除できるように設定し、正しく動いた。
誤字脱字はGPTに確認済み。
色々調べていると、bootstrapディレクトリにproviders.php
があるらしいのだが俺の環境にはない…。見様見真似で作ってみるがそううまくはいかず。
こちらを参考にAppServiceProvider.php
を変えてみるも結果はかわらず。↓
Gate::define("visitAdminPages", function(User $user) {
if ($user->idAdmin === 1) {
return true;
}
return false;
});
解決(2024/06/18)
Laravel 11.6.0
PHP 8.3.7
兄にいろいろ案を出してもらいながらなんとか解決しました。
具体的な解決方法は確定していないものの、おそらく
- キャッシュクリア
- Laravel再起動
この2つが解決方法だったのではないか…という感じでした。
Log出力、dd出力で原因を探っていくうちに「AppServiceProvider.php
が読み込めてなくね?」と言うところまで行きつき、キャッシュクリアと再起動という提案をもらってやったら…。
うおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおお
ちなみになんやかんやいじりましたが、結局解決後のコードはこのままです。