laravel – How to include a sub-view in Blade templates?

laravel – How to include a sub-view in Blade templates?

You can use the blade template engine:

@include(view.name) 

view.name would live in your main views folder:

// for laravel 4.X
app/views/view/name.blade.php  

// for laravel 5.X
resources/views/view/name.blade.php

Another example

@include(hello.world);

would display the following view

// for laravel 4.X
app/views/hello/world.blade.php

// for laravel 5.X
resources/views/hello/world.blade.php

Another example

@include(some.directory.structure.foo);

would display the following view

// for Laravel 4.X
app/views/some/directory/structure/foo.blade.php

// for Laravel 5.X
resources/views/some/directory/structure/foo.blade.php

So basically the dot notation defines the directory hierarchy that your view is in, followed by the view name, relative to app/views folder for laravel 4.x or your resources/views folder in laravel 5.x

ADDITIONAL

If you want to pass parameters: @include(view.name, array(paramName => value))

You can then use the value in your views like so <p>{{$paramName}}</p>

EDIT: Below was the preferred solution in 2014. Nowadays you should use @include, as mentioned in the other answer.


In Laravel views the dot is used as folder separator.
So for example I have this code

return View::make(auth.details, array(id => $id));

which points to app/views/auth/details.blade.php

And to include a view inside a view you do like this:

file: layout.blade.php

<html>
  <html stuff>
  @yield(content)
</html>

file: hello.blade.php

@extends(layout)

@section(content)
  <html stuff>
@stop

laravel – How to include a sub-view in Blade templates?

As of Laravel 5.6, if you have this kind of structure and you want to include another blade file inside a subfolder,

|— views

|——- parentFolder (Folder)

|———- name.blade.php (Blade File)

|———- childFolder (Folder)

|————– mypage.blade.php (Blade File)

name.blade.php

  <html>
      @include(parentFolder.childFolder.mypage)
  </html>

Leave a Reply

Your email address will not be published.