web-dev-qa-db-fra.com

Templating dans Laravel

J'essaie de faire fonctionner mon modèle par défaut avec Laravel. Je viens du système de templates Codeigniter et Phil Sturgeon, alors j'essaie de le faire de la même manière. Quelqu'un peut-il m'aider avec ce que je manque/mal faire? Merci!

//default.blade.php (located in layouts/default)
<html>
    <title>{{$title}}</title>
    <body>
    {{$content}}
    </body>
</html>
//end default.blade.php

//home.blade.php (index view including header and footer partials)
@layout('layouts.default')
@include('partials.header')
//code
@include('partials.footer')
//end home

//routes.php (mapping route to home controller)
Route::controller( 'home' );
//end

//home.php (controller)
<?php
class Home_Controller extends Base_Controller {
    public $layout = 'layouts.default';
    public function action_index()
    {   
        $this->layout->title = 'title';
        $this->layout->content = View::make( 'home' );
    }
}
//end
27
coryj

Vous mélangez deux approches de mise en page différentes de Laravel . Ainsi, vous restituez la vue de mise en page, incluez la vue d'accueil et essayez d'inclure à nouveau la mise en page.

Ma préférence personnelle est l'approche du contrôleur.

Dispositions du contrôleur

Le contrôleur et les dispositions peuvent rester les mêmes.

Note: En tant que raccourci, vous pouvez imbriquer le contenu au lieu de View :: make, qui le restaure automatiquement lorsque vous l'insérez dans la mise en page.

Dans home.blade.php, supprimez la fonction @layout.

Modifier (exemple):

controllers/home.php

<?php
class Home_Controller extends Base_Controller {
  public $layout = 'layouts.default';
  public function action_index()
  {
    $this->layout->title = 'title';
    $this->layout->nest('content', 'home', array(
      'data' => $some_data
    ));
  }
}

views/layouts/default.blade.php

<html>
  <title>{{ $title }}</title>
  <body>
    {{ $content }}
  </body>
</html>

views/home.blade.php

Les partiels sont inclus dans le contenu .

@include('partials.header')
{{ $data }}
@include('partials.footer')

Disposition de la lame

Si vous voulez cette approche, vous avez quelques problèmes là-bas. Tout d'abord, vous incluez un nouveau contenu après la mise en page. Pas sûr que ce soit intentionnel, mais la fonction @layout elle-même est fondamentalement juste un @include restreint pour être au tout début de la vue. Donc, si votre mise en page est un fichier html fermé, toute inclusion après celle-ci sera ajoutée après votre mise en page html.

Votre contenu doit utiliser des sections ici avec la fonction @section et @yield dans votre mise en page. L'en-tête et le pied de page peuvent être inclus dans la présentation avec @include ou, si vous souhaitez le définir dans la vue du contenu, placez-les également dans une @section, comme ci-dessous. Si vous le définissez ainsi si une section n'existe pas, rien ne sera généré.

controllers/home.php

<?php
class Home_Controller extends Base_Controller {
  public function action_index()
  {
    return View::make('home')->with('title', 'title');
  }
}

views/layouts/default.blade.php

<html>
 <title>{{$title}}</title>
 <body>
  @yield('header')
  @yield('content')
  @yield('footer')
 </body>
</html>

views/home.blade.php

@layout('layouts.default')
@section('header')
  header here or @include it
@endsection
@section('footer')
  footer
@endsection
@section('content')
  content
@endsection
84
TLGreg

La réponse donnée ci-dessus explique comment créer des modèles dans Laravel. Cependant, pour obtenir des avantages supplémentaires, tels que la gestion de thèmes organisés dans un répertoire de thèmes avec la possibilité de basculer entre les thèmes et le fait que les partiels et les ressources de thèmes réunis sonnent presque comme Phil Sturgeon Bibliothèque pour CI . Vous voudrez peut-être vérifier le forfait Thème de Laravel. Voici le lien:

http://raftalks.github.io/Laravel_Theme_Bundle/

0
Raftalks