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

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

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

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

PHP

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

受付中

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

attakrui
attakrui

総合スコア0

Laravel

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

PHP

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

1回答

0評価

0クリップ

8閲覧

投稿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

sample/src/app/Http/Controllers/PostsController.php <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Post; use App\Http\Requests\PostRequest; use Illuminate\Support\Facades\Auth; use PostService; class PostsController extends Controller { public function __construct() { $this->middleware('auth')->except(['index', 'show']); } public function index() { $posts = Post::orderBy('created_at', 'desc')->paginate(10); return view('bbs.index', ['posts' => $posts]); } public function show(Request $request, $id) { $post = Post::findOrFail($id); return view('bbs.show', [ 'post' => $post, ]); } public function create() { return view('bbs.create'); } public function store(PostRequest $request) { $savedata = [ 'name' => $request->name, 'subject' => $request->subject, 'message' => $request->message, 'user_id' => Auth::id(), ]; $post = new Post; $post->fill($savedata)->save(); return redirect('/bbs')->with('poststatus', '新規投稿しました'); } public function edit($post_id) { $post = Post::findOrFail($post_id); PostService::check_permission(); return view('bbs.edit', ['post' => $post]); } public function update(PostRequest $request, Post $post) { PostService::check_permission(); $savedata = [ 'name' => $request->name, 'subject' => $request->subject, 'message' => $request->message, 'user_id' => Auth::user()->id, ]; $post = new Post; $post->fill($savedata)->save(); return redirect('/bbs')->with('poststatus', '投稿を編集しました'); } public function destroy($id) { $post = Post::findOrFail($id); PostService::check_permission(); $post->comments()->delete(); $post->delete(); return redirect('/bbs')->with('poststatus', '投稿を削除しました'); } }

php

sample/src/app/services/PostService.php <?php class PostService { public function check_permission() { if(!(\Auth::user()->can('admin') || \Auth::user()->id == $post->user_id)) { abort(403); } } }

php

sample/src/app/Providers/AppServiceProvider.php <?php namespace App\Providers; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { /** * Register any application services. * * @return void */ public function register() { $this->app->bind('App\Services\PostService'); // 追記 } /** * Bootstrap any application services. * * @return void */ public function boot() { // } }

php

sample/src/app/Providers/PostServiceProvider.php <?php namespace App\Providers; use Illuminate\Support\ServiceProvider; class PostServiceProvider extends ServiceProvider { /** * Register services. * * @return void */ public function register() { $this->app->bind( 'PostService', // キー名 'App\Services\PostService' // クラス名 ); } /** * Bootstrap services. * * @return void */ public function boot() { // } }

php

sample/src/config/app.php <?php return [ 'name' => env('APP_NAME', 'Laravel'), 'env' => env('APP_ENV', 'production'), 'debug' => env('APP_DEBUG', true), 'url' => env('APP_URL', 'http://localhost'), 'asset_url' => env('ASSET_URL', null), 'timezone' => 'UTC', 'locale' => 'en', 'fallback_locale' => 'en', 'faker_locale' => 'ja_JP', 'key' => env('APP_KEY'), 'cipher' => 'AES-256-CBC', 'providers' => [ /* * Laravel Framework Service Providers... */ Illuminate\Auth\AuthServiceProvider::class, Illuminate\Broadcasting\BroadcastServiceProvider::class, Illuminate\Bus\BusServiceProvider::class, Illuminate\Cache\CacheServiceProvider::class, Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, Illuminate\Cookie\CookieServiceProvider::class, Illuminate\Database\DatabaseServiceProvider::class, Illuminate\Encryption\EncryptionServiceProvider::class, Illuminate\Filesystem\FilesystemServiceProvider::class, Illuminate\Foundation\Providers\FoundationServiceProvider::class, Illuminate\Hashing\HashServiceProvider::class, Illuminate\Mail\MailServiceProvider::class, Illuminate\Notifications\NotificationServiceProvider::class, Illuminate\Pagination\PaginationServiceProvider::class, Illuminate\Pipeline\PipelineServiceProvider::class, Illuminate\Queue\QueueServiceProvider::class, Illuminate\Redis\RedisServiceProvider::class, Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, Illuminate\Session\SessionServiceProvider::class, Illuminate\Translation\TranslationServiceProvider::class, Illuminate\Validation\ValidationServiceProvider::class, Illuminate\View\ViewServiceProvider::class, App\Providers\PostServiceProvider::class, /* * Package Service Providers... */ /* * Application Service Providers... */ App\Providers\AppServiceProvider::class, App\Providers\AuthServiceProvider::class, // App\Providers\BroadcastServiceProvider::class, App\Providers\EventServiceProvider::class, App\Providers\RouteServiceProvider::class, ], 'aliases' => [ 'App' => Illuminate\Support\Facades\App::class, 'Arr' => Illuminate\Support\Arr::class, 'Artisan' => Illuminate\Support\Facades\Artisan::class, 'Auth' => Illuminate\Support\Facades\Auth::class, 'Blade' => Illuminate\Support\Facades\Blade::class, 'Broadcast' => Illuminate\Support\Facades\Broadcast::class, 'Bus' => Illuminate\Support\Facades\Bus::class, 'Cache' => Illuminate\Support\Facades\Cache::class, 'Config' => Illuminate\Support\Facades\Config::class, 'Cookie' => Illuminate\Support\Facades\Cookie::class, 'Crypt' => Illuminate\Support\Facades\Crypt::class, 'DB' => Illuminate\Support\Facades\DB::class, 'Eloquent' => Illuminate\Database\Eloquent\Model::class, 'Event' => Illuminate\Support\Facades\Event::class, 'File' => Illuminate\Support\Facades\File::class, 'Gate' => Illuminate\Support\Facades\Gate::class, 'Hash' => Illuminate\Support\Facades\Hash::class, 'Lang' => Illuminate\Support\Facades\Lang::class, 'Log' => Illuminate\Support\Facades\Log::class, 'Mail' => Illuminate\Support\Facades\Mail::class, 'Notification' => Illuminate\Support\Facades\Notification::class, 'Password' => Illuminate\Support\Facades\Password::class, 'Queue' => Illuminate\Support\Facades\Queue::class, 'Redirect' => Illuminate\Support\Facades\Redirect::class, 'Redis' => Illuminate\Support\Facades\Redis::class, 'Request' => Illuminate\Support\Facades\Request::class, 'Response' => Illuminate\Support\Facades\Response::class, 'Route' => Illuminate\Support\Facades\Route::class, 'Schema' => Illuminate\Support\Facades\Schema::class, 'Session' => Illuminate\Support\Facades\Session::class, 'Storage' => Illuminate\Support\Facades\Storage::class, 'Str' => Illuminate\Support\Str::class, 'URL' => Illuminate\Support\Facades\URL::class, 'Validator' => Illuminate\Support\Facades\Validator::class, 'View' => Illuminate\Support\Facades\View::class, 'UserService' => App\Facades\PostService::class, ], ];

試したこと

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

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

docker利用

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

m.ts10806
m.ts10806

2021/04/27 11:09

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

2021/04/27 11:17

はい、どこにもおいていない状況になります
m.ts10806
m.ts10806

2021/04/27 11:33

ではエラーの通りですね。 namespaceまわりをもう少ししっかり見ると見えてくると思います。 https://www\.php\.net/manual/ja/language\.namespaces\.php
attakrui
attakrui

2021/04/28 04:58

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

2021/04/28 14:01

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

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Laravel

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

PHP

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