Я пытаюсь создать приложение, в котором будет содержать панель управления 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()
чтобы получить все его элементы.