I am working on my master page which is currently not working. In browser it returns:
#layout('master') and not key as specified.
code in routes.php
Route::get('/', function()
{
return View::make('index');
});
code in view: index.blade.php
#layout('master')
#section('container')
<h1> Hey </h1>
#endsection
code in view: master.blade.php
<div class="container">
#yield('container')
You need to use #extends('master') in L4 and have it right at the top of your file.
I mean RIGHT at the top, line 1, with no white space around it. This use to be a problem in L3, not sure if it also is the case for L4.
replace #layout with #extends
refer http://laravel.com/docs/templates#blade-templating for Using A Blade Layout
Related
So I created a custom layout for my design, it works on other blade but not for this one blade. I did some recheck just to make sure that it is the same as other blade that works.
Also the controller is prettymuch the same since it has the same function for my other blade.
My checkout.blade :
#extends('layouts.custom')
#section('content')
<h1> Content </h1>
#endsection
My custom layout
<!DOCTYPE html>
<html>
<head>
</head>
<body>
#yield('content')
</body>
<footer>
</footer>
</html>
My Controller:
public function checkout()
{
$keranjangItems = \Cart::session(auth()->id())->getContent();
return view('keranjang.checkout', compact('keranjangItems'));
}
And I've tried to put the content on other blade and got no problem.
And I've tried to change my other controller to view this blade and also working.
Can anyone help me find where the problem is? thanks
Update: I also tried to just put together the code no include layout or what so ever and it's still have the same result
On your custom.blade file it says
#yield('layouts.header')
and on your checkout.blade file it says
#section('content')
<h1> Content </h1>
#endsection
Either update the layout to match the section name on your checkout view or update the checkout view to match the yielded section name on the layout.
I have a little problem with Laravel Blade in Laravel version 5.2. Can someone tell me how to include a Blade template within a Blade template? I already try to include welcome.blade.php
by #include('welcome') but, I always get an error message.
first you need to define a master page or main template what ever you say.
we create main.blade.php as template page .
<html>
<div class="row">
#yield("content")
</div>
the above code is our simple template page.
inside your welcome.blade.php write as below
#extends("main")
#section("content")
your code
#stop
if welcome.blade.php is your template or master page do like below.
welcome.blade.php :
<html>
<div class="row">
#yield("content")
</div>
inside your other page you want use welcome page as template do as below :
#extends("welcome")
#section("content")
your code
#stop
I have tried all in this link :
php laravel blade template not rendering
My codes are here.
my views/layouts/master.blade.php file contains
<html>
<body>
#section('sidebar')
This is the master sidebar.
#show
<div class="container">
#yield('content')
</div>
</body>
</html>
my views/child.blade.php file contains
#extends('layouts.master')
#section('content')
<p>This is my body content.</p>
#endsection
my route.php contains
Route::get('blade', function () {
return view('child');
});
from my browser I typed in :
http://localhost/larablog/public/blade
The output is a blank page.
I tried with non blade pages and it worked, I also passed normal variable to non blade pages which also worked. When I try with blade templating, the page seems to be blank always.
Please let me know where I went wrong.
Thanks.
As in the following link
Proper laravel storage permissions
I had a permission issue at
storage/framework/views folder.
I changed the folder permission to 777 and it all solved the issue.
May be Problem is with the routing
Route::get('/blade', function () {
return view:('child');
});
If you're running on apache make sure the web server has write permission to the storage directory.
I tried to use the laravel's template system: blade but seems like not working when using the code below in the file users.blade.php:
#extends('layout')
#section('content')
Users! #stop
and browser,
#extends('layout')
That should work if you have a template file at /app/views/layout.blade.php that contains
<p>Some content here</p>
#yield('content')
<p>Some additional content here</p>
Then in your /app/views/user.blade.php, the content
#extends('layout')
#section('content')
<p>This is the user content</p>
#stop
If you call return View::make('user') you should have the compiled content
<p>Some content here</p>
<p>This is the user content</p>
<p>Some additional content here</p>
I hope that helps clarify things for you. If not, can you provide your template file locations and the relevant content?
Just remove the extra space or anything before #extends('yourlayoutfile').
It should be the first thing to be rendered in the file.
I was facing the same problem and tried many things.Suddenly I found a single space at the starting of the file before #extends.
Removed the space and is working fine.
Thanks.
Format:
#extends('layouts.default')
#section('content')
.....
#stop
---Edit----
If this didnt work then try :
Copy all the content in the file and then delete the file.
Create a new file and save it as filename.blade.php
Only after saving the file paste the content into the page.
Save the changes and run it.
This works.
Thank you.
Where is your layout?
If its in app/views/layouts, then it should be
#extends('layouts.index')
(assuming the name is index.blade.php)
ex: #extends('layouts.foo') equals a file in app/views/layouts/ called either foo.blade.php or foo.php. (depending if you use blade)
I have the same problem. What is did is:
1. in routes.php
Route::get('about', 'AboutController#index');
that
AboutController is a controller file AboutController.php in app/controllers
index is a function inside that controller.
2.Create AboutController.php in app/controllers
class class AboutController extends BaseController {
protected $layout = 'layouts.default';
$this->layout->content = View::make('pages.about');
}
You can look at this reference: Defining A Layout On A Controller
By default,Laravel has a layouts folder inside views folder, i.e. app/views/layouts and in this folder you keep your layout files, i.e. app/views/layouts/index.master.php and if you have something similar then you should use something like this:
#extends('layouts.master')
#section('content')
<p>Page Content</p>
#stop
This will inherit/use the master.blade.php file (as layout) from layouts folder, here, layouts.master means layouts/master.blade.php.
In your master.blade.php file you mast have this
#yield('content')
So, data/content from the view between #section('content') and #stop will be dumped in the place of #yield('content') of your layout.
You can use any name for your layout file, if it's layouts/main.blade.php then you should use
#extends('layouts.main')
Make sure you inserted the css link in App.blade.php
For me By default there is no link to the css file
Insert the following link in app.blade.php
<link rel="stylesheet" href= "/css/app.css" >
now its works fine :)
list things to make sure
file name and path properly given
double-check .blade.php file extention
layouts.admin.blade.php
<section class="content" style="padding-top: 20px">
#yield('content')
</section>
#extends('layouts.admin')
#section('content')
<p> this is Order index view</p>
#endsection
Try this!
php artisan cache:clear
php artisan view:clear
php artisan route:clear
php artisan clear-compiled
let's say you have 'master.blade.php' and 'index.blade.php'.
and both of files are in views->home directory. when you want to use #extends in 'index.blade.php' by calling 'master.blad.php' , you should write in index.blade.php file this statment:
#extends('home.master')
not
#extends('master')
Simply save your source using encoding UTF-8 without signature.
I have a template like this.
<div class="content">
#yield('content') //this area should load different files on different URI's
</div>
If I load .com/register, it should load register.blade.php at the place of #yield. If I load something else, it will load that view.
I'll define which file should be loaded in Routes.php with Route::get();
Full source is here for easier readability: http://pastebin.com/t2Md20r9 so you can see what I did so far.
What should be done?
You're very close, just extend your layout in register.blade.php.
1.Put your template file in views/layouts/master.blade.php
2.In your register.blade.php put
#layout('layouts.master')
in Laravel 4
#extend('layouts.master')
on top.
3.Now use return View::make('register');
You can pass it in your Route.php file something like this:
Route::get('your_page', function() {
View::make('your_page')->with('contentTemplate', 'register');
}
Route::get('other_page', function() {
View::make('other_page')->with('contentTemplate', 'other_content');
}
And in your_page, do
<div class="content">
#render($contentTemplate)
</div>