【问题标题】:Passing counter variable from controller to View in laravel 5在laravel 5中将计数器变量从控制器传递到视图
【发布时间】:2016-01-18 22:52:43
【问题描述】:

我正在尝试在我的 laravel 网站上创建一个计数器。这个计数器从模型 Comments 中获取所有 cmets,这些 cmets 是从 Carbon::now() 到 startofMonth() 创建的。所以我有我的控制器和函数计数器:

 class CommentsController extends Controller
{
        public function counter()
    {
        $new_comments=Comments::where('created_at', Carbon::now()->startofMonth())->get();

        $counted->count($new_comments['created_at']);


        return View::make('pages.dashboard')->with('new_comments', $counted);        
    }
}

我的刀片模板:

<div class="row">
       <div class="col-xs-3">
             <i class="fa fa-comments fa-5x"></i>
       </div>
           <div class="col-xs-9 text-right">
              <div class="huge">{{!!$new_comments!!}}</div>
              <div>New Comments!</div>
</div>

即使在控制器中调用了变量,我仍不断收到变量未定义的错误消息!当刀片模板中未调用变量时,仪表板页面可以正常工作。

编辑:

如果忽略控制器并将以下内容添加到我的视图中,我已经设法让它工作:

{{App\Comments::count()}}

这仅显示表 Comments 中的总行数,但我会尝试将 mySQL 查询添加到其中。

我仍然不知道为什么它不能从控制器中作为变量调用。

【问题讨论】:

    标签: php laravel controller views blade


    【解决方案1】:

    在您的刀片模板中,您正确调用它但是!带来这样的问题{{!!$new_comments!!}} 它会说变量未定义。

    不带!!试试看,它对我有用。

    【讨论】:

    • 不幸的是我试过这个,仍然说变量未定义....可能是路线有问题吗?我什至需要一个从控制器调用这个变量吗?
    • 我不认为路由在这里可能是一个问题,正如您已经说过的“当刀片模板中未调用变量时,仪表板页面可以正常工作。”
    • 其余的变量调用是否适用于您项目中的其他模板?
    • 是的,我可以在同一控制器的索引函数中为表调用变量。
    • 奇怪,那为什么不看这个呢。我建议你将它与其他文件进行比较,它工作正常。
    【解决方案2】:

    首先:你想获取从月初到现在创建的所有 cmets,你需要一个 whereBetween 查询,不等于。

    第二:你调用一个未定义的变量$counted。我认为你需要删除

    $counted->count($new_comments['created_at']);
    

    并将 $new_cmets 传递给 view 而不是 $counted

    return View::make('pages.dashboard')->with('new_comments', $new_comments);  
    

    并在视图中显示 cmets 计数

    {{ $new_comments->count() }}
    

    希望对你有帮助

    【讨论】:

    • 感谢您的评论,尽管这仍然给出了变量未定义的错误。
    【解决方案3】:

    这是一个迟到的答案,但我相信您使用 -&gt;with() 函数错误地传递了您的变量。根据我使用 Laravel 的经验,-&gt;with() 使用数组语法将多个变量传递给视图。例如:

     return View::make('pages.dashboard')
     ->with(["new_comments" => $new_comments, "counted" => $counted]);
     // Note the array usage, works with [] or array()
    

    然后,在您的 dashboard.blade.php 中,您可以调用 {{ $new_comments }}{!! $new_comments !!} 来回显该值(一个忽略 HTML 标记,一个包含它。)

    在旁注中,尝试回显 Eloquent 集合的内容(即 Comment::get() 而不是 Comment::first() 之类的内容)可能不起作用。您应该循环遍历结果并相应地回显:

    @foreach($new_comments AS $new_comment)
    {!! $new_comment->created_at !!}
    ...
    @endforeach
    

    【讨论】:

    • 嗨蒂姆,谢谢你的建议。不幸的是,这不起作用,变量仍然未定义。我不确定在某处是否存在与使用 ::make 的“制作”页面的冲突。似乎页面没有从控制器读取变量。正在读取同一控制器中的所有其他变量。相当奇怪。
    • 如果您在控制器中运行 dd($new_comments); 之前的 View::make() 会返回什么?
    • 它不返回任何东西,同样的未定义变量消息
    • 所以问题出在你的控制器上,而不是在将值传递给视图。 dd()die(var_dump($variable)); 的简写,所以如果在控制器中运行它会产生错误,那么 $new_comments = Comments::where('created_at', Carbon::now()-&gt;startofMonth())-&gt;get(); 上的定义有问题
    • 我试过了:$new_comments=Comments::all(): dd($new_comments); return View::make('pages.dashboard')-&gt;with('new_comments', $comments); 仍然是“未定义的变量”
    【解决方案4】:

    这已经解决了。我在另一个(页面)控制器中调用 return view::make(dashboard) 。该控制器具有先例,因此没有出现这种观点。因此,在我的页面控制器中,我应用了以下内容:

    public function dashboard()
        {
            $count = Comments::where('created_at', '>', Carbon::today())->count();
    
            return View::make('pages.dashboard')->with('new_comments_count', $count);
        }
    

    然后我可以在我看来调用 new_cmets_count。 非常感谢您的帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-08
      • 1970-01-01
      • 2016-03-03
      • 2014-04-12
      • 2012-02-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多