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

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

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

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Vuex

Vuexは、Vue.js アプリケーションのための状態管理ライブラリです。アプリケーション内で使用するコンポーネントのための集中データストアを提供。コンポーネント同士でデータをやり取りし、処理のフローを一貫させたり、データの見通しを良くすることができます。

Laravel

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

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

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

Q&A

解決済

1回答

5373閲覧

Laravel + Vue でpost(フォロー)した時に500エラーになる

pmo23

総合スコア14

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Vuex

Vuexは、Vue.js アプリケーションのための状態管理ライブラリです。アプリケーション内で使用するコンポーネントのための集中データストアを提供。コンポーネント同士でデータをやり取りし、処理のフローを一貫させたり、データの見通しを良くすることができます。

Laravel

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

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

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

0グッド

0クリップ

投稿2019/09/28 07:05

編集2019/09/28 09:50

以下のサイトを参考にしました。
リンク内容
宜しくお願い致します。

###エラー
POST 500 (Internal Server Error)

###ログファイル

local.ERROR: Class 'App\Http\Controllers\User' not found {"userId":1,"exception":"[object] (Symfony\Component\Debug\Exception\FatalThrowableError(code: 0): Class 'App\Http\Controllers\User' not found at /var/www/twitter_pj/app/Http/Controllers/FollowUserController.php:16)

###api.php

Route::post('/follow-users', 'FollowUserController@store'); Route::delete('/follow-users/{id}', 'FollowUserController@destroy');

###FollowUser.php

<?php namespace App; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\Pivot; class FollowUser extends Model { protected $table = 'follow_users'; public $timestamps = false; protected $guarded = []; }

###User.php

<?php namespace App; use Illuminate\Notifications\Notifiable; use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { use Notifiable; /** * リレーションシップ - tweetsテーブル * @return \Illuminate\Database\Eloquent\Relations\HasMany */ public function tweets() { return $this->hasMany('App\Tweet'); } public function followUsers() { return $this->belongsToMany(self::class, 'follow_users', 'user_id', 'followed_user_id') ->using(FollowUser::class); } /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'name', 'email', 'password', 'tweets' ]; /** * The attributes that should be hidden for arrays. * * @var array */ protected $hidden = [ 'email_verified_at', 'password', 'remember_token', ]; /** * The attributes that should be cast to native types. * * @var array */ protected $casts = [ 'email_verified_at' => 'datetime', ]; protected $visible = [ 'id', 'name', 'email', 'tweets', ]; }

###FollowUserController.php

<?php namespace App\Http\Controllers; use App\FollowUser; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Storage; class FollowUserController extends Controller { public function __construct() { // 認証が必要 $this->middleware('auth'); } // フォロー public function store(Request $request) { $followedUser = User::where('id', $request->id); FollowUser::Create([ 'user_id' => Auth::user()->id, 'followed_user_id' => $followedUser->id, ]); return response()->json(['result' => true]); } // フォロー解除 public function destroy($id) { $followedUser = User::find($id); $user = Auth::user(); $user->followUsers()->detach($followedUser->id); return response()->json(['result' => true]); } }

###UserDetail.vue

<template> <div v-if="user" class="tweet-detail"> <nav class="panel panel-default"> <div class="list-group"> <img src="" alt="icon" class="img-circle"> <div class="list-group-item"> <span> {{ user.name }}さん </span> </div> <RouterLink class="tweet__overlay" :to="`/users/${user.id}/edit`" > <div class="list-group-item"> <span> 編集 </span> </div> </RouterLink> <!-- フォロー機能 --> <div> <button v-if="currentFollowing" type="button" class="btn btn-point btn-raised" @click="unfollow"> <div v-if="sending" class="spinner-border spinner-border-sm" role="status"> <span class="sr-only">Sending...</span> </div> <div v-else>フォロー中</div> </button> <button v-else type="button" class="btn btn-default btn-raised" @click="follow"> <div v-if="sending" class="spinner-border spinner-border-sm" role="status"> <span class="sr-only">Sending...</span> </div> <div v-else> フォローする <i class="material-icons">add</i> </div> </button> </div> </div> </nav> <div class="tweet-list"> <div class="grid"> <UserTweet class="grid__item" v-for="tweet in user.tweets" :key="tweet.id" :item="tweet" /> </div> </div> </div> </template> <script> import { OK } from '../util' import UserTweet from '../components/UserTweet.vue' import axios from 'axios' export default { components: { UserTweet, }, props: { type: String, required: true, type: Boolean, default: false, id: { type: String, required: true }, }, data () { return { user: null, currentFollowing: this.following, sending: false, } }, methods: { async fetchUser () { const response = await axios.get(`/api/users/${this.id}`) if (response.status !== OK) { this.$store.commit('error/setCode', response.status) return false } this.user = response.data this.user.tweets = response.data.tweets }, async follow() { if (this.sending) { return } this.sending = true const data = { id: this.id } await axios.post('/api/follow-users', data) this.currentFollowing = true this.sending = false }, async unfollow() { if (this.sending) { return } this.sending = true await axios.delete(`/follow-users/${this.id}`) this.currentFollowing = false this.sending = false } }, watch: { $route: { async handler () { await this.fetchUser() }, immediate: true } } } </script>

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

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

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

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

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

mikkame

2019/09/28 07:16

500とは、サーバ側で処理中にエラーが発生しました。という意味です 具体的なエラー内容はlaravelのログファイルに書いてあるはずです。 laravelのエラーログを掲示してください
pmo23

2019/09/28 08:30

提示しました。 宜しくお願い致します。
guest

回答1

0

ベストアンサー

local.ERROR: Class 'App\Http\Controllers\User' not found {"userId":1,"exception":"[object] (Symfony\Component\Debug\Exception\FatalThrowableError(code: 0): Class 'App\Http\Controllers\User' not found at /var/www/twitter_pj/app/Http/Controllers/FollowUserController.php:16)

原因はこちらのエラーに書いてある通りですのでエラーの読み方を勉強しましょう。

今回の場合は下記のように読み解きます。

  • var/www/twitter_pj/app/Http/Controllers/FollowUserController.php:16

FollowUserController の16行目で

  • Class 'App\Http\Controllers\User' not found

App\Http\Controllers\User というクラスが見つかりません。

という風に書いてあります。

つまり、FollowUserController の16行目でいきなり呼び出しているUserというクラスは
App\Http\Controllers\Userとして、名前が解決されますが、そのようなクラスは定義されていないのです。
Userは今回のケースではApp\Userで定義されていますので
use App\User;をFollowUserControllerに加筆し、名前を解決させるか
16行目を

$followedUser = \App\User::where('id', $request->id);

とする事で解決できるでしょう

投稿2019/09/28 10:04

mikkame

総合スコア5036

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問