【问题标题】:Laravel trying to output posts but Controller function seem to work wrongLaravel 试图输出帖子但控制器功能似乎工作错误
【发布时间】:2017-01-17 11:24:33
【问题描述】:

我正在尝试输出我的帖子,为此我在特定页面中调用了一个带有 foreach 的函数来加载所有帖子,我的控制器中的函数类似于:

public function getDashboard()
{
    $posts = Post::all();
    return view('dashboard', ['posts' => $posts]);
}

我的路线是这样的:

Route::get('/dashboard',[
    'uses' => 'PostController@getDashboard',
    'as' => 'dashboard'

]);

但在我未登录时尝试加载页面时出现错误 错误类似于: 未定义变量:posts(查看:C:\wamp64\www\projectname\resources\views\dashboard.blade.php)

您所说的任何内容都受到高度赞赏。

(我使用 Laravel 5.3.26)

这是我的刀片,但我不认为这是问题所在:

@extends('layouts.master')
 @section('content')
  @foreach($posts as $post)
    <article class="post">
        <div class="media w3-border-left w3-border-blue">
            <div class="media-left media-top">

            </div>
            <div class="media-body">
                <header><h4 class="media-heading">{{ $post->title }}</h4></header>
                <p>{{ $post->body }}</p>
                <div class="info">
                    Posted by {{ $post->user->name }} on {{ $post->created_at }}
                </div>
                <div class="interaction">
                    <a href="#" class="like">Like</a> |
                    <a href="#" class="like">Dislike</a> |
                    <a href="#" class="like">Edit</a> |
                    <a href="#" class="like">Delete</a>
                </div>

            </div>
        </div>
        <br>
    </article>
  @endforeach
 @endsection

【问题讨论】:

  • 检查 $posts 是否为空
  • @VinodVT 不,不是它在我登录时正常工作。
  • 你能发布你的刀片文件吗?我认为问题出在那儿
  • 将 Route::get 更改为 Route::post。 :)
  • 问题解决了吗?

标签: php mysql routes laravel-5.3


【解决方案1】:

试试:

public function getDashboard()
{
    $posts = Post::all();
    return view('dashboard', compact('posts'));
}

【讨论】:

  • 正如我所说的那样也可以,但是如果我登录了,当我注销时它会给出同样的错误:未定义的变量:帖子
  • 当您注销并点击相同的路线时,您会遇到错误。此时您应该重定向到登录页面。你处理好那个场景了吗?
  • 是的,我可以路由到登录页面,但这不是我想要的,我希望重定向到包含按特定费率排序的帖子的页面,即仪表板。如果只有包含变量“posts”的 foreach 部分,我也可以重定向到仪表板
  • 能否请您做一些尝试并尝试 var_dump($posts) 或删除所有可变代码并尝试运行纯 html,以便我们了解路由是否一切正常。
  • C:\wamp64\www\projectName\app\Http\Controllers\PostController.php:15:string 'posts'(长度=6)。这是我应该得到的吗?
【解决方案2】:

我认为这是您的身份验证重定向到不同的控制器方法(不是注入帖子)。

在你的 routes\web.php 中尝试作曲家

View::composer( ['dashboard.blade'] , function($view) {
   $action = app('request')->route()->getAction();
    dump($action);
    return $view->with(
        [
            'posts' => Post::all(), // you may need the fully qualified namespace here
        ]
    );
});

这有点脏,你不想保留它,但它应该给你一些进一步的信息——如果你可以发布转储的输出并检查注销时帖子是否仍然被注入;

使用这种方法,我的转储输出是

array:7 [▼
  "middleware" => array:2 [▼
    0 => "web"
    1 => "auth"
  ]
  "uses" => "App\Http\Controllers\Admin\TestController@home"
  "controller" => "App\Http\Controllers\Admin\TestController@home"
  "namespace" => "App\Http\Controllers\Admin"
  "prefix" => "/admin"
  "where" => []
  "as" => "admin.test"
]

【讨论】:

  • 有点BUG,我尝试修复了,但似乎有一些语法问题,你能看一下吗?我关闭了 'posts' => Post:all(), 用“;”那不是它还在 (['dashboard.blade'] 之后添加了正确的括号
  • 我还在 Post 之后添加了“::”
  • @AgilAsadi 我只是将它放入我的应用程序中进行测试,它可以工作(我必须更改模型以适应我的应用程序,但除此之外)
  • @AgilAsadi 我也查了转储 - 它应该会给你更多信息
猜你喜欢
  • 1970-01-01
  • 2019-08-23
  • 1970-01-01
  • 2019-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-12
相关资源
最近更新 更多