前提・実現したいこと
dockerを利用してローカル環境にlaravelでサイトを作ろうとしています。
お手本のサイト
https://note.com/mukae9/n/n2ed6be437f0d
ビューファイルを更新するとhttp://localhostにアクセスしたときにエラーが出てしまいます。
発生している問題・エラーメッセージ
http://localhostに表示されているエラーメッセージ
$stocks is undefined Make the variable optional in the blade template. Replace {{ $stocks }} with {{ $stocks ?? '' }} $stocks is undefined Make the variable optional in the blade template. Replace {{ $stocks }} with {{ $stocks ?? '' }}
↓該当箇所のスクリーンショット
このエラーだけ見ると「$stock」という変数に問題があるように見えます。
該当のソースコード
↓ビューファイル
php
1//shop.blade.php 2@extends('layouts.app') 3 4@section('content') 5<div class="container-fluid"> 6 <div class=""> 7 <div class="mx-auto" style="max-width:1200px"> 8 <h1 style="color:#555555; text-align:center; font-size:1.2em; padding:24px 0px; font-weight:bold;">商品一覧</h1> 9 <div class=""> 10 <div class="d-flex flex-row flex-wrap"> 11 商品一覧を出したい 12 13 {{-- 追加 --}} 14 15 @foreach($stocks as $stock) 16 {{$stock->name}} <br> 17 {{$stock->fee}}円<br> 18 <img src="/image/{{$stock->imgpath}}" alt="" class="incart" > 19 <br> 20 {{$stock->detail}} <br> 21 @endforeach 22 {{$stocks->links()}} 23 24 {{-- ここまで --}} 25 </div> 26 </div> 27 </div> 28 </div> 29</div> 30@endsection
↓コントローラー
php
1//ShopController.php 2<?php 3 4namespace App\Http\Controllers; 5 6use App\Models\Stock; 7 8use Illuminate\Http\Request; 9 10class ShopController extends Controller 11{ 12 public function index() 13 { 14 $stocks = Stock::Paginate(6); 15 return view('shop',compact('stocks')); 16 } 17}
↓ルーティング
php
1//web.php 2<?php 3 4/* 5|-------------------------------------------------------------------------- 6| Web Routes 7|-------------------------------------------------------------------------- 8| 9| Here is where you can register web routes for your application. These 10| routes are loaded by the RouteServiceProvider within a group which 11| contains the "web" middleware group. Now create something great! 12| 13*/ 14 15Route::get('/', function () { 16 return view('shop'); 17}); 18Auth::routes(); 19
試したこと
ビューファイルを更新前の状態(foreach文や変数が含まれない状態)に戻すと、サイトはブラウザから正常に表示できます。
↓更新前のビューファイル
php
1//shop.blade.php 2@extends('layouts.app') 3 4@section('content') 5<div class="container-fluid"> 6 <div class=""> 7 <div class="mx-auto" style="max-width:1200px"> 8 <h1 style="color:#555555; text-align:center; font-size:1.2em; padding:24px 0px; font-weight:bold;">商品一覧</h1> 9 <div class=""> 10 <div class="d-flex flex-row flex-wrap"> 11 商品一覧を出したい 12 </div> 13 </div> 14 </div> 15 </div> 16</div> 17@endsection
1つ気になるのが、冒頭に記載したお手本のサイトには
これではMVCのCであるControllerを利用していない事になるのでルーティングは
Route::get('/', 'ShopController@index');
としてみましょう。
とあるのですが、Route::get('/', 'ShopController@index');
をどこに記載すればいいのかわからず記載できていません。
ルーティングのようなので、web.php
の末尾に次のように記載することを試しました。
php
1<?php 2 3/* 4|-------------------------------------------------------------------------- 5| Web Routes 6|-------------------------------------------------------------------------- 7| 8| Here is where you can register web routes for your application. These 9| routes are loaded by the RouteServiceProvider within a group which 10| contains the "web" middleware group. Now create something great! 11| 12*/ 13 14Route::get('/', function () { 15 return view('shop'); 16}); 17Auth::routes(); 18Route::get('/', 'ShopController@index');
この場合はまた別のエラーになります。
↓その時のエラー内容
Symfony\Component\Debug\Exception\FatalThrowableError Class 'App\Http\Controllers\Controller' not found
お手本のサイトのコードをコピーしながら環境を作っているのですが、
ルーティングの記述がおかしいのか
変数の指定がおかしいのか見当がつかない状態です。
どなたか知恵を貸していただけないでしょうか。
補足情報(FW/ツールのバージョンなど)
Windows10 pro
Docker version 19.03.13
php7.4.11
Laravel Framework 6.20.2
回答1件
あなたの回答
tips
プレビュー