Laravel中出现“未定义的偏移量:1”错误。到底是怎么回事?

时间:2018-08-18 23:24:07

标签: laravel

我正在尝试使用foreach传递我在数据库中拥有的所有帖子,但是会弹出此错误。

这是我的观点:

<ul>
  {{ <li>@foreach ($posts => $posts) }}
    <div class="row section scrollspy" style="padding:10px; margin-top:10px;">
      <div class="content-box col s12" style="padding:20px; margin-top:40px; background: #f2f2f2; border-radius:10px;">
        <div class="i_title" style="text-align:center; margin: -57px 0 0 0;">
          <a href="/profile" class="tooltip"><img class="responsive-img circle" src="images/profile_picture.jpg" style="width:60px; box-shadow: 0 6px 10px 0 rgba(0, 0, 0, 0.2);"><span class="tooltiptext">@Username{{ $user->username }}</span></a>
        </div>
          <p class="col s12"{{ $post->post }}</p>
      </div>
    </div>
  {{ @endforeach</li> }}
</ul>

我的控制器:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class UserController extends Controller
{
  public function getUsers()
  {
    $user = DB::table('users')->get();
    return view('layouts/welcomeView', ['users' => $user]);
  }
  public function getPosts()
  {
    $posts = DB::table('posts')->get();
    return view('layouts/welcomeView', ['posts' => $posts]);
  }
}

我的数据库有一些帖子,所以那不是问题。我认为麻烦是我没有很好地传递帖子中的变量。我该怎么办?

2 个答案:

答案 0 :(得分:1)

这有几处错误。

首先,您要混合刀片指令。 var isDirectory: ObjCBool = false let fileExists: Bool = FileManager.default.fileExists(atPath: pathOldLocalStorage, isDirectory: &isDirectory) if fileExists { print("isDirectory=\(isDirectory)") } 用于回显某些内容。 {{ }}{{内部的所有内容都被解释为PHP,并被传递给函数进行一些转义,并被回显。因此,当您执行}}时,刀片编译器会尝试将{{ <li>@foreach ($posts => $posts) }}视为PHP代码,这将导致语法错误。 <li>@foreach ($posts => $posts)不属于@foreach内部。

第二,我注意到您的{{ }}内部有@foreach。请注意,箭头两侧的变量是否相同?毫无疑问,这是一个拼写错误,但是它将导致循环的第一次迭代用第一个条目覆盖$posts => $posts变量,并且循环将尝试继续迭代此新的单个值。可能是导致您看到的错误。

这可能更接近您要查找的内容:

$posts

答案 1 :(得分:0)

将您的视图更改为;

<ul>
   <li> 
   @foreach ($posts => $post)
    <div class="row section scrollspy" style="padding:10px; margin-top:10px;">
      <div class="content-box col s12" style="padding:20px; margin-top:40px; background: #f2f2f2; border-radius:10px;">
        <div class="i_title" style="text-align:center; margin: -57px 0 0 0;">
          <a href="/profile" class="tooltip"><img class="responsive-img circle" src="images/profile_picture.jpg" style="width:60px; box-shadow: 0 6px 10px 0 rgba(0, 0, 0, 0.2);"><span class="tooltiptext">@Username{{ $user->username }}</span></a>
        </div>
          <p class="col s12"{{ $post->post }}</p>
      </div>
    </div>
  @endforeach
  </li>
</ul>

如果未在某处定义@Username,则可能需要将其移动。

通常最好的方法是在数组中进行检查之前先检查一下其中的内容。

您可以这样做来实现;

@if(! $posts->isEmpty()) 
    @foreach ($posts => $post)
        ....
    @endforeach
@endif