zoukankan      html  css  js  c++  java
  • Laravel入坑指南(3)——模板

    各位小伙伴有缘聚到这里,说明对于Laravel的路由和控制器已经有点了解了。

    会写业务逻辑之后,如何把结果漂亮地展示出来,就是我们要解决的问题。(前后端分离的同学,请自动忽略)在MVC的世界里,漂亮的界面叫模板,书面化叫“视图”(这么叫高端一点),翻译成英文就是View,Laravel里也不例外。对于模板的引用,我们有以下两种方法。

    方法一:

    IlluminateSupportFacadesRoute::get('/', function () {
        return view('welcome');
    });

    方法二:

    IlluminateSupportFacadesRoute::any('/',"Web\TestController@action");
    
    //以下是TestController
    namespace AppHttpControllersWeb;
    
    use IlluminateHttpRequest;
    use AppHttpControllersController;
    use IlluminateSupportFacadesView;
    
    class TestController extends Controller
    {
        public function func()
        {
            return view("welcome",['name'=>'testname']);
        }
    }

    一、模板路径

    上面两个例子,分别都是引入了welcome模板。这个welcome的路径是/resources/views/welcome.blade.php。Laravel框架的模板采用的是blade模板引擎,所以模板一定是以.blade.php为扩展。

    那么:第一个问题来了,仍然是路径问题。写项目的时候,多数情况下我们不想把模板直接放在/resources/views目录下,想要分门别类进行归类。这时我们可以在views下面建立目录,然后在把模板文件放在这个新目录下面。举个栗子:

    模板文件:/resources/views/admin/login.blade.php

    引用:

    return view("admin/login");

    二、模板语法

    在探讨模板语法的之前,我们需要把数据从后端传到模板上去。至于怎么传?其实本文上面已经有提到了:

    return view("welcome",['name'=>'testname']);

    view()函数是第二个参数,是一个数组,key是用在模板上的“变量”,value则是这个"模板变量"的值。这个value可以是各种数据类型,包括数组和类对象。

    或者在调用view()函数之前,用以下办法也可以将数据传递给模板:

    View::share("key",'value');

    1) 普通变量输出

    {{$name}}
    {{ $o->action() }} //如果传递过来的是一个对象,可以调用对象的成员变量和成员函数
    {!! $name !!} //取消PHP在传递过程中调用htmlentities()函数对变量进行过滤

    2) 取消blade解析

    很多时候,我们不需要blade解析,可以用如下两种方法:

    <!-- 方法一 -->
    @{{name}}
    
    <!-- 方法二 -->
    @verbatim
        {{$name}}
    @endverbatim

    方法二适用于大篇幅的JS代码,避免被blade意外解析的时候。

    3) 判断

    判断是模板中最常见,也是最简单的一个模板语法。看看以下例子就知道怎么用了(在blade中可以调用php函数,这一点很赞噢):

    @if(!isset($name))
        not set
    @elseif($name=="ok")
        okok
    @else
        {!! $name !!}
    @endif

    4) 循环

    for循环:

    @for ($i = 0; $i < 10; $i++)
        The current value is {{ $i }}<br />
    @endfor

     foreach循环:

    @foreach($news_list as $news)
        {{$news['title']}}--{{$news['user'][0]}}<br />
    @endforeach

    forelse循环

    @forelse ($users as $user)
        <li>{{ $user->name }}</li>
    @empty
        <p>No users</p>
    @endforelse

    另外,值得一提的是在模板循环中可以使用@continue和@break两个指令来控制循环是否结束。

    5) 模板继承

    模板继承这个概念,对于只熟悉原生PHP代码的小伙伴来说会比较陌生。其实这也不难理解,它适用于所有的模板几乎都类似,只有页面上的几个部分不一样的场景。 首先要有一个框架模板,我们叫他暂且称呼它为frame;在frame上挖了几个洞;子模板c1、c2、c3......就是为了填充frame挖出的洞,使得一个模板完整。举个简单的例子:

    框架模板:frame.blade.php

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    @section('menu')
        菜单
    @show
    
    @section('nav')
        导航:
    @show
    <br />
    <b>内容---@yield('content')</b>
    
    </body>
    </html>

    子模板:content.blade.php

    @extends('frame')
    
    @section('content')
        这是内容--子模板
    @endsection
    
    @section('nav')
        @parent    <!-- 这个指令用于“追加” -->
        导航HTML
    @endsection
    
    @section('menu')
        菜单HTML
    @endsection

    我们在代码中引用模板return view("content");即可得到完整的页面

    6) inlucde引入子模板

    @include('welcome')

    这里是在当前模板中引入/resources/views/welcome.blade.php

    以上就是这一次Laravel课程,Laravel框架24小时入坑指南,未完,待续:)

    大家下期见

    ---------------------------  我是可爱的分割线  ----------------------------

    最后博主借地宣传一下,漳州编程小组招新了,这是一个面向漳州青少年信息学/软件设计的学习小组,有意向的同学点击链接,联系我吧。

  • 相关阅读:
    Servlet----------在 Servlet 中的xml配置
    java连接数据库时的报错
    借用HTML5 插入视频。音频
    多线程的总结
    穷举法例子
    利用递归求最大公约数和最小公倍数
    递归逆序的使用
    Mac OS X运行程序出现bad interpreter: operation not permitted的解决方案
    C#之枚举类型
    窗体的单例模式
  • 原文地址:https://www.cnblogs.com/ddcoder/p/13298321.html
Copyright © 2011-2022 走看看