117 votes

Comment passer une variable au layout en utilisant le templating Blade de Laravel ?

Dans Laravel 4, mon contrôleur utilise une mise en page Blade :

class PagesController extends BaseController {
    protected $layout = 'layouts.master';
}

La mise en page principale édite le titre de la variable et affiche ensuite une vue :

...
<title>{{ $title }}</title>
...
@yield('content')
....

Toutefois, dans mon contrôleur, il semble que je ne puisse transmettre des variables qu'à la vue secondaire, et non à la mise en page. Par exemple, une action pourrait être :

public function index()
{
    $this->layout->content = View::make('pages/index', array('title' => 'Home page'));
}

Cela ne transmettra que le $title à la section du contenu de la vue. Comment puis-je fournir cette variable à l'ensemble de la vue, ou au moins à la disposition principale ?

4voto

Dwight Points 1951

Il semble que je puisse transmettre des variables à l'ensemble de la mise en page en utilisant les attributs de l'objet de mise en page. Par exemple, pour résoudre mon problème, j'ai pu faire ce qui suit :

$this->layout->title = 'Home page';

2voto

kunal rajput Points 308

La solution simple suivante a fonctionné pour moi. Dans la mise en page

    <title>@yield('Page-Title') </title>

dans votre lame

@section('Page-Title')
Add {{ucFirst($payor->name)}}
@endsection

1voto

Shiro Points 1164
class PagesController extends BaseController {
    protected $layout = 'layouts.master';

    public function index()
    {
        $this->layout->title = "Home page";
        $this->layout->content = View::make('pages/index');
    }
}

Dans le fichier Blade Template, N'OUBLIEZ PAS d'utiliser @ devant la variable.

...
<title>{{ $title or '' }}</title>
...
@yield('content')
...

1voto

Web Decode Points 1

Essayez simplement cette méthode simple : dans le contrôleur:-

 public function index()
   {
        $data = array(
            'title' => 'Home',
            'otherData' => 'Data Here'
        );
        return view('front.landing')->with($data);
   }

Et dans votre mise en page (app.blade.php) :

<title>{{ $title }} - {{ config('app.name') }} </title>

C'est tout.

1voto

Si vous voulez obtenir les variables des sections, vous pouvez payer comme ceci :

$_view      = new \View;
$_sections  = $_view->getFacadeRoot()->getSections();
dd($_sections);
/*
Out:
array:1 [
  "title" => "Painel"
]
*/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X