Передача массива из контроллера для просмотра laravel с использованием компактного

Я использую laravel 5.3 (make: auth автоматическая регистрация и генератор аутентификации пользователя), и я хотел бы, чтобы пользователь мог выбирать свои теги в регистрационной форме.

Я хочу передать $tags = App\Tag::all(); в файл register.blade.php, расположенный в views\auth\register.blade.php.

Я нашел этот метод:

public function showRegistrationForm()
{
    return view('auth.register');
}

и я хотел бы сделать:

public function showRegistrationForm()
{
    $tags = App\Tag::all();
    return view('auth.register', compact($tags));
}

но я получаю неопределенную переменную 'tags' при попытке добраться до файла register.blade.php.


person Shlomi Atia    schedule 29.09.2016    source источник
comment
stackoverflow.com/a/22413121/6521116   -  person LF00    schedule 11.05.2017


Ответы (3)


Не передавайте саму переменную, укажите имя переменной при использовании compact.

return view('auth.register', compact('tags'));
person Kevin    schedule 30.09.2016
comment
Или просто используйте ванильное объявление: return view('auth.register', array('tags' => $tags)); - person Kevin; 30.09.2016

Сначала вам нужно знать это:

Модели , Представления , Контроллер ;

контроллер является центральной точкой, т.е. получает данные из модели и передает данные в представление или простое представление. Итак, что это значит:

public function showRegistrationForm()
    {
        return view('auth.register');
    }

это здесь возвращает простое представление. А это ниже возвращает представление с данными модели, в вашем случае App\Tag: и App\Tag::all() - это коллекция, т.е. контейнер с набором данных;

public function showRegistrationForm()
    {
        $tags = App\Tag::all();
        return view('auth.register', compact($tags));
    }

или еще лучше, вместо того, чтобы сжимать массив, просто создайте новый массив и передайте набор данных, как?

return view('auth.register', ['tags' => $tags]);

Вот как отлаживать ваше приложение: используйте метод ниже:

public function showRegistrationForm()
    {
        $tags = App\Tag::all();
        dd($tags);
        //return view('auth.register', compact($tags));
    }

Вы видите массив или ошибку? если массив, то ваш набор данных передается для просмотра, если нет, то есть ошибка, что модель не существует или что-то в этом роде, просто проверьте свой файл журнала.

Удачи.

person Jimmy Obonyo Abor    schedule 30.09.2016

если вы хотите использовать компактный, используйте так

 return view('auth.register', compact('tags'));

в laravel 5.3 у них есть изменения, как показано ниже, но даже вы можете использовать оба метода :)

return view('auth.register', ['tags' => $tags]);
person Hamelraj    schedule 30.09.2016