6

私は2時間グーグルで検索しましたが、答えが見つかりませんでした. 多分あなたは助けることができます。

MyControllerで定義すると:

class MyController extends Base_Controller {
    public $layout = 'layouts.default';

    public function get_index() {
        $entries = Entry::all();
        return View::make('entries.index')
            ->with('entries', $entries);
        }
    }
}

entry\index.blade.php内:

@section('content')
    <h1>Test</h1>
@endsection

そして、layouts\default.blade.phpで:

<!DOCTYPE html>
<html>
<body>
    @yield('content')
</body>
</html>

何も表示されていません。そして、私はその理由を理解していません。MyController の戻り部分を次のように置き換えると:

$this->layout->nest('content', 'entries.index', array(
    'entries' => $entries
));

その後、すべてが機能していますが..きれいに見えず、好きではありません。すべてのビューを追加すると、@layout('layouts.default')すべてがうまく機能しますが、DRY ではありません。たとえば、RoR では、Controller でそのようなことを行う必要はありません。

MyController1つのレイアウトで定義して使用するにはどうすれreturn View::makeばよいですか(これは正しい方法だと思います)、またはどうすればより良くできますか?

4

3 に答える 3

15

コントローラでレイアウトを使用するには、次を指定する必要があります。

public $layout = 'layouts.default';

$layout の使用をオーバーライドするため、メソッドで戻ることもできません。代わりに、使用するレイアウト内にコンテンツを埋め込むには:

$this->layout->nest('content', 'entries.index', array('entries' => $entries));

メソッドで何も返す必要はありません。これで修正されます。


編集:

「美しい道?」

$this->layout->nest('content', 'entries.index')->with('entries', $entries);


$this->layout->content = View::make('entries.index')->with('entries', $entries);


$this->layout->entries = $entries;
$this->layout->nest('content', 'entries.index');
于 2012-11-21T20:59:28.683 に答える
0

そのはず

public $layout = 'layouts.default';

ここにリンクがありますテンプレート化 - 基本

これで、このようにレイアウトを返すことができます

$view = View::make('entries.index')->with('entries', $entries);
$this->layout->content = $view->render();
于 2012-11-21T20:56:44.643 に答える
-1
 class BaseController extends Controller {

/**
 * Setup the layout used by the controller.
 *
 * @return void
 */

/*Set a layout properties here, so you can globally
  call it in all of your Controllers*/
protected $layout = 'layouts.default';

protected function setupLayout()
{
    if ( ! is_null($this->layout))
    {
        $this->layout = View::make($this->layout);
    }
}

}

クラス HomeController は BaseController を拡張します {

public function showHome()
{   
    /*now you can control your Layout it here */
     $this->layout->title= "Hi I am a title"; //add a dynamic title 
     $this->layout->content = View::make('home');
}

}

参照: http://teknosains.com/i/tutorial-dynamic-layout-in-laravel-4

于 2014-01-29T17:32:13.880 に答える