Laravel — Общедоступная переменная в контроллере

#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. Я согласен. Это довольно раздражает.