2015-01-02 2 views
0

Моя проблема заключается в том, что наследование шаблонов не работает для некоторых видов.Наследование шаблонов/расширение макета не работает в laravel

Это мой шаблон (layout.blade.php)

<html> 
    <head> 
    <meta charset="utf-8"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <title>PoetryCollective</title> 
    <link href="{{ asset('bower/bootstrap/dist/css/bootstrap.min.css') }}" rel="stylesheet"> 
    <link href="{{ asset('css/style.css') }}" rel="stylesheet"> 

    <!-- Bootstrap --> 
    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> 
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// --> 
    <!--[if lt IE 9]> 
     <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> 
     <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> 
    <![endif]--> 
    </head> 
    </head> 
    <body> 

     </div> 
     <div class="container"> 

     <div class="row"> 
      </div> 
      <div class="col-md-2 line logotitle"> 
         <img alt="logotitle" src="{{ asset('images/poetryfont.png') }}"></img> 

      </div> 
      <div class="col-md-10 line"> 
       <ul class="nav nav-tabs mynav navbar-right"> 
         <li role="presentation"><a href="#">Login</a></li> 
         <li role="presentation"><?php echo link_to('/users/signup', 'SignUp');?></li> 
       </ul> 
      </div> 
      <div class="row"> 
       <div class="col-md-11"> 
        <div class="logotitle"> 
        </div> 
       </div> 
       <div class="col-md-1 rightlogo"> 
       </div> 
      </div> 
      <div class="row"> 
       <div class="col-md-12"> 
       <div class="navigation"> 
        <nav role="navigation" class="navbar navbar-default mainnav"> 
         <ul class="nav navbar-nav"> 
          <li role="presentation" class="active"><a href="#">Write poems</a></li> 
          <li role="presentation"><a href="#">Read Poems</a></li> 
         </ul> 
         <form class="navbar-form navbar-right" role="search"> 
          <div class="form-group"> 
           <input type="text" class="form-control" placeholder="Find a poem"> 
          </div> 
          <button type="submit" class="btn btn-default">Submit</button> 
         </form> 
        </nav> 
       </div> 
      </div> 
     </div> 
     <div class="row"> 
      <div class="col-md-8 content"> 
         @yield('content') 


         <h1>Lorem Ipsum</h1> 
         <p> 
          Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras maximus in velit nec mattis. Morbi auctor massa vitae lorem molestie aliquam. Vivamus bibendum mi at eros fermentum, et gravida risus euismod. Quisque eu nisl vel urna placerat imperdiet nec in tortor. Morbi interdum pulvinar odio, eu pharetra massa varius vitae. Pellentesque suscipit felis ante, at dapibus felis luctus quis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean feugiat luctus erat, id facilisis mi suscipit quis. Donec eu erat sed leo volutpat rutrum. Suspendisse aliquam pretium eleifend. Curabitur nec volutpat ex. In interdum tortor id enim efficitur, ut porttitor lacus consectetur. Mauris blandit mollis neque, eget tincidunt ex hendrerit non. Donec sed ligula eu enim feugiat sollicitudin. Sed facilisis at mauris in rutrum. 

         </p> 

         <h1>Lorem Ipsum</h1> 

         <p> 


Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent purus justo, consectetur at blandit id, porttitor vitae nunc. Interdum et malesuada fames ac ante ipsum primis in faucibus. Integer efficitur nulla eros. Aliquam eleifend venenatis sapien, sit amet lacinia dolor rhoncus quis. Fusce aliquam ullamcorper nulla at iaculis. Pellentesque suscipit, mi ut rhoncus sodales, elit arcu suscipit ex, a tempor eros quam quis ipsum. Vestibulum interdum rutrum faucibus. Aliquam vel feugiat mi, id vulputate nulla. Aliquam dapibus dolor eu risus tempus posuere. Aliquam erat volutpat. Integer in malesuada leo, ac commodo diam. 

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Aliquam bibendum lectus nec felis tempus, a fermentum enim condimentum. Etiam magna nulla, bibendum egestas dictum vitae, rhoncus at lorem. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla vestibulum vel lectus pharetra lobortis. Pellentesque lorem odio, consectetur in ultricies sagittis, facilisis at ante. Phasellus at sagittis nunc. Mauris hendrerit velit libero, vitae finibus augue rhoncus eget. Ut tincidunt pharetra arcu, ac fermentum nisi faucibus in. Nulla molestie vestibulum ligula, eget ultricies ex dictum id. Quisque scelerisque dictum lorem. Ut euismod blandit sem, sit amet tempor nulla sollicitudin aliquam. Nulla egestas feugiat fringilla. 

Etiam id molestie neque, non malesuada enim. Aenean blandit interdum ligula, nec gravida dui. Nam lectus nisi, pulvinar at dolor et, dignissim maximus odio. Quisque sed congue velit, pellentesque fermentum dui. Mauris sed varius sem, nec dapibus est. Nulla suscipit enim diam, quis gravida quam placerat vel. Integer a dui ornare, hendrerit urna sed, sollicitudin enim. Phasellus id ante a sapien dictum hendrerit fermentum nec lectus. Integer elementum orci volutpat viverra interdum. 

