Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 Re: Laravel 5.x » Ошибка "Undefined variable: ..." при попытке "оживления" учебного proj » 08.02.2019 01:41:54

Команда make:auth добавляет несколько путей в файл web.php для авторизации, а также копирует некоторые шаблоны в папку views/auth и welcome.blade.php, если у вас нет таких файлов, то ничего критичного не произошло
Для оживления можно просто ваш фрагмент для авторизации направить в пути из Auth::routes(); которые можно посмотреть командой php artisan route:list, а также в контроллерах в App\Http\Controllers\Auth...

#2 Re: Laravel 5.x » Ошибка "Undefined variable: ..." при попытке "оживления" учебного proj » 06.02.2019 21:26:48

Ваш код index.blade.php ( файл в котором возникает ошибка )

<div class="panel-body">
							
							<ul class="list-group">
								
								@foreach($movies as $movie)				

									@if($movie->category_id == 1)				
								
										<li class="list-group-item list-group-warning">
											<span class="badge"> {{ $movie->rating }} </span>
											<a href=" {{ route('filmShow',['id'=>$movie->id]) }} " target="_blank"> {{ $movie->name }} </a>
										</li>
										
									@endif
									
								@endforeach

Предлагаю на выбор 2 решения:
1 Путь: Если хотите оставить вывод $movies на каждой странице, которая наследует index.blade.php, передавайте переменную в View Composer https://laravel.com/docs/5.7/views#view-composers, в ViewServiceProvider в методе boot напишите

View::composer('*', function ($view) {
    $view->with('movies', Movie::all());  //Вместо Movie::all() ваш код для получения фильмов из БД
});

это передаст в каждый view переменную $movies, и вы сможете вывести ее используя foreach, не меняя код index.blade.php
2 Путь: если переменная $movies нужна не везде, то можно добавить проверку перед @foreach($movies as $movie):

@if(isset($movies)) 
@foreach ($movies as $movie) 
...
@endforeach 
@endif

Также можно вынести данный фрагмент в отдельный файл и подключать его только там, где необходимо: например,
movies.blade.php:

@foreach($movies as $movie)				

									@if($movie->category_id == 1)				
								
										<li class="list-group-item list-group-warning">
											<span class="badge"> {{ $movie->rating }} </span>
											<a href=" {{ route('filmShow',['id'=>$movie->id]) }} " target="_blank"> {{ $movie->name }} </a>
										</li>
										
									@endif

а затем в нужных местах подключать его:

@include(movies) // Путь до файла movies.blade.php

#4 Re: Laravel 5.x » Ошибка "Undefined variable: ..." при попытке "оживления" учебного proj » 04.02.2019 11:36:36

Дело в том, что Ларавел пытается найти переменную $movies при каждом рендеринге blade файла, а так как вы не передаёте его в каждой функции контроллера, то ее не существует. Тут два решения: либо вынести blade с переменной movies в отдельный файл и подключать его только там, где вам нужна данная переменная, либо сделать проверку внутри перед foreach :

@if(isset($movies)) 
@foreach ($movies as $movie) 
...
@endforeach 
@endif

Подвал раздела