Blogger Information
Blog 48
fans 0
comment 0
visits 40721
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
Laravel 视图学习
小星的博客
Original
836 people have browsed it
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
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments