菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
1861
5

Ruby 程序员学习 Laravel 框架笔记 (10)-blade layout

原创
05/13 14:22
阅读数 1737

这一节我们来学习下blade这个view engine的layout功能,主要是实现下面一个页面。

这个页面的html和css的代码都是抄自bootstrap官网的一个叫narrow-jumbotron的demo。

它的网址如下:

http://getbootstrap.com/docs/4.0/examples/...

如果在下面的演示过程中发现有缺少的css的文件,都在上面这个网址里下载(查看源代码)。

这一节比较简单,因为在以前的文章中都有讲到如何去创建一个页面的,而这节主要是来感受一下laravel的view中的layout功能。

1. 创建 route

为了更好地演示,我们来新创建一个新的route。

按照之前学到的知识,在routes/web.php文件中添加如下这行route:


// routes/web.php

<?php

Route::get('blade', 'PagesController@blade');

2. 添加 bladetest action

接着,在controller文件 app/Http/PagesController.php,添加一个action,内容如下:

// app/Http/PagesController.php

<?php

...

class PagesController extends Controller
{
    ...
    public function blade()
    {
        return view('blade.bladetest');
    }
}

3. 创建 view

resources/views/blade目录下添加bladetest.blade.php文件,内容如下:

@extends('layouts.master')

@section('title')
    Blade
@endsection

@section('body')
    <div class="jumbotron">
        <h1 class="display-3">Jumbotron heading</h1>
        <p class="lead">Cras justo odio, dapibus ac facilisis in, egestas eget quam. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p>
        <p><a class="btn btn-lg btn-success" href="#" role="button">Sign up today</a></p>
    </div>

    <div class="row marketing">
        <div class="col-lg-6">
            <h4>Subheading</h4>
            <p>Donec id elit non mi porta gravida at eget metus. Maecenas faucibus mollis interdum.</p>

            <h4>Subheading</h4>
            <p>Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Cras mattis consectetur purus sit amet fermentum.</p>

            <h4>Subheading</h4>
            <p>Maecenas sed diam eget risus varius blandit sit amet non magna.</p>
        </div>

        <div class="col-lg-6">
            <h4>Subheading</h4>
            <p>Donec id elit non mi porta gravida at eget metus. Maecenas faucibus mollis interdum.</p>

            <h4>Subheading</h4>
            <p>Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Cras mattis consectetur purus sit amet fermentum.</p>

            <h4>Subheading</h4>
            <p>Maecenas sed diam eget risus varius blandit sit amet non magna.</p>
        </div>
    </div>
@endsection

关键在于第一行@extends('layouts.master'),表示会使用master这个layout,我们来创建一下这个文件。

4. 创建 master layout

resources/views/layouts目录下添加一个文件,叫master.blade.php,内容如下:


<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="description" content="">
    <meta name="author" content="">
    <link rel="icon" href="../../../../favicon.ico">

    <title>@yield('title')</title>

    <!-- Bootstrap core CSS -->
    <link href="css/bootstrap.min.css" rel="stylesheet">

    <!-- Custom styles for this template -->
    <link href="css/narrow-jumbotron.css" rel="stylesheet">
  </head>

  <body>

    <div class="container">
      <div class="header clearfix">
        <nav>
          <ul class="nav nav-pills float-right">
            <li class="nav-item">
              <a class="nav-link active" href="#">Home <span class="sr-only">(current)</span></a>
            </li>
            <li class="nav-item">
              <a class="nav-link" href="#">About</a>
            </li>
            <li class="nav-item">
              <a class="nav-link" href="#">Contact</a>
            </li>
          </ul>
        </nav>
        <h3 class="text-muted">Project name</h3>
      </div>

      @yield('body')

      <footer class="footer">
        <p>&copy; Company 2017</p>
      </footer>

    </div> <!-- /container -->

    <!-- Bootstrap core JavaScript
    ================================================== -->
    <!-- Placed at the end of the document so the pages load faster -->
    <!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
  </body>
</html>

如果发现没有格式,或格式不对,可能是下面的css没有引用成功:

<!-- Bootstrap core CSS -->
<link href="css/bootstrap.min.css" rel="stylesheet">

<!-- Custom styles for this template -->
<link href="css/narrow-jumbotron.css" rel="stylesheet">

再次说一下,到下面这个网址把这两个css文件下载下来(用浏览器的查看源代码功能)。

http://getbootstrap.com/docs/4.0/examples/...

下载后这两个文件,都放到public/css目录下,目录结构如下:

public/css
├── bootstrap.min.css
└── narrow-jumbotron.css

5. 重在领悟

上面的各种view,主要讲到了三个指令,分别是@extends@yield('body')@section

@extends简单,主要是在子view中用,表示要去使用哪个layout。

@yield('body')是在layout中用,有点像在埋一个点,等着子view来放真正的内容,而@section才是子view真正放内容的地方。

如果不理解,多结合上面的例子看看吧,反正我是一下子就理解的。

完结。

下一篇:Ruby 程序员学习 laravel 框架笔记 (11)-使用 @include 来整理 view

发表评论

0/200
1861 点赞
5 评论
收藏
为你推荐 换一批