博客列表 >Laravel 视图学习

Laravel 视图学习

小星的博客
小星的博客原创
2020年03月26日 21:12:40837浏览
1. 视图位置

2. 视图语法

Laravel 中使用 return view('movies/index', $data); 方法来进行视图的渲染。带数据有两种写法,效果是一致的。

return view('movies/index', $data);return view('movies/index')->with($data);

数据(一般都是传数组)会传到 视图模板中,数据数组中的 键key 在模板中使用 {{$key}} 来渲染该键对应的值,视图只会这样处理数组下的第一维,如果有多维,那二维部分就按照正常数据的调用方法使用。如: {{$key['subkey']}}

eg:

controller\Home.php// 定义加载movies视图方法public function movies(movies $movies){ $all = $movies->all()->toArray(); // 数据结构:array = (0=>array, 1=>array, ...) $data['movies'] = $all; // 由于是 索引数组,视图无法处理,所以给套一层,给个键名视图就能找到了。 return view('movies/index')->with($data);}

/movies/index.blade.php这里 是 movies 首页<h2>这里 是 movies 首页</h2><ul> <?php foreach ($movies as $item){ ?> <li> <h3>{{$item['name']}}</h3>

{{$item['detail']}}

</li> <?php }?></ul>3. 规范

controller 目录与对应的 views 目录最好保持一致,这样一来可以使得结构规范,二是可以更直观地反应对应关系。eg: 控制器Admin/Boss/index 方法 对应 admin/boss/index.blade.php 视图

4. 视图公共部分提取 因为 Laravel 用的是 blade 模板,所以可以 blade的语法来引入公共视图文件@include('public/header') 也可以用 @include('public.header'),路径对应着views下的public文件夹(自定义)css存放位置:根目录下 public 文件夹中,不在 resources 文件中。

<head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <link rel="stylesheet" href="/css/admin/boss/index.css"> <title>Document</title></head><body> @include('public/header') {{$content}} @include('public/footer')</body></html>5. 控制器与模型命名冲突

控制器与模型的命名尽量不要冲突,如果冲突可能会造成报错。这里有两个解决办法:

model 使用时 带上命名空间,这样框架就会知道是哪一个Movies

<?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;class Movies extends Controller{ public function abc(\App\Models\Movies $movies){ print_r($movies->getAll()); }}

给 model 带上别名,不过不推荐使用,不到万不得已不要使用。因为你不知道你的别名会和什么又冲突。

<?phpnamespace App\Http\Controllers;use App\Models\Movies as Movie;use Illuminate\Http\Request;class Movies extends Controller{ public function abc(Movie $movies){ print_r($movies->getAll()); }}6. blade 模板

blade 模板在渲染时会调用 htmlspecialchars方法, 将变量的值全部进行转义后再渲染到页面上。 eg:

数据:'content' => '<p style="color: red"">这是主体部分

'

视图:

<div class="main"> {{$content}}</div>

渲染出来后:

查看网页源代码可以看到:blade 模板把特殊字符都进行了转义。

这是一种安全机制,可以防止 xss攻击

2. 一些常用 blade 模板语法

{!!$content!!} 不转义原样输出变量

@{{$content}} 不编译输出,即不解释

@php ... @endphp 放 php 代码

@if ... @elesif ... @endif

@foreach($list as $item) ... @endforeach

@for($i=0; $i@while($i @continue($i==0) 跳出循环

@break($i==1) 跳出循环

blade语法都是没有分号的,这里要注意

3. 模板布局继承

定义一个布局,然后被不同的子版继承,这是非常常见的用法。

一些主要方法

继承布局 @extends('layout.index')

子版中定义 @section('name') ... @endsection

布局中定义节点 @section('name') ... @show

显示区块 @yield('name')

@parent 布局中区块中的内容

1、定义一个布局

<div class="header"> <ul> <li class="nav-item"> <a href="javascript:;">首页</a> </li> </ul> </div> <div class="content"> 显示区块 @section('main') 这里是模板中的内容

@show 显示区块 @yield('news') @yield('title') @section('list1') 这里是列表一

@show @section('list2') 这里是列表二

@show </div> <div class="footer">

江苏XXXXXX破产公司技术支持

</div>

2、 写个视图来继承布局

首先继承布局 @extends('layout/index') 定义区块 @section('main') @parent 保留布局中该区块的内容,默认是直接替换的 这里是 article视图定义的main区块

@endsection @section('news')

这里是新闻内容

@endsection 这种是放字符串,这里面的标签不会被渲染出来 @section('title', '这里是title') {{--列表1--}} @section('list1') @parent @foreach ($content as $item) 姓名:{{$item['name']}} 年龄:{{$item['age']}} @endforeach @endsection {{--列表2--}} @section('list2') @parent <ul> @for ($i=0;$i<count($content);$i++) <li> 姓名:{{$content[$i]['name']}} 年龄:{{$content[$i]['age']}} </li> @endfor </ul> @endsection
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议