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

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

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

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

PHP

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

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

6034閲覧

laravelでviewファイルを更新すると変数未定義のエラー

bokupiroki

総合スコア54

Laravel

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

PHP

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

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2020/11/06 09:34

編集2020/11/06 11:46

前提・実現したいこと

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuki84web

2020/11/06 11:31

laravelのバージョンも記載してください。確か最新版のver8ではルーティングの書き方などが変わったようなので、古い記事は、そのまま参考に出来ないと思います。
bokupiroki

2020/11/06 11:47

root@17fc25ef4b3d:/var/www/app# php artisan --version で確認したところ、 Laravel Framework 6.20.2 のようです。 質問欄の最後にも追記しました。
guest

回答1

0

ベストアンサー

2点、修正が必要だと思われます。

1、まず、以下の2つのRouteを同時に使うことはおすすめできません。

php

1Route::get('/', function () { 2 return view('shop'); 3}); 4 5Route::get('/', 'ShopController@index');

理由は、同じパスで同じGET送信が重複してしまっているからです。

なので、上の方のRouteを削除して下さい。

2、次に、ShopController.phpの上の方に、以下の1行を追加してください。

php

1use Illuminate\Http\Request; 2// 下の1行を追加 3use App\Http\Controllers\Controller;

以下のエラーメッセージが出たら、上の1行を追加すると思っていていいと思います。

Class 'App\Http\Controllers\Controller' not found

投稿2020/11/07 01:09

編集2020/11/07 01:16
masataka715

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bokupiroki

2020/11/07 16:18

重たる原因の1つは LaravelApp\app\app\Http\Controllers内の 「Controller.php」というファイルがなくなってしまっていることでした。 どうやら誤操作(?)でほかのディレクトリに移動させてしまっていたようなので、元に戻しました。 回答いただいたルーティングの修正も併せて入れたところ解決しました! 「1、まず、以下の2つのRouteを同時に使うことはおすすめできません。」「上の方のRouteを削除して下さい。」 最終的なweb.phpのルーティング --------------------------- Route::get('/', function () { return view('shop'); }); Auth::routes(); --------------------------- ちなみに、ShopController.phpに「use App\Http\Controllers\Controller」は書かなくても大丈夫でした。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問