【问题标题】:User Submitted Posts using Laravel用户使用 Laravel 提交的帖子
【发布时间】:2017-09-13 07:09:20
【问题描述】:

我正在尝试构建一个应用程序,它将包含一个管理仪表板,管理员可以在其中查看 CRUD 帖子,但他也只能查看用户提交的帖子。 另一方面,客人将只能看到帖子,但他将能够创建用户提交的帖子。

到目前为止,我已经设法使帖子功能正常工作,但不适用于用户提交的帖子。

我的控制器:

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Usp;

class AdminUserPostsController extends Controller
{
    public function index()
    {
        $userposts = Usp::orderBy('id', 'desc')->paginate(10);
        return view('admin.userposts.archive')->withUsp($userposts);
    }

    public function show($id)
    {
        $userpost = Usp::find($id);
        return view('admin.userposts.show')->withUsp($userpost);
    }
}

我的模特

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Usp extends Model
{
    //
}

我的存档视图

@extends('admin')
@section('dashboard-content')
<div class="col-md-8 offset-md-2">
    <h1>Posts Archive</h1>
    <hr>
</div>
@foreach ($userposts as $userpost)
<div class="col-md-6 offset-md-2">
<h3>Title: {{ $userpost->title }}</h3>
<hr>
</div>
@endforeach
@endsection

和我的路线(针对特定控制器)

Route::get('/admin/userposts', 'AdminUserPostsController@index')->name('admin.userposts.archive');
Route::get('/admin/userposts/{id}', 'AdminUserPostsController@show')->name('admin.userposts.show');

我收到 userposts 变量未定义的错误,尽管我在控制器中定义了它。有谁可以帮忙?

【问题讨论】:

    标签: php laravel blade posts


    【解决方案1】:

    您应该将变量“传输”到您的视图中。有几种方法可以做到这一点,但我想说最常见的是使用“with compact”。在你的情况下,你应该改变这个

    return view('admin.userposts.archive')->withUsp($userposts);
    

    到这里

    return view('admin.userposts.archive')->with(compact('userposts'));
    

    它是如何工作的:

    compact("varname", [...])
    

    返回一个数组,键是变量名,值是变量值

    而 with 只是将所有数组传输到视图

    PS:

    compact('userposts')
    

    和这个完全一样

    ['userposts' => $userposts]
    

    【讨论】:

    • 非常感谢大家!也感谢您的解释。我的商店功能呢?当我必须使用此代码重定向 return redirect()-&gt;route('admin.userposts.show', $userpost-&gt;id); 时,我试图使其成为 return redirect()-&gt;route('admin.userposts.show', compact('userpost', 'id')); 但它不起作用:(
    • 路由函数的工作方式不太一样,对于简单的事情,比如显示一个帖子,你可以像$userpost-&gt;id那样直接传递值,或者你可以去完整的对象并且框架将决定它采用哪个值(默认为 id)(即只给他$userpost)。如果要更改列,可以更改 implicit binding 列。当你有多个参数时,你只需要传递一个数组,键是参数的名称。
    • 此外,为了解释compact('userpost', 'id'),这意味着您实际上有两个变量,一个是$userpost,另一个是$id。如果您同时定义了它们,它将返回 ['userpost' =&gt; $userpost, 'id' =&gt; $id]
    • 这解释了很多,现在我想我可以在通过紧凑的视图传递变量的同时解决它。我认为现在我目前唯一的问题是我无法存储用户帖子,因为它在我尝试执行 $userpost = new Usp; $userpost-&gt;title = $request-&gt;title; $userpost-&gt;body = $request-&gt;body; $userpost-&gt;save(); 之后返回 null 在这种情况下我是否也必须使用紧凑?
    • 由于这是一个完整的其他问题,我认为您应该将其作为一个单独的主题,我很乐意在那里回答您
    【解决方案2】:

    如果您想使用userposts 变量,请执行以下操作:

    return view('admin.userposts.archive', compact('userposts');
    

    或者这个:

    return view('admin.userposts.archive', ['userposts' => $userposts]);
    

    【讨论】:

      【解决方案3】:

      改变这个:

      return view('admin.userposts.show')->withUsp($userpost);
      

      return view('admin.userposts.show', array('userpost' => $userpost));
      

      然后再试一次。您可以在刀片视图上获得$userpost,例如:

      {{ $userpost }}

      如果是数组,使用foreach()获取其所有元素。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-01-25
        • 2016-06-06
        • 1970-01-01
        • 2011-05-30
        • 1970-01-01
        • 2014-09-17
        • 2016-06-16
        相关资源
        最近更新 更多