I'm working on this project using Laravel.
According to this tutorial I'm watching, I had to add this bit of code at the top of the main view.
@extends('layouts.masters.main')
Since I'm new to Laravel this got me wondering why can i not simply use.
@include('layouts.masters.main')
I tried it instead and it did the same thing basically. Only thing is i do know how include works but i don't really know what extends does.
Is there a difference and so yeah what is it. Why did tutorial guy go for @extends
and not @include.
@include
is just like a basic PHP include, it includes a "partial" view into your view.
@extends
lets you "extend" a template, which defines its own sections etc. A template that you can extend will define its own sections using @yield
, which you can then put your own stuff into in your view file.
Example:
template.blade.php
<html> <body> @yield('header') @yield('content') @yield('footer') </body> </html>
view-one.blade.php
@extends('template') @section('header') View one's header @endsection @section('content') View one's content @endsection @section('footer') View one's footer @endsection
Which will result in:
<html> <body> View one's header View one's content View one's footer </body> </html>
Now you could create another view which extends the same template, but provides its own sections.
Another benefit to using @extend
is inheritance. You could provide a base template, and then another child template that extends that one which subsequently yields it's own sections. You can then extend that child template.
@include
does not provide the structural skeleton that extending a layout template with @extend does. With @include
you're inserting a partial from another file.
extending a blade template provides a structure to the view that is defined in the layout template. For example, the layout:
layouts/layout.blade.php
<!DOCTYPE html><html lang="en">
<head> <meta charset="UTF-8" /><title>DOCUMENT</title></head>
<body>
@yield('header')
@yield('content_1')
@yield('content_2')
@yield('content_3')
@yield('footer')
</body>
</html>
with the view
show.blade.php
@extends('layouts.layout')
@section('content_1')
<h2>Content1 Puppy Dog</h2>
@endsection
@section('footer')
<h1>I wanna be at the bottom</h1>
@endsection
@section ('content_3')
<h2>Content3 Horsie</h2>
@endsection
@section ('content_2')
<h2>Content2 Kitty Cat</h2>
@endsection
@section('header')
<h1>I wanna be at the top</h1>
@endsection
Gives the output:
<body>
<h1>I wanna be at the top</h1>
<h2>Content1 Puppy Dog</h2>
<h2>Content2 Kitty Cat</h2>
<h2>Content3 Horsie</h2>
<h1>I wanna be at the bottom</h1>
</body>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With