Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Я создал лайаут в котором описываю только хедер и футер общий для всех страниц приложения. В боди пишу директиву @yield('content') . Файлы которые наследуют лайаут находятся в разных папках. Структура файла 'content.blade.php' -
@extends('layout')
@section('content')
@include('menu')
<p> Какой-то контент </p>
@endsection
В контролере создаю представление подобным образом - return view('home.content', [ 'dir' => 'home']);
Пока создал два роута -
Route::get('/', 'HomeController@home');
Route::get('/portfolio', 'PortfolioController@portfolio');
Делая запрос главной страницы страница выводится нормально. При запросе /portfolio возникают следующие ошибки -
ErrorException in Factory.php line 578:
Cannot end a section without first starting one.
InvalidArgumentException in Factory.php line 578:
Cannot end a section without first starting one.
Загуглил проблему везде нашел только один совет убрать директивы @endsection и @stop. Я это работает, но создает вместо одной проблемы другую - код в броузер приходит совершенно не валидный. Сперва содержание контент потом уже хедер и футер. Я понимаю это из за того что Блэйд читает файлы от дочерних к родителю и без директив @endsection и @stop он не знает что вставить на место директивы @yield.
Кто-нибудь знает что делать в подомном случае, для того чтоб html код оставался валидным и использовать один лайаут для всех представлений???
Если ошибка в представлении portfolio, то его код и нужно показать.
Не в сети
/layouts/layout.blade.php
<!DOCTYPE html>
<html lang="{{App::getLocale()}}">
@include('layouts.head')
<body>
@include('чего-тебе-надо')
@yeld('content')
</body>
</html>
/home.blade.php
@extends('layouts.layout')
@section('content')
твой контент для /home страницы
@endsection
/portfolio.blade.php
@extends('layouts.layout')
@section('content')
твой контент для /portfolio страницы
@endsection
HomeController.php
....
public function homePage()
{
return view('home');
}
....
PortfolioController.php
....
public function portfolioPage()
{
return view('portfolio');
}
....
route.php
Route::get('/', 'HomeController@homePage');
Route::get('/portfolio', 'PortfolioController@portfolioPage');
Помогло?
Не в сети
ещё из страницы можно управлять титулом страницы
portfolio.blade.php
@section('title','твой титул')
@section('content')
....
его закрывать не обязательно, но тот что content - стоит закрывать
/layouts/head.blade.php
<title>@yield('title', 'default title')</title>
Не в сети
если титул определяешь условиями внутри 'content'-секции, то закрывать надо всё и везде
Не в сети
Большое спасибо всем. Помогло.