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

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

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

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

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

Q&A

1回答

1241閲覧

Class 'PostService' not foundエラーを解消したい

attakrui

総合スコア2

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

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

0グッド

0クリップ

投稿2021/04/27 10:21

前提・実現したいこと

laravel6.5で管理者権限つきの掲示板アプリを作っています。
管理者権限機能の記述を共通化したいと思いseviceディレクトリにまとめたところ下記のようなエラーが発生しました

発生している問題・エラーメッセージ

Symfony\Component\Debug\Exception\FatalThrowableError Class 'PostService' not found http://localhost:8080/bbs/18/edit A class import is missing You have a missing class import. Try importing this class: App\PostService.```

php

1sample/src/app/Http/Controllers/PostsController.php 2 3 4<?php 5 6namespace App\Http\Controllers; 7 8use Illuminate\Http\Request; 9use App\Post; 10use App\Http\Requests\PostRequest; 11use Illuminate\Support\Facades\Auth; 12use PostService; 13 14class PostsController extends Controller 15{ 16 public function __construct() 17 { 18 $this->middleware('auth')->except(['index', 'show']); 19 } 20 21 22 public function index() 23 { 24 $posts = Post::orderBy('created_at', 'desc')->paginate(10); 25 return view('bbs.index', ['posts' => $posts]); 26 } 27 28 public function show(Request $request, $id) 29 { 30 $post = Post::findOrFail($id); 31 32 return view('bbs.show', [ 33 'post' => $post, 34 ]); 35 } 36 37 public function create() 38 { 39 return view('bbs.create'); 40 } 41 42 public function store(PostRequest $request) 43 { 44 $savedata = [ 45 'name' => $request->name, 46 'subject' => $request->subject, 47 'message' => $request->message, 48 'user_id' => Auth::id(), 49 50 ]; 51 52 $post = new Post; 53 $post->fill($savedata)->save(); 54 55 return redirect('/bbs')->with('poststatus', '新規投稿しました'); 56 } 57 58 public function edit($post_id) 59 { 60 61 $post = Post::findOrFail($post_id); 62 PostService::check_permission(); 63 64 return view('bbs.edit', ['post' => $post]); 65 } 66 67 public function update(PostRequest $request, Post $post) 68 { 69 PostService::check_permission(); 70 71 $savedata = [ 72 'name' => $request->name, 73 'subject' => $request->subject, 74 'message' => $request->message, 75 'user_id' => Auth::user()->id, 76 77 ]; 78 79 $post = new Post; 80 $post->fill($savedata)->save(); 81 82 return redirect('/bbs')->with('poststatus', '投稿を編集しました'); 83 } 84 85 86 public function destroy($id) 87 { 88 $post = Post::findOrFail($id); 89 PostService::check_permission(); 90 $post->comments()->delete(); 91 $post->delete(); 92 93 return redirect('/bbs')->with('poststatus', '投稿を削除しました'); 94 } 95} 96

php

1sample/src/app/services/PostService.php 2 3<?php 4class PostService { 5 public function check_permission() 6 { 7 if(!(\Auth::user()->can('admin') || \Auth::user()->id == $post->user_id)) 8 { 9 abort(403); 10 } 11 } 12}

php

