表題の通りDBの情報をビューで表示したいのですが、上手くいかずエラーが発生するため、解決に向けご教示をお願いします。
エラー表示
Undefined variable: employees (View: /var/www/html/laravel-app/resources/views/index.blade.php)
web.php
Route::get('/', function () { return view('/index'); }); Auth::routes(); Route::get('/index', 'HomeController@index')->name('index'); Route::group(['middleware' => 'auth'], function () { Route::resource('goods', 'GoodsController', ['only' => ['create', 'store', 'destroy']]); Route::resource('employee', 'EmployeesController', ['only' => ['index']]); });
Employee.php
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Employee extends Model { protected $fillable = ['emlpoyee_id','employee_name']; public function goods() { return $this->hasMany(Goods::class); } }
EmployeesController.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Goods; use App\Employee; //class GoodsController extends Controller class EmployeesController extends Controller { public function index() { $employees = Employee::orderBy('id','desc')->get(); return view('index', [ 'employees' => $employees, ]); } }
index.blade.php
extends('layouts.app') @section('content') <table class="table table-hover"> <thead class="thead-dark"> <tr> <th scope="col">社員番号</th> <th scope="col">氏名</th> <th scope="col" colspan="4">貸与品</th> </tr> </thead> <tbody> <tr> <td>111</td> <td>山田</td> <td>制服</td> <td>上着</td> <td>靴</td> <td>その他</td> </tr> </tbody> <tbody> @foreach($employees as $employee) <tr> <td scope="row">{{ $employee->employee_id }}</td> <td scope="row">{{ $employee->employee_name }}</td> </tr> @endforeach </tbody> </table> @endsection
foreaceとは何でしょうか。
結局は「出ているエラーの通り」ですね。
LaravelではなくPHPです。
失礼しました。foreachの間違いであり、修正しました。
index.blade.phpは1つだけですか?また、どのurlでアクセスするときにエラーになりますか?
提示したコードに間違いはありませんか?
index.php -> index.blade.php じゃないか?
web.php に EmployeesController@index を定義していないのに、index() でいいの?web.php と Controller どっちを正しい情報と判断すればいい?
SoshiAdachi 様
index.blade.phpはひとつだけです。
「index」 urlにアクセスで上記エラーとなっております。
「web.php に EmployeesController の index() の呼び出しを定義していない」のに、実行されているのが、index() っておかしくない?
phper.k 様
■index.php -> index.blade.php じゃないか?
→bladeが抜けており、修正いたしました。
■web.php に EmployeesController@index を定義していないのに、index() でいいの?web.php と Controller どっちを正しい情報と判断すればいい?
→web.phpにてindexを定義しておりませんでした。
Route::resource('employee','EmployeesController',['only'=>['index']]);
に修正したのですが、定義としては合っていますでしょうか?
また、修正してもエラー内容が変わりない状態です。
お手数おかけしますがご教示いただければと思います。
> 定義としては合っていますでしょうか?
あっているかどうかというより、手元の状況を正しく伝えて欲しいのです。
そうでないと問題を再現できないですし、前提となる条件が違っていては回答しても無駄なやり取りが発生し、お互い疲弊するだけです。
phper.k 様
大変失礼いたしました。web.phpのみ修正いたしました。
エラー画面としては、
■index.blade.phpの
「 @foreach($employees as $employee) 」がエラー示している状態です。
'`EmployeesController' <- ここに余計な「`」 があるけど、手元の状況と同じ?
手元でも「`」がありましたので、削除しましたが変わりない状態です。