Представленные пользователем сообщения с использованием Laravel

Я пытаюсь создать приложение, в котором будет содержать панель управления admin, где администратор сможет записывать сообщения CRUD, но также он сможет просто видеть отправленные пользователем сообщения. С другой стороны, гость сможет видеть сообщения, но он сможет создавать созданные пользователем сообщения.

До сих пор мне удалось заставить функционал Posts работать, но не для отправленных пользователем сообщений.

Мой контроллер:

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 не определена, хотя я определяю ее в своем контроллере. Кто может помочь?

Вы должны «передать» свои переменные вашему представлению. Есть несколько способов сделать это, но я бы сказал, что наиболее распространенным является использование «с компактным». В вашем случае вы должны изменить это

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

К этому

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

Как это работает :

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

возвращает массив с ключами, являющимися именем переменной, а значениями являются значения переменных

И только что передает весь массив в представление

PS:

 compact('userposts') 

Точно так же, как это

 ['userposts' => $userposts] 

Если вы хотите использовать переменную userposts , сделайте следующее:

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

Или это:

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

Измените это:

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

в

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

и попробуй еще раз. Вы можете получить $userpost на вид $userpost например:

{{ $userpost }}

Если это массив, используйте foreach() чтобы получить все его элементы.