在Laravel 4中共享视图和数据

时间:2013-04-21 16:42:06

标签: templates views laravel laravel-4 blade

我正在使用Laravel 4构建一个简单的日记应用程序,我想创建一个在所有管理员视图中共享的侧边栏和标题。标题将要求显示用户数据,而侧栏将包含指向应用程序各个部分的链接。

我真的不确定如何解决这个问题,看过View Composers,但我不确定如何正确实现它们,或者这是否是它们的目标。

如果您可以向我提供有关此资源或任何其他资源的明确文档,那将是非常棒的。感谢。

加雷

2 个答案:

答案 0 :(得分:1)

我已经设法通过View Composer完成了我想做的事情,但我想知道你对它的想法以及它是否被认为是最佳实践或一个好的解决方案。

// View::composer for layouts.admin in my routes.php file
View::composer('layouts.admin', function($view)
{
    $user = AdminController::get();

    $view->with('user', $user);
});

// public static method get() in AdminController
public static function get()
{
    $userGreeting = Auth::user()->greetings()->orderBy(DB::raw('RAND()'))->first();

    $user = new User;
    $user->first_name = Auth::user()->first_name;
    $user->greeting = $userGreeting->greeting;

    return $user;
}

// layouts.admin view
{{ Html::link('logout', 'Logout') }}
<p>Hey {{ $user->first_name }}</p>
<p>{{ $user->greeting }}</p>

答案 1 :(得分:0)

对于那些并不复杂的网站,我只想使用刀片创建一个简单的模板。

//file: template.blade.php
@include('includes/header')
@include('includes/sidebar')
@include($view)
@include('includes/footer')

显然,我在header.blade.php中有sidebar.blade.phpfooter.blade.phpviews/includes folder个文件。

然后,在控制器中,它就像......一样简单。

$view = 'exampleView';
return View::make('template')->with('view', $view);

此外,您传递到模板视图中的所有变量也将可用于该模板中调用的每个包含。