В своем заголовке я некоторое время использовал @yield (‘title’), чтобы создать динамический заголовок для каждой отдельной страницы. Я хотел бы сделать еще один шаг вперед и сделать что-то вроде этого:
@if(@yield('title') == 'post')
<h1> This is the post page </h1>
@endif
Но если я попробую это, я получу ошибку:
«Выражение« yield »может использоваться только внутри функции»
Я искал и нашел такие вещи, как Section :: yield (‘title’), но все они не работали.
Как я могу использовать значение @yield (‘title’) в операторе if?
Я знаю, что вы можете отправить $ title для представления из контроллера, но я не думаю, что это выглядит очень хорошо .. Вы должны были бы определить заголовок дважды таким образом.
Спасибо за прочтение!
давайте посмотрим на ваш код
@if(@yield('title') == 'post')
<h1> This is the post page </h1>
@endif
давайте предположим, что это работает. тогда что @section('title')
проведет? Post
? это не имеет никакого смысла.
@yield
используется для замены содержимого раздела. это не должно быть условно. это не должно использоваться как переменная. это имеет конкретное назначение. какие бы условия вы не хотели использовать, используйте их в поле зрения или в контроллере.
контроллер:
return View::make('view.blade.php',['title' => 'post']);
вот и все. вот как вы отправляете переменную в представление. Я не вижу ничего плохого в подходе.
для laravel 4.1 и ниже вы можете использовать эту команду.
@extends('layout.blade.php')->with('title','post')
но это поведение было изменено. до 4.1 переменные, передаваемые на просмотр, не были доступны в макете. теперь, в 4.2, это поведение изменено, и какие бы данные вы не передавали представлению, они также присутствуют в контроллере.
Хорошо, я не говорю, что это красиво, но вы можете передавать переменные PHP из представления в макет (или родительское представление)
Просмотр, содержащий «зная» заголовок
<?php $title = 'post' ?>
Вид компоновки
<?php
// just making sure the variable is set
if(!isset($title)){
$title = 'default-title';
}
?>
@if($title == 'post')
<h1> This is the post page </h1>
@endif
Однако вам, возможно, придется спросить себя, следует ли вам изменить способ, которым вы хотите это сделать. (Может быть, поможет ответ Integral Wind-up). Также View::share('title', 'post')
от вашего контроллера будет намного чище.
Что, если вы просто определите это как раздел, так будет чище. Я предполагаю, что у вас есть макет лезвия, который расширяет мастер-макет.
@extends('layouts.master')
@section('title', 'Some title')
@section('header')
<h1> This is the post page </h1>
@stop
Тогда просто приведите их обоих в ваш основной макет. Если у вас есть другая страница, которая должна иметь другой заголовок и заголовок, вы должны создать новый вид, который снова расширяет основной макет.
Я не уверен, что это то, что вы пытаетесь сделать, но вы не можете использовать содержимое @yield в качестве условия для @if. По крайней мере, без использования тега PHP, который, как мне кажется, побеждает цель использования шаблонизатора.
Если это не то, что вы ищете, то, по крайней мере, я надеюсь, что это помогло.
Увидеть http://laravel.com/docs/4.2/templates для вашей справки.