【问题标题】:laravel 5.4 undefined variable in viewlaravel 5.4 视图中未定义的变量
【发布时间】:2017-06-06 11:40:05
【问题描述】:

我是 laravel 的新手,我试图从数据库中提取数据,但一直点击错误页面,说视图中有一个未定义的变量。

我想我在控制器中做错了(或没有做)一些事情。所以我有一个 create.blade.php 将数据从表单发布到数据库并且一切正常,但是我希望它在发布到数据库后重定向到 show。 Blade.php 显示上传的数据,这是我遇到错误消息的地方。

这是我在控制器中的存储功能 -

public function store(Request $request)
    {
     $data4page = new Data4page;

     $data4page->h1Ttle = $request->h1Ttle;
     $data4page->h4Ttle = $request->h4Ttle;
     $data4page->description = $request->description;
     $data4page->save();

     /*redirecting to the content's show page*/
     return redirect()->route('content.show', $data4page->id);
}

这是同一控制器中的显示功能 -

public function show($id)
    {
        //
        $data4page = Data4page::find($id);
        return view('digital.show')->with(compact('data4page'));
    }

我收到的错误消息是 -

Undefined variable: data4page (View: /var/www/html/theproject/resources/views/content/show.blade.php)

在 show.blade.php 中,这是我所拥有的示例 -

<h1>{{ $data4page->h4Ttle }}</h1>
<p>{{ $data4page->description }}</p>
<h4>{{ $data4page->h4Ttle }}</h4>

说了这么多,我还尝试了各种在控制器的 show 函数中返回视图的方法,但所有这些都导致了上面相同的错误消息。这些变体包括 -

return view('content.show')->with('data4page', $data4page);
return view('content.show',['data4page'=>$data4page]);

更新:我之前有错别字,但现在我得到的错误是 -

undefined variable: {"id":9,"h1Ttle":"h1 sample text","h4Ttle":"h4 sample text","description":"body text goes here"} (View: /var/www/html/theproject/resources/views/content/show.blade.‌​‌​php)

这是 show.blade.php -

@extends('main')
@section('title')
@section('content')
      <div class="app-template">
         <main class="wrapperMain">
            <div class="">
               <aside class="navSidebar">
                  <nav class="navProperty">
                     <h1 class="navProperty-title">{{ $data4page->h1Ttle }}</h1>
                  </nav>
                  <footer class="footerProperty">
                     <div class="upcomingSchedule">
                        <h4 class="upcomingSchedule-heading">{{ $data4page->h4Ttle }}</h4>
                     </div>
                  </footer>
               </aside>
            </div>
            <div class="content content--withSidebar">
               <div class="lead--Home">
                  <p>{{ $data4page->description }}</p>
               </div>
            </div>
         </main>
@endsection

【问题讨论】:

  • 在你看来,你肯定做错了什么。只需发布您的完整视图代码。

标签: laravel controller laravel-5.4 laravel-views laravel-controller


【解决方案1】:

你的名字不匹配。

return view('content.show')->with(['name' => $data4page]);

你应该在这里使用:

<h1>{{ $name->h4Ttle }}</h1>

正如你所说的name

在您定义的其他选项中 Data4page 并在您的视图中使用 data4page(小写 d)。

【讨论】:

  • 我刚刚将 $data4page 替换为 $name 正如您在视图中所说的那样,现在错误消息显示未定义变量:{"id":9,"h1Ttle":"sample text", "h4Ttle":"h4 示例文本","description":"正文放在这里"}(查看:/var/www/html/theproject/resources/views/content/show.blade.php)
  • 你能用你现在的代码更新你的问题吗?这个错误看起来像是一个错字,在你看来可能是双 $
  • @Clint_A 你能检查一下 laravel 日志吗?它将显示缓存的视图和该文件中失败的行。检查一下,你会发现错误发生在视图中的确切位置。
  • 我已经更新了代码。你是对的,错误是由于错字造成的。但是现在返回的视图是空白的!
  • 空无一物?还是源代码中的某些 html 中的空白但没有数据?检查调试设置和 laravel.log
【解决方案2】:

改了

return view('content.show')->with(['name' => $data4page]);

收件人:-

return view('content.show')->with(compact('data4page'));

希望有帮助!

【讨论】:

  • 它仍然给出相同的错误 - 未定义的变量:{"id":9,"h1Ttle":"sample text","h4Ttle":"h4 sample text","description":"body文本在这里”}(查看:/var/www/html/theproject/resources/views/content/show.blade.‌​php)
  • 在刀片 echo "
    " 中打印此行; print_r($data4page);死;
  • 它存在。对于我尝试的所有其他 id,它都会给出相同的错误。
  • "; print_r($data4page);死; ?> 返回特定 id 的 (9) 数据库信息。数据存在。
【解决方案3】:

当下面给出的答案绝对没问题时,为什么还要用错误的大小写来输入变量名? PHP 变量区分大小写。您在显示的代码中将$Data4page 传递给您的视图,然后尝试使用访问$data4page。以下任何一项都可以。

return view('content.show', ['data4page' => $data4page]);
return view('content.show', compact('data4page'));
return view('content.show')->with('data4page', $data4page);
return view('content.show')->with(['data4page' => $data4page]);
return view('content.show')->with(compact('data4page'));

【讨论】:

  • 一开始是打字错误,但更新了代码后,它现在返回一个空白页,但没有错误!
  • @Clint_A 发布您的完整视图代码。检查重定向路由 content.show 是否有效,以及是否通过在其中放置 dd 来调用它。同时运行php artisan route:clearphp artisan view:clear 清除缓存的路由和视图。
【解决方案4】:

你需要遍历集合来获取值

@section('content')
     <div class="app-template">
        <main class="wrapperMain">
           @foreach ($data4page as $d4p)
           <div class="">
              <aside class="navSidebar">
                 <nav class="navProperty">
                    <h1 class="navProperty-title">{{ $d4p->h1Ttle }}</h1>
                 </nav>
                 <footer class="footerProperty">
                    <div class="upcomingSchedule">
                       <h4 class="upcomingSchedule-heading">{{ $d4p->h4Ttle }}</h4>
                    </div>
                 </footer>
              </aside>
           </div>
           <div class="content content--withSidebar">
              <div class="lead--Home">
                 <p>{{ $d4p->description }}</p>
              </div>
           </div>
           @endforeach
        </main>
@endsection

【讨论】:

  • 这正是他在原始代码中所做的。当您只有一个参数时,您实际上不需要指定路由参数名称。
  • 哦,好吧,我不知道!我认为第二个参数需要一个数组
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-21
  • 1970-01-01
相关资源
最近更新 更多