【问题标题】:Laravel 8 Undefined varible postsLaravel 8 未定义的变量帖子
【发布时间】:2020-09-16 11:30:35
【问题描述】:

我有一个错误..它说:

未定义变量:posts(查看:C:\xampp\htdocs\dinsospermasdes\bansus\resources\views\admin\posts\index.blade.php)

它在 home.blade.php 中像这样工作:

@foreach ($posts as $post)
    <div class="card mb-4">
        <img class="card-img-top" src="{‌{filter_var($post->post_image, FILTER_VALIDATE_URL) ? $post->post_image : '/storage/' . $post->post_image}}" alt="Card image cap">
        <div class="card-body">
        <h2 class="card-title">{‌{$post->title}}</h2>
        <p class="card-text">{‌{Str::limit($post->body, '50', '....')}}</p>
        <a href="{‌{route('post', $post->id)}}" class="btn btn-primary">Read More &rarr;</a>
        </div>
        <div class="card-footer text-muted">
        Posted on {‌{$post->created_at->diffForHumans()}} by
        <a href="#">{‌{$post->name}}</a>
        </div>
    </div>
    @endforeach

但不能像这样在 admin/posts/index.blade.php 中工作:

 

@foreach($posts as $post)
                      <tr>
                          <td>{‌{$post->id}}</td>
                          <td>{‌{$post->title}}</td>
                          <td>
                            <img height="40px" src="{‌{filter_var($post->post_image, FILTER_VALIDATE_URL) ? $post->post_image : '/storage/' . $post->post_image}}">
                          </td>
                          <td>{‌{$post->created_at->diffForHumans()}}</td>
                          <td>{‌{$post->updated_at->diffForHumans()}}</td>
                      </tr>
                      @endforeach

这是 PostController.php:

class PostController extends Controller
{
    //

    public function index(){
        $post = Post::all();
        return view('admin.posts.index');
    }

    public function show(Post $post){
        return view ('blog-post', ['post'=>$post]);
    }

    public function create(){
        return view ('admin.posts.create');
    }

    public function store(){
        $inputs = request()->validate([
            'title'=>'required|min:8|max:255',
            'post_image'=>'file', //mime: jpeg, png
            'body'=>'required'
        ]);
        if(request('post_image')){
            $inputs['post_image'] = request('post_image')->store('images');
        }
        auth()->user()->posts()->create($inputs);
        return back();
    }
}

这是来自 web.php 的路由

Auth::routes();
Route::get('/', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
Route::get('/post/{post}', [App\Http\Controllers\PostController::class, 'show'])->name('post');    

Route::middleware('auth')->group(function(){
    Route::get('/admin', [App\Http\Controllers\AdminController::class, 'index'])->name('admin.index');

    Route::get('/admin/posts', [App\Http\Controllers\PostController::class, 'index'])->name('post.index');
    Route::get('/admin/posts/create', [App\Http\Controllers\PostController::class, 'create'])->name('post.create');
    Route::post('/admin/posts', [App\Http\Controllers\PostController::class, 'store'])->name('post.store');
});

【问题讨论】:

    标签: php html laravel


    【解决方案1】:

    在索引方法中你需要传递posts

    public function index(){
        $posts = Post::all();
        return view('admin.posts.index',compact('posts'));
    }
    

    您没有在刀片文件中传递 posts variable。因此,它给你undefined error

    【讨论】:

    • 你能告诉我浏览器中的网址吗?您在哪条路线上收到此错误?
    • url:127.0.0.1:8000/admin/posts 似乎代码错误:@foreach($posts as post) in C:\xampp\htdocs\dinsospermasdes\bansus\resources\views\admin\posts\index.blade.php)
    • compact('posts') 之后它必须工作。可以在刀片文件中添加。
    • 你把$post = Post::all();改成$posts = Post::all();了吗???
    • aisshh...我忘记了我使用的是$post = Post::all()而不是$posts = Post::all()...正确答案是使用$posts...感谢您的帮助:)
    猜你喜欢
    • 2021-10-31
    • 1970-01-01
    • 2019-09-22
    • 2021-08-03
    • 2021-05-30
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    • 2021-05-11
    相关资源
    最近更新 更多