1sample/src/app/Providers/AppServiceProvider.php 2 3<?php 4 5namespace App\Providers; 6 7use Illuminate\Support\ServiceProvider; 8 9class AppServiceProvider extends ServiceProvider 10{ 11 /** 12 * Register any application services. 13 * 14 * @return void 15 */ 16 public function register() 17 { 18 $this->app->bind('App\Services\PostService'); // 追記 19 } 20 21 /** 22 * Bootstrap any application services. 23 * 24 * @return void 25 */ 26 public function boot() 27 { 28 // 29 } 30} 31

php

1sample/src/app/Providers/PostServiceProvider.php 2 3<?php 4 5namespace App\Providers; 6 7use Illuminate\Support\ServiceProvider; 8 9class PostServiceProvider extends ServiceProvider 10{ 11 /** 12 * Register services. 13 * 14 * @return void 15 */ 16 public function register() 17 { 18 $this->app->bind( 19 'PostService', // キー名 20 'App\Services\PostService' // クラス名 21 ); 22 } 23 24 /** 25 * Bootstrap services. 26 * 27 * @return void 28 */ 29 public function boot() 30 { 31 // 32 } 33} 34

php

1sample/src/config/app.php 2 3<?php 4 5return [ 6 7 8 'name' => env('APP_NAME', 'Laravel'), 9 10 11 'env' => env('APP_ENV', 'production'), 12 13 14 'debug' => env('APP_DEBUG', true), 15 16 17 18 'url' => env('APP_URL', 'http://localhost'), 19 20 'asset_url' => env('ASSET_URL', null), 21 22 23 'timezone' => 'UTC', 24 25 26 'locale' => 'en', 27 28 29 'fallback_locale' => 'en', 30 31 32 33 'faker_locale' => 'ja_JP', 34 35 'key' => env('APP_KEY'), 36 37 'cipher' => 'AES-256-CBC', 38 39 40 'providers' => [ 41 42 /* 43 * Laravel Framework Service Providers... 44 */ 45 Illuminate\Auth\AuthServiceProvider::class, 46 Illuminate\Broadcasting\BroadcastServiceProvider::class, 47 Illuminate\Bus\BusServiceProvider::class, 48 Illuminate\Cache\CacheServiceProvider::class, 49 Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, 50 Illuminate\Cookie\CookieServiceProvider::class, 51 Illuminate\Database\DatabaseServiceProvider::class, 52 Illuminate\Encryption\EncryptionServiceProvider::class, 53 Illuminate\Filesystem\FilesystemServiceProvider::class, 54 Illuminate\Foundation\Providers\FoundationServiceProvider::class, 55 Illuminate\Hashing\HashServiceProvider::class, 56 Illuminate\Mail\MailServiceProvider::class, 57 Illuminate\Notifications\NotificationServiceProvider::class, 58 Illuminate\Pagination\PaginationServiceProvider::class, 59 Illuminate\Pipeline\PipelineServiceProvider::class, 60 Illuminate\Queue\QueueServiceProvider::class, 61 Illuminate\Redis\RedisServiceProvider::class, 62 Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, 63 Illuminate\Session\SessionServiceProvider::class, 64 Illuminate\Translation\TranslationServiceProvider::class, 65 Illuminate\Validation\ValidationServiceProvider::class, 66 Illuminate\View\ViewServiceProvider::class, 67 App\Providers\PostServiceProvider::class, 68 69 /* 70 * Package Service Providers... 71 */ 72 73 /* 74 * Application Service Providers... 75 */ 76 App\Providers\AppServiceProvider::class, 77 App\Providers\AuthServiceProvider::class, 78 // App\Providers\BroadcastServiceProvider::class, 79 App\Providers\EventServiceProvider::class, 80 App\Providers\RouteServiceProvider::class, 81 82 ], 83 84 85 'aliases' => [ 86 87 'App' => Illuminate\Support\Facades\App::class, 88 'Arr' => Illuminate\Support\Arr::class, 89 'Artisan' => Illuminate\Support\Facades\Artisan::class, 90 'Auth' => Illuminate\Support\Facades\Auth::class, 91 'Blade' => Illuminate\Support\Facades\Blade::class, 92 'Broadcast' => Illuminate\Support\Facades\Broadcast::class, 93 'Bus' => Illuminate\Support\Facades\Bus::class, 94 'Cache' => Illuminate\Support\Facades\Cache::class, 95 'Config' => Illuminate\Support\Facades\Config::class, 96 'Cookie' => Illuminate\Support\Facades\Cookie::class, 97 'Crypt' => Illuminate\Support\Facades\Crypt::class, 98 'DB' => Illuminate\Support\Facades\DB::class, 99 'Eloquent' => Illuminate\Database\Eloquent\Model::class, 100 'Event' => Illuminate\Support\Facades\Event::class, 101 'File' => Illuminate\Support\Facades\File::class, 102 'Gate' => Illuminate\Support\Facades\Gate::class, 103 'Hash' => Illuminate\Support\Facades\Hash::class, 104 'Lang' => Illuminate\Support\Facades\Lang::class, 105 'Log' => Illuminate\Support\Facades\Log::class, 106 'Mail' => Illuminate\Support\Facades\Mail::class, 107 'Notification' => Illuminate\Support\Facades\Notification::class, 108 'Password' => Illuminate\Support\Facades\Password::class, 109 'Queue' => Illuminate\Support\Facades\Queue::class, 110 'Redirect' => Illuminate\Support\Facades\Redirect::class, 111 'Redis' => Illuminate\Support\Facades\Redis::class, 112 'Request' => Illuminate\Support\Facades\Request::class, 113 'Response' => Illuminate\Support\Facades\Response::class, 114 'Route' => Illuminate\Support\Facades\Route::class, 115 'Schema' => Illuminate\Support\Facades\Schema::class, 116 'Session' => Illuminate\Support\Facades\Session::class, 117 'Storage' => Illuminate\Support\Facades\Storage::class, 118 'Str' => Illuminate\Support\Str::class, 119 'URL' => Illuminate\Support\Facades\URL::class, 120 'Validator' => Illuminate\Support\Facades\Validator::class, 121 'View' => Illuminate\Support\Facades\View::class, 122 'UserService' => App\Facades\PostService::class, 123 124 ], 125 126]; 127

試したこと

下記の記事を参考にserviceディレクトリの使い方を見直しましたがエラーが解消できませんでした。。
サイトのURL
どうぞよろしくお願い致します。

補足情報(FW/ツールのバージョンなど)

docker利用

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

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

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

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

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

m.ts10806

2021/04/27 11:09

PostService は何のnamespaceにもおいてないですか?
attakrui

2021/04/27 11:17

はい、どこにもおいていない状況になります
attakrui

2021/04/28 04:58

ありがとうございます。その辺りを確認してみます
Lulucom

2021/04/28 14:01

config/app.phpファイルのaliasesの最後のほうで、'UserService'になっていますが'PostService'とすべきではないでしょうか? ただ、他の方も言われているように、PostServiceクラスのcheck_permissionメソッドでやろうとしているような「認可」は、サービスよりも、ポリシーを使う場面かなと思います。
guest

回答1

0

全部間違ってるのでその記事は忘れていい。

やろうとしてることは認可のポリシーを使う場面。
https://readouble.com/laravel/8.x/ja/authorization.html

投稿2021/04/27 11:36

kawax

総合スコア10377

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

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

m.ts10806

2021/04/27 11:48

質問者はLaravel6.5らしいのでそこはバージョン合わせてあげた方が。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問