質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

461閲覧

Laravel5.5で認可を使用する際にエラーが発生する

yukkenoottuna

総合スコア51

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

1グッド

1クリップ

投稿2018/02/11 09:25

ポリシーを使用しGateを登録しようとしています。

ドキュメントを見ると、Gateの登録は下記のコードが記載されています。

public function boot() { $this->registerPolicies(); Gate::define('update-post', 'PostPolicy@update'); }

しかしながら、Controllerの方で、この登録した update-postを使用すると、
"Class PostPolicy does not exist"とのエラーが発生してしまいます。

Gate::define('update-post', 'PostPolicy@update');の部分を
Gate::define('update-post', 'App\Policies\PostPolicy@update');に書き換えるとエラーが出ずに成功するのですが、
ドキュメントと若干違うため違和感があり、これで正しいのかが不安です。

ドキュメントと同じような書き方をするためにはどうしたらいいでしょうか。
ご教示ください。

mpyw👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

似たような例としてコントローラのルーティングがあります。

php

1Route::get('posts', 'PostController@index');

コントローラの場合は

laravel/RouteServiceProvider.php at d86dd9b1eccbfea9c37205129c79e9fa9c376a76 · laravel/laravel

ここでベースとなるネームスペースを定義できるのですが,ポリシー解決に関するコードを読んでみてもそういった処理は見当たりませんでした。ドキュメントが不適切である可能性がありますね。

framework/Gate.php at 6a64c8d37143322c5a02b978c499d0e2b303c6f6 · laravel/framework
framework/Gate.php at 6a64c8d37143322c5a02b978c499d0e2b303c6f6 · laravel/framework
framework/Str.php at 6a64c8d37143322c5a02b978c499d0e2b303c6f6 · laravel/framework
framework/Gate.php at 6a64c8d37143322c5a02b978c499d0e2b303c6f6 · laravel/framework


蛇足ですが,ポリシーのチェックはコントローラで明示的に呼び出すよりも,canミドルウェアを使ってコントローラメソッドに突入する前に自動的に呼び出させるほうがおすすめです。(ルートモデルバインディングで取ってこれない情報がある場合は無理ですが)

php

1Route::get('posts', 'PostController@index')->middleware('can:index,App\Post')->name('posts.index'); 2Route::get('posts/{post}', 'PostController@show')->middleware('can:show,post')->name('posts.show'); 3Route::get('communities/{community}/posts', 'PostController@indexOfCommunity')->middleware('can:index,App\Post,community')->name('communities.posts.index');

php

1use Illuminate\Http\Request; 2use App\Post; 3use App\Community; 4 5class PostController 6{ 7 public function index(Request $request) { } 8 public function show(Request $request, Post $post) { } 9 public function indexOfCommunity(Request $request, Community $community) { } 10}

php

1use App\User; 2use App\Post; 3use App\Community; 4 5class PostPolicy 6{ 7 public function index(User $user) { } 8 public function show(User $user, Post $post) { } 9 public function indexOfCommunity(User $user, Community $community) { } 10}

->name(...)php artisan route:list したときに分かりやすくなるように付けているだけです

【おまけ】

投稿2018/02/11 10:03

編集2018/02/11 10:13
mpyw

総合スコア5223

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yukkenoottuna

2018/02/17 09:08

ありがとうございます。 ひとまずは `Gate::define(‘update-post’, ‘App\Policies\PostPolicy@update’);` の方で進めてみます。 `can` ミドルウェアの方も勉強になりました。おかげさまでControllerのコードを少なくすることが出来ました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問