web-dev-qa-db-ja.com

Laravelのテンプレート

Laravelで動作するデフォルトのテンプレートを取得しようとしています。私はCodeigniterとPhil Sturgeonのテンプレートシステムから来ているので、同様の方法でそれをしようとしています。誰かが私が行方不明/間違っていることで私を助けることができますか?ありがとう!

//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

Laravelの2つの異なるレイアウトアプローチを組み合わせています。このようにして、レイアウトビューをレンダリングし、ホームビューを含めて、再びレイアウトを内側に含めます。

私の個人的な好みは、コントローラーのアプローチです。

コントローラーのレイアウト

コントローラーとレイアウトは同じままでかまいません。

注:ショートカットとして、View :: makeの代わりにコンテンツをネストできます。これにより、レイアウトにエコーアウトすると自動的にレンダリングされます。

Home.blade.phpで@layout関数を削除します。

編集(例):

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

パーシャルはコンテンツに含まれています。

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

ブレードレイアウト

このアプローチが必要な場合、いくつかの問題があります。最初に、レイアウトの後に新しいコンテンツを含めます。意図的かどうかはわかりませんが、@ layout関数自体は基本的に@ includeビューの最初にあるように制限されています。したがって、レイアウトが閉じたHTMLである場合、HTMLレイアウトの後にそれ以降のインクルードが追加されます。

あなたのコンテンツはここでセクションを使用する必要があります@ section関数と@ yieldあなたのレイアウトで。ヘッダーとフッターは、@ includeでレイアウトに含めることができます。または、コンテンツビューで定義する場合は、それらを@ sectionも以下のようになります。そのように定義すると、セクションが存在しない場合は何も生成されません。

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

上記の回答では、Laravelでのテンプレートの作成方法について説明していますが、テーマ間で切り替えることができるテーマディレクトリに整理されたテーマを管理したり、パーシャルとテーマリソースを一緒に持つなどの追加の利点を得るために、ほぼ似たようなものに聞こえます Phil CIのチョウザメテンプレートライブラリ 。 Laravelのテーマバンドルを確認することをお勧めします。リンクは次のとおりです。

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

0
Raftalks