前提
・Windows 10
・Laravel 8.0
背景
Laravel入門書進めていく中で参考書通り進めたがつまづく。 模索した結果、解決したのでメモ
事象
LaravelのAuth機能を実装しようと以下コードを実装
<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateUsersTable extends Migration { public function up() { Schema::create('users', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('email')->unique(); $table->string('password'); $table->rememberToken(); $table->timestamps(); }); } public function down() { Schema::dropIfExists('users'); } }
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Http\Response; use App\Http\Requests\HelloRequest; use Validator; use Illuminate\Support\Facades\DB; use App\Person; use Illuminate\Support\Facades\Auth; use App\Models\User; use Illuminate\Support\Facades\Storage; use App\MyClasses\MyService; class HelloController extends Controller { public function index(Request $request) { $user = Auth::user(); $sort = $request->sort; $items = Person::orderBy($sort, 'asc')->simplePaginate(5); $param = [ 'items' => $items, 'sort' => $sort, 'user' => $user ]; return view('hello.index', $param); } }
<!DOCTYPE html> <html lang="ja"> <head> <title>Hello/Index</title> </head> <body> <h1>Hello/Index</h1> @if(Auth::check()) <p>USER:{{$user->name . '(' . $user->email . ')'}}</p> @else <p>not login(<a href="/login">login</a>|<a href="/register">register</a> )</p> @endif </body>
実行、以下エラーが発生
Error Class 'App\User' not found
ん?
なんのエラーだ?
試したこと
try1
stackoverflow、tetatailを参考にエラー原因を特定。
どうやらApp/User.phpのクラス宣言がうまくいっていないっぽい。
実はこの手順でAuth機能を作ってからなにもいじってなかったや。
ということで、Controllerファイルを確認すると
(中略) use App/Models/Person; (中略)
あ、クラス呼べてないですね。
今回モデルファイルPerson.phpはAppファイル直下にあるので、以下に変更が必要だ。
(中略) use App/Person; // App直下のPerson.phpを呼び出す (中略)
結果
解決!無事、Auth機能が実装できた!
結論
エラーの要因は ただ、指定するクラスのパスが違っただけでした。
所見
Laravel6.0以降から
php artisan make:auth
が使えなくなったため、Auth機能の実装は以前より手間が増えた。
まだ学んでいないところで、メリットはあるのかな?
上記の'php artisan meke:auth'が使えないときのAuth機能の実装もつまづいたので、こちらに掲載します。