laravel框架学习---Laravel向视图传递变量

        我们使用Laravel项目的artisan命令行工具先启动一下项目

D:\software\wamp64\www\laravel5>php artisan serve

        我们在开发web应用当中,通常都会从数据库取出数据,然后再将数据传给视图。那么如何向视图中传递变量呢?我们以之前建好的 SiteController 控制器来举例说明,并且设置访问根目录 路由到  SiteController控制器的 index方法。

Route::get('/', 'SiteController@index');


        在Laravel中,向视图中传递变量 有下面几种常见的方法:

        在 SiteController 控制器的index 方法中,使用with方法,把 $today变量的值复制给视图里面的 today变量

$today = '今天是2018.7.8';
return view("sites.about")->with("today",$today);

        这样的 with('today', $today) 中,第一个 'today' 就是key,第二个 $today 就是值,这样我们就可以在我们的 sites/about.blade.php 中输出这个变量了:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    cuikai about <?php echo $today; ?><br>
    cuikai about <?= $today; ?>
</body>
</html>

    浏览器访问: http://localhost:8000/ 地址,即可看到输出变量

    冷暖自知一抹茶ck

    其实是三种方法,只是在使用 with 的时候,变量和数组略有不同


    使用with()方法 输出变量到视图一

$name = '<span style="color:red">Nxius</span>';
return view('sites.about')->with('name', $name);

    使用with()方法 输出变量到视图二:

    在传递的数组中:每一个key会在视图中作为变量,而 value 就作为变量的值。

$today = '今天是2018.7.8';
return view("sites.about")->with([
    'first' => 'April',
    'last'  => 'Nixus',
    'today'  => $today
]);

    输出变量到视图三:

$data = [];
$data['first'] = 'Nixus';
$data['last'] = 'April';
$data['today'] = $today;
return view('sites.about', $data);

    使用compact()方法输出变量到视图四:

    compact() 的字符串可以就是变量的名字,多个变量名用逗号隔开。这个时候注意更改视图的变量输出。

 $first = 'April Again';
        $last  = 'Nixus Again';
        $today = '<span style="color:red">今天是2018.7.8</span>';
        return view('sites.about', compact('first', 'last', 'today'));


        2、Blade模板引擎的用法

        Laravel里的视图依赖于 Blade 这个模板引擎,如何使用Blade模板引擎来输出变量呢?两个花括号 {{  }}

cuikai about {{ $today }}<br>
{{ $first }}

        需要注意的是:使用{{}}会自动使用php中的htmlspecialchars方法来转义成实体。

        其实在blade引擎中, {{ $today }} 会被解析为类似 这样的输出 <?php echo $today ; ?> ,不过这里的{{ }} 符号会将数据原样输出,比如你将 $today写成这样:

$today = '<span style="color:red">今天是2018.7.8</span>';
        return view("sites.about")->with("today", $today);

        然后在前端使用 {!! $today !!} 来输出变量,会看到类似下面这样:

cuikai about {!! $today !!}<br>

        冷暖自知一抹茶ck

        向视图传递变量大概就是如此了。。。


        

        再说一下Blade模板的基本用法:

        上面的内容介绍了一点点blade的语法,这里我们再统一介绍blade,说说下面几个比较常用的:

@yield()

@extends()

@if() and @unless()

@foreach()

        @yield() 和 @extends() 通常会结合者使用,实现我们通常所说的layouts布局:就是在web开发的过程中,我们将一些公用的部分如 header , footer 等直接放在一个视图文件中,然后在使用的使用直接继承(使用@extends) 就可以了,比如我们在 resources/views/ 文件夹之下创建一个 app.blade.php :

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    <title>Laravel 5 教程</title>
    <link rel='stylesheet' href="/css/all.css" type='text/css' media='all'/>
    <script type='text/javascript' src="/js/all.js"></script>
</head>
<body>
<div id="wrapper">

    @yield('content')

    <nav class="nav-container group" id="nav-footer">
        <div>
            <ul class="nav container group">
                <li>
                    <a href="/" rel="nofollow" target="_blank">Laravel 5 Blog</a>
                </li>
            </ul>
        </div>
    </nav>
</div>
</body>
</html>

        写上这么一些内容,其中css这个 href="/css/all.css" ,需要我们手动在 public/ 文件夹之下创建css/文件夹,并创建all.css这个文件,对于js的src="/js/all.js"也是同理,这两个文件是为了后面的页面美化而做的提前准备。

        注意到@yield('content')这个语法,这里就是说,这里有一个content的内容区域,如果某个页面继承了这个app.blade.php,然后那个页面就可以动态改变@yield('content')的内容了。比如我们在articles/lists.blade.php中,我们继承一下app.blade.php:

@extends('app')
@section('content')
<h1>{!! $title !!}</h1>
<p>{{ $intro }}</p>
@endsection

        这里的第一行@extends('app')就是声明这个页面继承于app.blade.php,也就是我们的articles/lists.blade.php可以使用到all.css和all.js文件,然后@section('content')就是对于app.blade.php的@yield('content'),表明就是:在渲染加载articles/lists.blade.php的时候,@yield('content')这部分内容会被替换为下面的内容:

<h1>{!! $title !!}</h1>
<p>{{ $intro }}</p>

       

        @if()通常是用于在视图中根据某些条件来判断是否该显示某些内容,比如我们可以很“无聊”地试试这样:

public function index()
{
    $first = 'jelly';
    $last = 'bool';
    return view('articles.lists',compact('first','last'));
}

        在views文件中,我们使用一下@if():

@extends('app')
@section('content')
    @if($first == 'jellybool')
    <h1>{{ $first }}</h1>
    @else
    <h1>{{ $last  }}</h1>
    @endif
@endsection

        上面的@if(),还有一个可以使用的标签就是@unless(),@unless()就可以理解为 if( ! ),就是if not 这样理解就OK。


        @foreach()用于循环输出变量,比如:

public function index()
{
    $first = ['jelly','bool'];
    return view('articles.lists',compact('first'));
}

        我们传一个数组给视图,然后,我们就可以使用@foreach()循环输出了:

@extends('app')
@section('content')
    @foreach( $first as $name)
        <h1> {{ $name }}</h1>
    @endforeach
@endsection


冷暖自知一抹茶ck
请先登录后发表评论
  • 最新评论
  • 总共0条评论