#laravel
#laravel
Вопрос:
Я хочу иметь одну общедоступную переменную $users = User::all();
, чтобы я мог использовать ее в разных методах внутри контроллера, но это так не работает:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use AppHttpRequests;
use AppUser;
class AdminController extends Controller
{
public $users = User::all();
public function __construct() {
$this->middleware('auth');
}
public function index()
{
return view('admin.index');
}
public function showUsers()
{
return view('admin.users', compact('users'));
}
}
я получаю эту ошибку: константное выражение содержит недопустимые операции
Что я делаю не так?
Ответ №1:
Попробуйте вместо этого добавить присваивание в __construct()
функцию:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use AppHttpRequests;
use AppUser;
class AdminController extends Controller
{
public $users;
public function __construct() {
$this->users = User::all();
$this->middleware('auth');
}
public function index()
{
return view('admin.index');
}
public function showUsers()
{
$users = $this->users;
return view('admin.users', compact('users'));
}
}
Комментарии:
1. Неопределенная переменная: пользователи в поле зрения
2. в поле зрения у меня есть только {{$ users}}
3. @lewis4u вы не можете передавать переменные класса в представления напрямую. Сначала попробуйте
$users = $this->users
, а затемreturn view('admin.users', compact('users'));
4. Почему бы вам просто не использовать
Users::all()
метод по мере необходимости, вместо того, чтобы назначать его другому методу?5. Вы можете использовать ее в любом представлении, используя что-то вроде
view('admin.users',['users' => User::all()]
Ответ №2:
Вам нужно инициализировать $users
в вашем конструкторе:
<?php
public $users;
public function __construct() {
$this->middleware('auth');
$this->users = User::all();
}
Комментарии:
1. Ого-го … Ты был на 44 секунды впереди меня, Лол
2. Происходит постоянно 😉
3. Я виню SO markdown … Необходимость использовать пробелы для блоков кода :/
4. Я согласен. Это довольно раздражает.