Fusce eget orci ornare, varius libero in, sodales nisl. Aenean at scelerisque eros. Nunc ut viverra neque, ut posuere libero. Maecenas in massa venenatis, mattis mauris. 


         </p> 
      </div> 

      <div class="col-md-4 sidebar"> 
        <h3>Sidebar</h3> 

      </div> 

     </div> 
     <div class="row"> 
      <div class="col-md-12 footer"> 
       <p class="credit"> 
        Fontdesign in Logo by Sergiy S. Tkachenko</p> 
      </div> 
     </div> 
    </div> 


     <!-- jQuery (necessary for Bootstrap's JavaScript plugins) --> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
    <!-- Include all compiled plugins (below), or include individual files as needed --> 
    <script src="{{ asset('bower/bootstrap/dist/js/bootstrap.min.js') }}"></script> 
    <script src="{{ asset('js/production.min.js') }}"></script> 
    </body> 
</html> 

Как ни странно, этот вид работы и нагрузки/расширяет шаблон макета:

@extends('layout') 

@section('content') 
{{ $poems }} 
@stop 

Но это одна не работает и не загружать шаблон, но отображает только его содержимое:

@extends('layout') 


@section('content') 

<?php 
echo "<p>Signing up</p>"; 

echo Form::open(array('url' => '/users/signup')); 
echo Form::label('username', 'Username'); 
echo Form::text('username'); 
echo Form::label('email', 'E-Mail Address'); 
echo Form::text('email'); 
echo Form::label('Password'); 
echo Form::password('password'); 
// echo Form::password('password1', 'Password confirmation'); 
echo Form::close(); 

if(!empty ($errors)) 
{ 
    foreach ($erros->all() as $error) 
    { 
     echo '<div class="error">' . $error . '</div>'; 
    } 
} 
?> 
@stop 

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

+0

Пожалуйста, покажите ваш контроллер – xAoc

+0

'Еогеасп ($ erros-> все() как $ error) 'to' foreach ($ errors-> all() как $ error)' – RY35

ответ

0

Это, кажется, одна из тех ситуаций, когда вы делаете несколько неустановленных (возможно, нереализованных) предположений о том, как работает система шаблонов. Я собираюсь указать, что путает ваш вопрос, и, надеюсь, это указывает на правильное направление.

системы шаблонов в Ларавеле. Один из них, названный лезвие, использует синтаксис как этот

@extends('layout') 

@section('content') 
    La de {{$da}} 
@stop 

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

<h1>This is a template</h1> 
La de <?php echo $da; ?>  

Laravel решает, какой движок использовать на основе имени файла шаблона. Если вы говорите,

View::make('example'); 

и назовите шаблон app/view/example.blade.php, то Laravel сделает ваш шаблон, используя систему лезвия. Если вы назовете шаблон app/view/example.php, Laravel отобразит ваш шаблон с помощью системы PHP.

Важно: Только система лезвий поддерживает наследование шаблона. то есть нет эквивалента @extends и @section для шаблона PHP. Вы можете имитировать это с помощью других средств, но в шаблонах PHP нет концепции наследования.

В вашем вопросе вы не указали имена своего шаблона, поэтому мы не можем определить, обрабатываются ли они клиентом или PHP.

Кроме того, в вашем втором шаблоне вы смешиваете лезвие и синтаксис PHP. Вы не можете просто переключиться на PHP с <?php в шаблоне клинка.

@section('content') 

<?php 
echo "<p>Signing up</p>"; 

Это только предположение, но я предполагаю, что этот второй шаблон имеет blade.php расширение, то есть Laravel это делает его лезвием, поэтому ваш PHP код не отображается. Лучшее, что вам нужно сделать, это преобразовать ваш шаблон PHP в шаблон клинка. то естьэто

<?php 
echo "<p>Signing up</p>"; 

echo Form::open(array('url' => '/users/signup')); 
echo Form::label('username', 'Username'); 

Становится это

<p>Signing up</p> 
{{Form::open(array('url' => '/users/signup'))}} 
{{Form::label('username', 'Username')}} 
+1

Вы можете использовать сырые теги php в шаблоне клинка, я думаю, проблема в других вещах – xAoc

+0

Ух, узнал что-то новое там. Я не думаю, что мне нравится эта функция. Независимо от того, что назвали ваши шаблоны? –

0

Я понимаю вашу проблему, но ваш код не имеет смысла для меня.

Если вы используете шаблон лезвия вы бы лучше подходит, используя следующие:

@extends('layout') 

@section('content') 

<p>Signing up</p> 

{{ Form::open(array('url' => '/users/signup')) }} 
{{ Form::label('username', 'Username') }} 
{{ Form::text('username') }} 
{{ Form::label('email', 'E-Mail Address') }} 
{{ Form::text('email') }} 
{{ Form::label('Password') }} 
{{ Form::password('password') }} 
{{ Form::close() }} 

@if(!empty ($errors)) 
    @foreach ($erros->all() as $error) 
     <div class="error">' . $error . '</div>'; 
    @endforeach 
@endif 
@stop 

Гораздо чище

0

Если один из них работает, а другой нет, то необходимо проверить следующее :

1) Расположение файла. например, если он находится в папке «Макеты», вам необходимо предварить имя папки:

@extends('layouts.foo') 

2) Имя файла имеет расширение .blade.php например foo.blade.php (не foo.php)

3) фактическое имя файла, вы, возможно, назвали его неправильно, проверьте правильность написания и расширение файла