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

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

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

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

Q&A

解決済

3回答

3779閲覧

laravel エラー Undefined offset: 1

dda

総合スコア33

Laravel

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

0グッド

0クリップ

投稿2020/02/29 02:03

編集2020/02/29 02:43

laravelでレイアウトを利用したページの作成を行っています。

ブラウザはchrome 記述はVscodeを使っています。
ページを表示しようとした際、次のようなエラーが発生しました。

Undefined offset: 1
http://localhost:8000/cake

C:\Users\fghjz.LAPTOP-VM64TKHN\Desktop\laravelapp\vendor\laravel\framework\src\Illuminate\View\Compilers\Concerns\CompilesLoops.php line95

* @param string $expression * @return string */ protected function compileForeach($expression) { preg_match('/( *(.*) +as *(.*))$/is', $expression, $matches); $iteratee = trim($matches[1]); $iteration = trim($matches[2]); $initLoop = "$__currentLoopData = {$iteratee}; $__env->addLoop($__currentLoopData);"; $iterateLoop = '$__env->incrementLoopIndices(); $loop = $__env->getLastLoop();'; return "<?php {$initLoop} foreach($__currentLoopData as {$iteration}): {$iterateLoop} ?>";

$iteratee = trim($matches[1]);の部分がエラーの発生源と出ています。
よく分からないところがエラー発生源になってたので検索したのですが、同じような例が見当たらず困っています。

web.php Controller.php ベースレイアウト その継承先の記述を書きに載せておきます。

web.php

web.php

1Route::get('cake', 'PancakeController@index');

↓PancakeController.php

PancakeController.php

1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6 7class PancakeController extends Controller 8{ 9 public function index(){ 10 11 $data = ['ああああ','いいいい','うううう']; 12 13 14 return view('cake.index', ['data'=>$data]); 15 } 16} 17

↓cake.blade.php

cake.blade.php

1<html> 2<head> 3<title>Paンcaク</title> 4<head> 5<style> 6body{background-color:#ffdead } 7h1 { 8 text-align:center; font-size:90px; color:#800000; margin-top: 50px; border:solid 3px; border-radius: 25px; 9} 10h2{ 11 text-align:center; font-size:40px; color:#f4a460; margin-top:80px; 12} 13ul{ 14 margin-top:0px; margin-left:50px; margin-bottom:90px; color:#fa8072; 15} 16li{ 17 font-size:30px; margin-bottom:20px; 18} 19.P{ 20 font-size:40px; margin-bottom:10px; margin-left:-30px; 21 font: bold; color:#ffa07a; 22} 23</style> 24</head> 25<body> 26<h1>@yield('title')</h1> 27 28 <div id="name"> 29 30 <h2>@yield('name')</h2> 31 32 <section class="point"> 33 <p class="P">Point</p> 34 <ul> 35 @yield('point') 36 </ul> 37 </section> 38 39 <section class="end"> 40 <p>Access</p> 41 </section> 42 43 </div> 44</body> 45</html>

↓index.blade.php

@extends('layouts.cake') @section('title', 'パン日記') @section('name', '衝撃の濃厚さを誇るメロンパン!!') @section('point') @foreach($data as $A) <li>{{$A}}</li> @endforeach @endsection

index.blade.phpの記述に@foreach以下が記述される前はしっかり表示されていたので、ファイル配置に間違いはないと思います。

少しひっかかるのは@foreach以下が記述される前はしっかり表示されていたので、その状態に戻したのですが同じエラーが出ることです。

同じ記述なのに再起動するとしっかり表示されるということが今まで時々あったのであまり気に留めていませんが。

なぜ操作していないファイル上でのエラーが発生しているのでしょうか?

アドバイスいただければ幸いです。

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

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

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

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

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

guest

回答3

0

ベストアンサー

このエラーはLaravelブレードコンパイラの@foreachのパースにミスってるやつです。

compileForeach

ってかいてあるので・・・。

foreachの中にasを書き忘れているとか、スペースがないとかでこれが発生することが多いです。
添付されているコードは問題なさそうに見えますが
エラーの内容的にはforeach関連っぽのでその周りを確認してください

投稿2020/02/29 04:07

mikkame

総合スコア5036

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

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

dda

2020/02/29 12:00

間違えてるところが全く見当たらなかったのですが、とりあえず@foreachあたりを書き直したら正しく表示できました。 また、関数名に着目することがポイントであることも参考になりました。 ありがとうございました!!
tanakA

2022/09/20 06:17

同じところで悩んでいましたが、参考にさせて頂き解決できました。 ありがとうございます!
guest

0

Undefined offset: 1 とは、配列にセットした「添字」がないぞ!っていうものなので、「$matches」という配列にどんな値が入っているのかを確認すればいい。

Laravel には dd()dump() にはデバッグ用の関数がある。のでそれを使って確認する。

php

1preg_match('/( *(.*) +as *(.*))$/is', $expression, $matches); 2dd($matches);

こうすれば、$matches の値を確認できる。
出力された結果を確認して、1 に対応する配列の要素があるかどうかを確認すればいい。

投稿2020/02/29 02:08

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

dda

2020/02/29 02:23

コメントありがとうございます。 上の記述はどこに書けばいいのでしょうか。 Route::get('/a', function(){ dd($matches); }としてアクセスしたところUndefined variable: matchesと表示されました。
退会済みユーザー

退会済みユーザー

2020/02/29 02:56 編集

どこにって、回答のコードに書いてあるじゃないですか? 回答と違うことやってできないとか言われてもね・・・
mikkame

2020/02/29 04:07

これvendorの中の話になります
guest

0

index.blade.phpの@endsectionに対応する@sectionがない。

@extends('layouts.cake') @section('title', 'パン日記') @section('name', '衝撃の濃厚さを誇るメロンパン!!') @section('point') @foreach($data as $A) <li>{{$A}}</li> @endforeach @endsection

投稿2020/02/29 02:28

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

dda

2020/02/29 02:42

ありがとうございます! 修正しました。 しかしエラーは同じです...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問