将变量从控制器传递到主布局

时间:2014-04-02 12:25:40

标签: php laravel laravel-4 blade

我在views / layouts / main.blade.php中有一个主要布局 如何传递我的ListingsController.php

中的变量
public function getMain() {
        $uname = Auth::user()->firstname;
        $this->layout->content = View::make('listings/main')->with('name', $uname);
 }

然后我将它添加到listing / main

中的main.blade.php
@if(!Auth::check()) 
<h2>Hello, {{ $name }}</h2>
@endif

它可以工作,但我无法将该变量传递给views / layouts / main.blade.php中的mmaster布局 我只需要在标题中显示用户的名字。

3 个答案:

答案 0 :(得分:8)

它应该按照它的方式工作,但是......如果你需要将某些内容传播到多个视图,最好使用View::composer()View::share()

View::share('name', Auth::user()->firstname);

如果只在layout.main上需要它,您可以:

View::composer('layouts.main', function($view)
{
    $view->with('name', Auth::check() ? Auth::user()->firstname : '');
});

如果您在所有观看中都需要它,您可以:

View::composer('*', function($view)
{
    $view->with('name', Auth::check() ? Auth::user()->firstname : '');
});

您甚至可以为此目的创建文件,例如app/composers.php,并将其加载到app/start/global.php中:

require app_path().'/composers.php';

答案 1 :(得分:0)

$this->data['uname'] = 'some_username';
return View::make('dashboard.home', $this->data);

编辑:: 例如:

<?php 
class BaseController extends Controller {

    /**
     * Setup the layout used by the controller.
     *
     * @return void
     */
        protected $layout = 'layouts.front';

    protected function setupLayout()
    {
        if ( ! is_null($this->layout))
        {
               $this->data['sidewide_var'] = 'This will be shown on every page';
           $this->layout = View::make($this->layout, $this->data);
        }
    }

}

_

<?php 
class BlogController extends BaseController {
    public function getPost($id)
    {
      $this->data['title'] = 'Post title'; //this will exist on only this page, but can be used in layouts/front.blade.php (for example)
      return View::make('blog.single_post', $this->data);
    }
}

这是我使用控制器的方式。 $ sidewide_var和$ title都可以在布局或视图中使用

答案 2 :(得分:0)

为此使用专用课程。

首先:

// app/Providers/AppServiceProvider.php
public function boot()
{
    view()->composer('layouts.master', 'App\Http\Composers\MasterComposer');
}

然后:

// app/Http/Composers/MasterComposer.php
use Illuminate\Contracts\View\View;

class MasterComposer {

    public function compose(View $view)
    {
        $view->with('variable', 'myvariable');
    }
}

请记住注册服务提供商。

更多:https://laracasts.com/series/laravel-5-fundamentals/episodes/25