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

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

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

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

受付中

【Laravel】作成したMiddlewareファイルが使用できない

Kushi
Kushi

総合スコア0

Laravel

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

1回答

0評価

0クリップ

347閲覧

投稿2022/01/13 09:58

前提

Laravelを勉強している者です。
ネットで調べられる範囲で原因の調査を行いましたが、解決に繋がらずご相談させて下さい。
プログラム初心者ですが、ご指導ご鞭撻の程お願いします。

■環境
使用PC: Windows10
Laravel Ver: 8.73.2
勉学に使用している教材: PHPフレームワーク Laravel入門 (Amazonサイト)

■手順(※LaravelにてMiddlewareを勉強中に問題と遭遇)
1, 「Middleware」ファイルにHelloMiddlewareファイルを新規に作成。
2, 本の記載通りにHelloMiddlewareファイルにコードを記載。
3, 「Kernel.php」ファイルにHelloMiddlewareが使用できるように個別登録 ($routeMiddlewareに該当パスを記載)
4, 「web.php」にてルート情報を記載。
5, 「HelloController」にて、indexメソッドを修正
6, 「index.blade.php」のテンプレートを修正。

※最初にControllerを学ぶ際に「HelloController」を作成しており、以来はHelloControllerを使用して勉強しています。

発生している問題

現在、以下のErrorが表示されており問題の根本原因が分からない状況です。

Illuminate\Contracts\Container\BindingResolutionException Target class [HelloMiddleware] does not exist.

該当ソースコード

HelloMiddleware.php

<?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; class HelloMiddleware { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @param string|null $redirectToRoute * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse|null */ public function handle($request, Closure $next) { $data = [ ['name'=>'takoyaki', 'mail'=>'tako@google.com'], ]; $request->merge(['data'=>$data]); return $next($request); } }

Kernel.php

protected $routeMiddleware = [ 'auth' => \App\Http\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, 'can' => \Illuminate\Auth\Middleware\Authorize::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class, 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, 'hello' => \App\Http\Middleware\HelloMiddleware::class, ]; } ※$routeMiddleware部分以外は割愛(特に操作していないので)

web.php

<?php use Illuminate\Support\Facades\Route; use App\Http\Controller\HelloController; /* |-------------------------------------------------------------------------- | Web Routes |-------------------------------------------------------------------------- | | Here is where you can register web routes for your application. These | routes are loaded by the RouteServiceProvider within a group which | contains the "web" middleware group. Now create something great! | */ Route::get('hello', 'HelloController@index')->middleware(HelloMiddleware::class); Route::post('hello', 'HelloController@post');

HelloController.php

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Http\Response; class HelloController extends Controller{ public function index(Request $request) { return view('hello.index', ['data'=>$request->data]); } public function post(Request $request) { return view('hello.index', ['msg'=>'正しい']); } }

index.blade.php

@extends('layouts.helloapp') @section('title', 'Index') @section('content') <p>ここが原点</p> <table> @foreach($data as $item) <tr> <th>{{$item('name')}}</th> <td>{{$item('mail')}}</td> </tr> @endforeach </table> @endsection

試したこと

・キャッシュのクリア
php artisan cache:clear; php artisan config:clear; php artisan route:clear; php artisan view:clear; composer dump-autoload で実行。

・web.phpファイルにてHelloMiddlewareの指定を変更
旧:Route::get('hello', 'HelloController@index')->middleware(HelloMiddleware::class);
新:Route::get('hello', 'HelloController@index')->middleware('hello');

・app/Providers/RouteServiceProvider.phpで定義されているデフォルトのネームスペースにて、コメントアウトしていない事を確認。また、Punbic bootの 'api'&'web' に「->namespace($this->namespace)」の一文を記述。(詳細は下記)

RouteServiceProvider.php

<?php namespace App\Providers; use Illuminate\Cache\RateLimiting\Limit; use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider; use Illuminate\Http\Request; use Illuminate\Support\Facades\RateLimiter; use Illuminate\Support\Facades\Route; class RouteServiceProvider extends ServiceProvider { /** * The path to the "home" route for your application. * * This is used by Laravel authentication to redirect users after login. * * @var string */ public const HOME = '/home'; /** * The controller namespace for the application. * * When present, controller route declarations will automatically be prefixed with this namespace. * * @var string|null */ protected $namespace = 'App\Http\Controllers'; /** * Define your route model bindings, pattern filters, etc. * * @return void */ public function boot() { $this->configureRateLimiting(); $this->routes(function () { Route::prefix('api') ->middleware('api') ->namespace($this->namespace) ->group(base_path('routes/api.php')); Route::middleware('web') ->namespace($this->namespace) ->group(base_path('routes/web.php')); }); } /** * Configure the rate limiters for the application. * * @return void */ protected function configureRateLimiting() { RateLimiter::for('api', function (Request $request) { return Limit::perMinute(60)->by(optional($request->user())->id ?: $request->ip()); }); } }

###最後に

以上が私の現状です。何か不明点あればお手数ですがご連絡頂きたいです。
お手数ですがご教示よろしくお願いいたします。

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Laravel

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