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

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

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

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

PHP

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

Q&A

解決済

1回答

559閲覧

あるはずなのに、Target class [〇〇Controller] does not exist.と出てしまう

mikeko0901

総合スコア227

Laravel

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

PHP

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

0グッド

0クリップ

投稿2020/12/04 06:50

編集2020/12/04 06:56

Twitterのように、ユーザーをフォローする機能を作成しています。
ユーザーがユーザーをフォローするところで、該当のControllerを作ってはいるのですが、

Target class [UserFollowController] does not exist.

と出てしまいます。
どこかが間違っているとは思うのですが、どう考えてもわかりません……
以下コードです。アドバイスいただけますと幸いです。
(Laravel 8.4を利用しております。)

【状況】
/users/1 (userのid=1のページで、Followボタンをクリックすると)・・・
イメージ説明
以下のエラーが出ます。

イメージ説明

■view users/{id}

<div class="row"> <aside class="col-sm-4"> <div class="card"> <div class="card-header"> <h3 class="card-title">{{ $user->name }}</h3> </div> <div class="card-body"> {{ $user->email }} </div> @if (Auth::id() != $user->id) @if (Auth::user()->is_following($user->id)) <form method="POST" action="{{ route('user.unfollow', ['id' => $user->id]) }}"> @csrf <input type="submit" class="btn btn-danger btn-block" value="Unfollow"> </form> @else <form method="POST" action="{{ route('user.follow', ['id' => $user->id]) }}"> @csrf <input type="submit" class="btn btn-primary btn-block" value="Follow"> </form> @endif @endif </div> </aside> </div>

■route(web.php)

<?php use Illuminate\Support\Facades\Route; use App\Http\Controllers\MicropostsController; use App\Http\Controllers\UsersController; Route::group(['middleware' => ['auth']], function () { Route::get('users', [UsersController::class, 'index'])->name('users.index'); Route::get('users/{id}', [UsersController::class, 'show'])->name('users.show'); Route::group(['prefix' => 'users/{id}'], function () { //フォローの機能 Route::post('follow', [UserFollowController::class, 'store'])->name('user.follow'); Route::delete('unfollow', [UserFollowController::class, 'destroy'])->name('user.unfollow'); }); });

■Controller(UserFollowController)

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Controllers\Controller; class UserFollowController extends Controller { public function store(Request $request, $id) { \Auth::user()->follow($id); return back(); } public function destroy($id) { \Auth::user()->unfollow($id); return back(); } }

■Model (User モデル)

<?php namespace App\Models; use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Laravel\Fortify\TwoFactorAuthenticatable; use Laravel\Jetstream\HasProfilePhoto; use Laravel\Sanctum\HasApiTokens; use Illuminate\Database\Eloquent\Model; //追加してみた class User extends Authenticatable { use HasApiTokens; use HasFactory; use HasProfilePhoto; use Notifiable; use TwoFactorAuthenticatable; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'name', 'email', 'password', ]; /** * The attributes that should be hidden for arrays. * * @var array */ protected $hidden = [ 'password', 'remember_token', 'two_factor_recovery_codes', 'two_factor_secret', ]; public function followings() { //自分が誰をフォローしているか //return $this->belongsToMany(User::class, 'user_follow', 'user_id', 'follow_id')->withTimestamps(); techの書き方 return $this->belongsToMany('App\Models\User', 'user_follow', 'user_id', 'follow_id')->withTimestamps(); } public function followers() { //return $this->belongsToMany(User::class, 'user_follow', 'follow_id', 'user_id')->withTimestamps(); techの書き方 return $this->belongsToMany('App\Models\User', 'user_follow', 'follow_id', 'user_id')->withTimestamps(); } public function follow($userId) { //フォロー用の関数を定義 //すでにフォローしているかの確認 $exist = $this->is_following($userId); //フォロー先が自分か $its_me = $this->id == $userId; if($exist || $its_me) { return false; } else { $this->followings()->attach($userId); //attach()で中間テーブルに登録する。削除はdetach return true; } } public function unfollow($userId) { $exist = $this->is_following($userId); $its_me = $this->id == $userId; if($exist && !$its_me) { $this->followings()->detach($userId); return true; } else { return false; } } public function is_following($userId) { return $this->followings()->where('follow_id', $userId)->exists(); //exists()でbooleanが戻る } /** * The attributes that should be cast to native types. * * @var array */ protected $casts = [ 'email_verified_at' => 'datetime', ]; /** * The accessors to append to the model's array form. * * @var array */ protected $appends = [ 'profile_photo_url', ]; }

フォルダ構成
イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

diff

1<?php 2 3use Illuminate\Support\Facades\Route; 4use App\Http\Controllers\MicropostsController; 5use App\Http\Controllers\UsersController; 6+ use App\Http\Controllers\UserFollowController; 7 8Route::group(['middleware' => ['auth']], function () { 9 Route::get('users', [UsersController::class, 'index'])->name('users.index'); 10 Route::get('users/{id}', [UsersController::class, 'show'])->name('users.show'); 11 12 Route::group(['prefix' => 'users/{id}'], function () { //フォローの機能 13 Route::post('follow', [UserFollowController::class, 'store'])->name('user.follow'); 14 Route::delete('unfollow', [UserFollowController::class, 'destroy'])->name('user.unfollow'); 15 16 }); 17});

投稿2020/12/04 06:58

phper.k

総合スコア3923

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

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

mikeko0901

2020/12/04 07:07

web.phpにuseしなければいけないことを忘れていました… ありがとうございました!できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問