ошибка при использовании Laravel с использованием extends, include и yield

#php #laravel

#php #laravel

Вопрос:

Мои файлы сохраняются в resources views layouts, как на рисунке ниже :

Код, который я использую, прост, описан ниже :

header.blade.php <h1>Header</h1>

footer.blade.php <h1>Footer</h1>

index.blade.php

 @include('layouts.header')
@yield('center')
@include('layouts.footer') 
 

allproducts.blade.php

 @extends('layouts.index')
@section('center')
<h1>This is the center of the page</h1>
@endsection
 

в маршруте web.php

Route::get('Products', ["uses"=>"ProductsController@index"]);

в контроллере

 <?php

namespace AppHttpControllers;
use AppModelsProduct;
use IlluminateSupportFacadesDB;
use IlluminateHttpRequest;

class ProductsController extends Controller
{
    public function index()
    {
         return view("allproducts", compact("Products"));
    }
}
 

У меня всегда есть эта ошибка: View [layout.index] не найден.

Я включил фотографию, чтобы показать, что мои файлы находятся на правильном пути.

Прочитав аналогичный вопрос и предлагаемые решения, заданные ранее по этой проблеме

  1. Представление, которое я включаю, существует в правильной папке.
  2. Файл в каталоге layouts.
  3. В allproducts.balde.php файл, который я написал @extends('layout.index') вместо @extends('layouts.index') этого, как решенный какой-то вопрос.

Я потратил много времени, пытаясь решить эту проблему.

Я действительно ценю любую помощь

с уважением

Комментарии:

1. Посмотрите на ошибку, затем снова посмотрите на пункт 3. Вы все еще пропускаете s в конце layout . Обратите внимание, что у вас есть макет как в allproducts (для индекса), так и в index (для нижнего колонтитула)

2. Спасибо за ваш ответ @aynber Я сделал то же самое, что вы упомянули. Но ошибка остается View [layout.footer] not found.

3. Как я уже сказал, это точно такая же проблема. layout против layouts

4. @anyber спасибо. даже это проблема не решена. добавьте s или удалите ту же проблему.

5. Проверьте свой метод контроллера, в котором вы возвращаете ответ view — проверьте, нет ли там опечатки

Ответ №1:

@Donkarnash Я очистил представление с помощью команды, которую вы мне дали. Я не знаю, как, но проблема решена. Я проверил включенный файл, и все в коде в порядке. даже моя проблема решена, но я не понимаю, в чем именно заключалась проблема. Я попытался добавить s и удалить его, как упоминали ребята, но ошибка была той же. в противном случае большое вам спасибо. вы действительно мне помогаете

Laravel кэширует скомпилированные представления. Эти представления компилируются из блейд-файлов, которые создает разработчик.

Иногда, когда разработчик вносит некоторые незначительные изменения — например, в вашем случае вы просто добавили ‘s’ в макет, чтобы сделать его макеты — не улавливаются Laravel, скомпилированные представления не обновляются, т.Е. перекомпилируются и снова кэшируются.

Поэтому время от времени, когда вы получаете сообщение об ошибке, касающееся блейд-представлений, и даже после изменения / исправления ошибки, если вы все еще получаете то же сообщение об ошибке, вы должны очистить кэшированные представления, запустив из терминала

 php artisan view:clear
 

Когда вы очищаете кэшированные представления, Laravel перекомпилирует представления из блейд-файлов, а затем кэширует их

Ответ №2:

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

Комментарии:

1. Это то, о чем я думал. Но я не знал, как это исправить. Я много раз пытался изменить код, но всегда появлялась ошибка. Я также пытался удалить cache: очистить, но без какого-либо прогресса.

2. Попробуйте следовать данным. Вы начинаете с запроса get в своем браузере, чтобы он отправлялся в ваш файл веб-маршрутов, затем он переходит в ваш файл контроллера, убедитесь, что у вас есть правильный маршрут и правильный путь к представлению в контроллере

3. @paroCham в контроллере, что у меня есть <?php namespace AppHttpControllers; use AppModelsProduct; use IlluminateSupportFacadesDB; use IlluminateHttpRequest; class ProductsController extends Controller { public function index() { return view("allproducts", compact("Products")); } }