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

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

ただいまの
回答率

90.61%

  • PHP

    19884questions

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

  • Laravel 5

    1803questions

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

[Laravel5.4]ReflectionException Class App\Http\Controllers\Request does not exist

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 2,245

yuus2733

score 101

Lara帳
こちらを参考にしています。

ArticlesController.php

<?php
namespace App\Http\Controllers;

use App\Article;
use App\Http\Controllers\Controller;

use App\Http\Requests\ArticleRequest;


class ArticlesController extends Controller
{
    public function index()
    {
      $articles = Article::all();
      return view('articles.index' , compact('articles'));
    }
    public function show($id)
    {
      $article = Article::findOrFail($id);
      return view('articles.show' , compact('article'));
    }
    public function create()
    {
      return view('articles.create');
    }
    public function store(Request $request)
    {
      Article::create($request->all());
      return redirect( 'articles' );
    }


}

ArticlesRequest.php

<?php

namespace App\Http\Requests;

use App\Http\Requests\Request;

class ArticleRequest extends Request
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'title' => 'required|min:3',
            'body' => 'required',
            'published_at' => 'required|date',
        ];
    }
}


Web.php

Route::get('/' , 'WelcomeController@index');
Route::get('contact' , 'WelcomeController@contact');
Route::get('about' , 'PagesController@about');
Route::get('articles' , 'ArticlesController@index');
Route::get('articles/create' , 'ArticlesController@create');
Route::get('articles/{id}' , 'ArticlesController@show');
Route::post('articles' , 'ArticlesController@store');


上記の通りに真似て手打ちしました。
しかし、タイトルのエラーが返ってきます。
エラー名で検索して、
terateil Q:28714
こちらに行き着きました。

私のこのエラーもオートロードができてないということなのでしょうか。
ArticlesControllerに、ArticleRequestクラスを書き足す場合どう書けばいいでしょうか?
Laravelドキュメント
のバリデーション部分を読んでみたのですが、仕様変更されたかどうかわからなかったです。
少し進んでは引っかかってしまってお手数おかけします、ご教示お願いします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

ArticlesControllerstoreメソッドでRequestクラスをタイプヒントに書いていますが、その名前空間にはRequestクラスが存在しないのでエラーになります。

Lara帳の方を見てみると、Requestではなく、ArticleRequestになっていますよね。
なので、storeメソッドのRequestの部分をArticleRequestにすると解決すると思います。

public function store(Request $request)
↓
public function store(ArticleRequest $request)

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/07 19:07 編集

    ありがとうございます。
    投稿前にその部分直し忘れていました。しかし、その部分を直すと今度は
    FatalErrorException Class 'App\Http\Requests\Request' not found(in ArticleRequest.php (line 7))に変わります。ArticlesControllerとArticleRequestを行ったり来たりして書き換えていたのですが投稿前の状態になってしまったんです。一つ前のステップで新規記事投稿はできています。
    バリデーション部分に入ったらエラーが出てしまいました。

    キャンセル

  • 2017/09/07 19:11 編集

    Requestクラスが存在しませんね。
    途中のバージョン(5.3)からそのRequestクラスが生成されなくなったのでそういうエラーが起きます。

    app/Http/Requests/Request.phpを用意しましょう。
    https://github.com/laravel/laravel/blob/5.1/app/Http/Requests/Request.php
    こちらのソースをそのまま持ってきてください。

    キャンセル

  • 2017/09/07 19:19

    いつもありがとうございます!できました。
    以前のバージョンからの変更点はすべてドキュメントにまとめられているのでしょうか?
    今回のこともRequestクラスが生成されなくなったから別途ファイルの用意が必要という事がわかっていれば自己解決出来たと思います・・・。お忙しいでしょうし、少しでも手を煩わせる回数を減らせればと思うので、変更点まとめられている場所がありましたら教えていただけないでしょうか。

    キャンセル

  • 2017/09/07 19:25 編集

    全てがまとめられているわけではありませんが、大抵は
    https://readouble.com/laravel/5.4/ja/releases.html
    のリリースノートだったり、
    https://readouble.com/laravel/5.2/ja/upgrade.html
    https://readouble.com/laravel/5.3/ja/upgrade.html
    https://readouble.com/laravel/5.4/ja/upgrade.html
    のアップグレードガイドなどをみると把握がしやすくなると思います。

    表面的なディレクトリ構成とかは
    https://github.com/laravel/laravel
    のBranchがバージョンごとに切られているので、それを選択してみてどのバージョンからディレクトリが無くなってるとか確認すると良いです。

    キャンセル

  • 2017/09/07 19:47

    アップデートされる度にバージョンごとのリリースノートやアップグレードガイドを見ればいいということですね!ありがとうございます。
    gitのほうでの確認もがんばってできるようにします。

    キャンセル

+1

5.4ではFormRequestが継承元なのでこれのほうがいいです。
5.1のRequest.phpもこれなので結局は同じことですけど。

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class ArticleRequest extends FormRequest
{
}

5.4でphp artisan make:request ArticleRequestで作成すれば最初からこうだったはずです。
余計な変更して動かなくなってます。
情報が古くなってるLara帳見てるから間違えると何度でも書く。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/07 19:44

    ありがとうございます。確かに、最初にmake:requestで作ったときはその中身でした。
    ですが、多分他のところ打ち間違えていたのもあってFormRequestが見つからないというエラーも出ました。最終的にLara帳の見本通りに直したところ、Requestクラスが見つからない、となったのでfagaiさんの助言いただいて動作するようになったという次第です。
    自分でドキュメント等々、見返すのに慣れたらこんな失敗もしなくなると思うのですが・・・。

    キャンセル

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

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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

  • PHP

    19884questions

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

  • Laravel 5

    1803questions

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