欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

[Laravel 5 教程学习笔记] 五、Blade模版简介 有大用

shiping1 的头像

上一篇笔记学习了如何向视图传送数据,这一篇将介绍一些更多关于Blade模版的知识。上一篇笔记中,创建blade模版时,需要往里面复制一大段的HTML代码,而每个模版中可能有很多内容是相同的,这时,我们可以利用一个布局模版来完成这些功能。

 

创建布局模版

我们到视图目录(/resources/views)中创建一个布局模版,这里我们命名为main.blade.php,这里是模版布局的代码:


  1. <!DOCTYPE html>

  2. <html lang="en">

  3. <head>

  4. <meta charset="UTF-8">

  5. <title>Document</title>

  6. <link rel="stylesheet" href="http://cdn.bootcss.com/bootstrap/3.3.4/css/bootstrap.min.css">

  7. </head>

  8. <body>

  9. <div class="container">

  10. @yield('content')

  11. </div>

  12. </body>

  13. </html>

我们只需要创建一次这个文件,之后所有引用这个模版的文件都会生成一个@yield('content')位置供我们填充内容。我们修改about.blade.php模版


  1. @extends('main')

  2.  

  3. @section('content')

  4. <h1>About me</h1>

  5. <p>{{ $first }}, {{ $second }}</p>

  6. @stop

@extends('main')表示我们使用main.balde.php模版,@section('content') *** @stop中间的内容将被填充到@yield('content')的位置。之后刷新之前的页面,可以看到跟之前的结果是一样的。


新建路由

Routes.php中添加contact路由:


  1. Route::get('contact', 'PagesController@contact');

PagesController.php中添加contact()方法:


  1. public function contact() {

  2. return view('pages.contact');

  3. }

resources/views/pages/下创建contact.blade.php,并添加内容:


  1. @extends('main')

  2.  

  3. @section('content')

  4. <h1>Contact me</h1>

  5. @stop

在浏览器中查看结果。


创建多个@yield

有时在一些视图中,我们可以需要引入一些额外的js文件或者其他内容,我们只需要创建另外一个@yield即可。修改main.blade.php


  1. <!DOCTYPE html>

  2. <html lang="en">

  3. <head>

  4. <meta charset="UTF-8">

  5. <title>Document</title>

  6. <link rel="stylesheet" href="http://cdn.bootcss.com/bootstrap/3.3.4/css/bootstrap.min.css">

  7. </head>

  8. <body>

  9. <div class="container">

  10. @yield('content')

  11. </div>

  12.  

  13. @yield('footer')

  14. </body>

  15. </html>

比如contact.blade.php中需要加入一段JS代码:


  1. @extends('main')

  2.  

  3. @section('content')

  4. <h1>Contact me</h1>

  5. @stop

  6.  

  7. @section('footer')

  8. <script>alert('Contact Form');</script>

  9. @stop

这时,我们访问contact的时候,就会弹出一个对话框,而访问about则没有。


在blade模版中调用PHP方法

在blade模版中,我们可以使用@if进行条件判断,修改about.blade.php


  1. @extends('main')

  2.  

  3. @section('content')

  4. @if ($first == 'John')

  5. <h1>Hi, John</h1>

  6. @else

  7. <h1>Else</h1>

  8. @endif

  9. @stop

保存到浏览器查看结果。

除了@if外,还可以使用@unless(相当于 if !)、@foreach、@forelse(@foreach循环数组为空时)等。

修改about()方法:


  1. public function about() {

  2. $people = ['Taylor Otwell', 'Dayle Rees', 'Eirc Barnes'];

  3. return view('pages.about', compact('people'));

  4. }

以及about.blade.php


  1. @extends('main')

  2.  

  3. @section('content')

  4. <h1>About</h1>

  5.  

  6. <h3>People I Like:</h3>

  7. <ul>

  8. @foreach ($people as $person)

  9. <li>{{ $person }}</li>

  10. @endforeach

  11. </ul>

  12. @stop

浏览器查看结果。

foreach

现在假设传入一个空的$people=[];数组,查看页面的时候会发现People I Like:及<ul></ul>还是会输出,这是我们可以通过@if判断来处理:


  1. @extends('main')

  2.  

  3. @section('content')

  4. <h1>About</h1>

  5. @if (count($people))

  6. <h3>People I Like:</h3>

  7. <ul>

  8. @foreach ($people as $person)

  9. <li>{{ $person }}</li>

  10. @endforeach

  11. </ul>

  12. @endif

  13. @stop

Over!


 
 
转载请注明来源:[Laravel 5 教程学习笔记] 五、Blade模版简介 - Specs' Blog-就爱PHP

本文共 3 个回复

  •  

    PHP菜鸟 2015/09/07 13:27

    出现的问题描述:首先是构建了main.blade.php,然后在about.blade.php进行导入,出现的结果是Whoops, looks like something went wrong.2/2ErrorException in 024d29330a5f658d7e1db2c8d31bcd2d line 4:Undefined variable: first (View: D:\phpStudy\WWW\study\laravel5\resources\views\pages\about.blade.php)

    •  

      PHP菜鸟 2015/09/07 15:53

      Specs 是我的问题,我重新安装了,然后直接开始这一章,可以使用了。

    •  

      Specs  2015/09/07 14:18

      PHP菜鸟 你没按上一节的来吧?提示的是变量没有定义。


    普通分类: