• 首页
  • 前端
    • HTML
    • CSS
    • Javascript
    • XML
    • AJAX
  • 前端框架
    • BootStrap
    • Jquery
  • PHP
    • 语法
    • 核心
    • 面向对象
    • PHP7
    • Socket
    • Swoole
  • 数据库
    • Mysql
    • Redis
    • Memcache
    • MongoDB
  • 优化
    • 优化方案
    • 页面静态化
    • Nginx
  • 后台框架与实战
    • Smarty
    • 源码Blog
    • TP3.2
    • TP3.2商城
    • TP5.0
    • TP5.0商城
    • Laravel
    • Laravel在线教育平台
    • Yii
    • Yii手机直播
    • CodeIgniter
    • Yaf
  • 移动开发
    • 微信公众号
    • 混合APP
  • 二次开发
    • DedeCMS
  • Linux
    • 基本操作
    • 环境搭建
  • 版本控制
    • GIT
    • SVN
  • Node.js
  • 资料库
没有结果
查看所有结果
  • 首页
  • 前端
    • HTML
    • CSS
    • Javascript
    • XML
    • AJAX
  • 前端框架
    • BootStrap
    • Jquery
  • PHP
    • 语法
    • 核心
    • 面向对象
    • PHP7
    • Socket
    • Swoole
  • 数据库
    • Mysql
    • Redis
    • Memcache
    • MongoDB
  • 优化
    • 优化方案
    • 页面静态化
    • Nginx
  • 后台框架与实战
    • Smarty
    • 源码Blog
    • TP3.2
    • TP3.2商城
    • TP5.0
    • TP5.0商城
    • Laravel
    • Laravel在线教育平台
    • Yii
    • Yii手机直播
    • CodeIgniter
    • Yaf
  • 移动开发
    • 微信公众号
    • 混合APP
  • 二次开发
    • DedeCMS
  • Linux
    • 基本操作
    • 环境搭建
  • 版本控制
    • GIT
    • SVN
  • Node.js
  • 资料库
没有结果
查看所有结果
没有结果
查看所有结果

Laravel框架(四)视图、会话、中间价、防翻墙、数据验证、多表查询、扩展:PHP use使用场景、钻石设计软件

Mr.Lee 由 Mr.Lee
2018年5月20日
在 Laravel, 后台框架
0
laravel

laravel

0
分享
3
浏览

Laravel框架第4天

复习

composer:就是PHP的软件管家,帮助PHP下载项目所需组件(类),如:验证码类、上传文件类等等

数据迁移:就是用PHP管理数据库

创建迁移:php artisan make:migration 数据迁移名称

创建迁移:php artisan make:migration create_表名_table –create=表名

创建迁移:php artisan make:migration update_表名_table –table=表名

运行迁移:php artisan migrate

撤销迁移:php artisan migrate:rollback

数据填充:就是用PHP快速插入测试数据

创建填充:php artisan make:seeder 填充器名称

运行填充:php artisan db:seed –class=填充器名称

faker说明:就是PHP的一个库(类)

faker作用:生成假数据

一、视图2(页面布局)

1、说明

一般在做网站的时候,我们会将网页中公共的部分提取出来,形成一个公共的布局文件(父模板,提取公共的区域),然后在让其他的页面继承该文件以获取公共的区域内容。同时在子页面我们可以定义好自己的内容,然后在公共的页面进行调用显示。

2、语法

@yield(‘标识’) 父(公共区域)定义内容片段,子填充

@extends(‘标识’) 子继承父(公共区域)

@section(‘标识’, ‘默认值’) 子填充父(公共区域)文字

@section(‘标识’) 子填充父(公共区域)HTML代码

存放子页面内容

@endsection

@include(‘视图标识’, [‘key’ => ‘value变量值’]) 调取公共页面(一般多个子页面提取)

3、代码

resources\views\layouts\common.blade.php

<!DOCTYPE html>

<html lang=”zh-CN”>

<head>

<meta charset=”utf-8″>

<meta http-equiv=”X-UA-Compatible” content=”IE=edge”>

<meta name=”viewport” content=”width=device-width, initial-scale=1″>

<title>laravel</title>

<!– Bootstrap CSS 文件 –>

<link rel=”stylesheet” href=”{{ asset(‘asset/static’) }}/bootstrap/css/bootstrap.min.css”>

@yield(‘css’)

</head>

<body>

<div class=”navbar navbar-default”>

<div class=”container”>

<div class=”navbar-header”>

<a href=”/” class=”navbar-brand”>首页</a>

<button type=”button” class=”navbar-toggle collapsed” data-toggle=”collapse” data-target=”#menu” aria-expanded=”false”>

<span class=”sr-only”>菜单折叠</span>

<span class=”icon-bar”></span>

<span class=”icon-bar”></span>

<span class=”icon-bar”></span>

</button>

</div>

<div class=”collapse navbar-collapse” id=”menu”>

<ul class=”nav navbar-nav”>

<li class=”active”><a href=”/”>开发</a></li>

<li><a href=”#”>列表</a></li>

<li><a href=”#”>头条</a></li>

<li class=”dropdown”>

<a href=”#” class=”dropdown-toggle” data-toggle=”dropdown”>资讯 <span class=”caret”></span></a>

<ul class=”dropdown-menu”>

<li><a href=”#”>学习一</a></li>

<li><a href=”#”>学习二</a></li>

<li class=”divider”></li>

<li><a href=”#”>技术学习</a></li>

<li class=”divider”></li>

<li><a href=”#”>jq学习</a></li>

</ul>

</li>

</ul>

<form class=”navbar-form navbar-left”>

<div class=”form-group”>

<input type=”text” class=”form-control” placeholder=”Search…”>

</div>

<button type=”submit” class=”btn btn-default”>搜索</button>

</form>

<ul class=”nav navbar-nav navbar-right”>

<li><a href=”./login.html”>登录</a></li>

<li><a href=”./register.html”>注册</a></li>

<li class=”dropdown”>

<a href=”#” class=”dropdown-toggle” data-toggle=”dropdown”>相关<span class=”caret”></span></a>

<ul class=”dropdown-menu”>

<li><a href=”#”>系列一</a></li>

<li class=”divider”></li>

<li><a href=”#”>系列二</a></li>

</ul>

</li>

</ul>

</div>

</div>

</div>

<!– 头部 –>

<div class=”jumbotron jump”>

<div class=”container”>

<h2>@yield(‘title’)</h2>

<p> 玩转- laravel</p>

</div>

</div>

<!– 中间内容区局 –>

<div class=”container”>

@yield(‘main’)

</div>

<!– 尾部 –>

<div class=”jumbotron” style=”margin:0;”>

<div class=”container”>

<span> @2017 laravel</span>

</div>

</div>

<!– jQuery 文件 –>

<script src=”{{ asset(‘asset/static’) }}/jquery/jquery.min.js”></script>

<!– Bootstrap JavaScript 文件 –>

<script src=”{{ asset(‘asset/static’) }}/bootstrap/js/bootstrap.min.js”></script>

<link href=”https://cdn.bootcss.com/sweetalert/1.1.3/sweetalert.min.css” rel=”stylesheet”>

<script src=”https://cdn.bootcss.com/sweetalert/1.1.3/sweetalert-dev.js”></script>

<script type=”text/javascript”>

@if (Session::has(‘tips’))

swal(“{{ Session::get(‘tips’) }}!”, “操作提示!”,”{{ Session::get(‘state’) }}”)

@endif

</script>

</body>

</html>

resources\views\layouts\form.blade.php

<form action=”{{ url(‘student/add’) }}” class=”form-horizontal” method=”post”>

{{ csrf_field() }}

<div class=”form-group”>

<label for=”name” class=”col-sm-2 control-label”>姓名</label>

<div class=”col-sm-5″>

<input type=”text” name=”uname” class=”form-control” id=”name” placeholder=”请输入学生姓名”>

</div>

<div class=”col-sm-5″>

<p class=”form-control-static text-danger”>姓名不能为空</p>

</div>

</div>

<div class=”form-group”>

<label for=”age” class=”col-sm-2 control-label”>密码</label>

<div class=”col-sm-5″>

<input type=”text” name=”pwd” class=”form-control” id=”age” placeholder=”请输入学生年龄”>

</div>

<div class=”col-sm-5″>

<p class=”form-control-static text-danger”>密码不能为空</p>

</div>

</div>

<div class=”form-group”>

<label for=”age” class=”col-sm-2 control-label”>年龄</label>

<div class=”col-sm-5″>

<input type=”text” name=”age” class=”form-control” id=”age” placeholder=”请输入学生年龄”>

</div>

<div class=”col-sm-5″>

<p class=”form-control-static text-danger”>年龄只能为整数</p>

</div>

</div>

<div class=”form-group”>

<label class=”col-sm-2 control-label”>性别</label>

<div class=”col-sm-5″>

<label class=”radio-inline”>

<input type=”radio” name=”sex” value=”1″> 男

</label>

<label class=”radio-inline”>

<input type=”radio” name=”sex” value=”2″> 女

</label>

</div>

<div class=”col-sm-5″>

<p class=”form-control-static text-danger”>请选择性别</p>

</div>

</div>

<div class=”form-group”>

<div class=”col-sm-offset-2 col-sm-10″>

<button type=”submit” class=”btn btn-primary”>提交</button>

</div>

</div>

</form>

resources\views\student\add.blade.php

@extends(‘student.layout.common’)

@section(‘title’, ‘添加’)

@section(‘css’)

<link rel=”stylesheet” href=”{{ asset(‘asset/static’) }}/bootstrap/css/form.css”>

@endsection

@section(‘main’)

<div class=”row”>

<!– 左侧菜单区域 –>

<div class=”col-md-3″>

<div class=”list-group”>

<a href=”./index.html” class=”list-group-item “>学生列表</a>

<a href=”./form.html” class=”list-group-item active”>新增学生</a>

</div>

</div>

<!– 右侧内容区域 –>

<div class=”col-md-9″>

<!– 所有的错误提示 –>

<div class=”alert alert-danger”>

<ul>

<li>姓名不能为空</li>

<li>年龄只能为整数</li>

<li>请选择性别</li>

</ul>

</div>

<!– 自定义内容区域 –>

<div class=”panel panel-default”>

<div class=”panel-heading”>新增学生</div>

<div class=”panel-body”>

@include(‘student.layout.form’)

</div>

</div>

</div>

</div>

@endsection

resources\views\student\index.blade.php

@extends(‘student.layout.common’)

@section(‘title’, ‘首页’)

@section(‘css’)

<link rel=”stylesheet” href=”{{ asset(‘asset/static’) }}/bootstrap/css/index.css”>

@endsection

@section(‘main’)

<div class=”row”>

<!– 左侧菜单区域 –>

<div class=”col-md-3″>

<div class=”list-group”>

<a href=”index.blade.php” class=”list-group-item active”>学生列表</a>

<a href=”./form.html” class=”list-group-item”>新增学生</a>

</div>

</div>

<!– 右侧内容区域 –>

<div class=”col-md-9″>

<!– 成功提示框 –>

<div class=”alert alert-success alert-dismissible” role=”alert”>

<button type=”button” class=”close” data-dismiss=”alert” aria-label=”Close”>

<span aria-hidden=”true”>&times;</span>

</button>

<strong>成功!</strong> 操作成功提示!

</div>

<!– 失败提示框 –>

<div class=”alert alert-danger alert-dismissible” role=”alert”>

<button type=”button” class=”close” data-dismiss=”alert” aria-label=”Close”>

<span aria-hidden=”true”>&times;</span>

</button>

<strong>失败!</strong> 操作失败提示!

</div>

<!– 自定义内容区域 –>

<div class=”panel panel-default”>

<div class=”panel-heading”>学生列表</div>

<table class=”table table-striped table-hover table-responsive”>

<thead>

<tr>

<th>ID</th>

<th>姓名</th>

<th>年龄</th>

<th>性别</th>

<th>添加时间</th>

<th width=”120″>操作</th>

</tr>

</thead>

<tbody>

@foreach ($student as $item)

<tr>

<th scope=”row”>{{ $item->id }}</th>

<td>{{ $item->uname }}</td>

<td>{{ $item->age }}</td>

<td>

@if ($item->sex === 1)

公

@else

母

@endif

</td>

<td>{{ $item->created_at }}</td>

<td>

<a href=””>详情</a>

<a href=””>修改</a>

<a href=””>删除</a>

</td>

</tr>

@endforeach

</tbody>

</table>

</div>

<!– 分页 –>

<div style=”text-align: right;”>

{{ $student->links() }}

{{–<ul class=”pagination pull-right”>–}}

{{–<li>–}}

{{–<a href=”#” aria-label=”Previous”>–}}

{{–<span aria-hidden=”true”>&laquo;</span>–}}

{{–</a>–}}

{{–</li>–}}

{{–<li class=”active”><a href=”#”>1</a></li>–}}

{{–<li><a href=”#”>2</a></li>–}}

{{–<li><a href=”#”>3</a></li>–}}

{{–<li><a href=”#”>4</a></li>–}}

{{–<li><a href=”#”>5</a></li>–}}

{{–<li>–}}

{{–<a href=”#” aria-label=”Next”>–}}

{{–<span aria-hidden=”true”>&raquo;</span>–}}

{{–</a>–}}

{{–</li>–}}

{{–</ul>–}}

</div>

</div>

</div>

</div>

@endsection

二、会话技术

1、session会话

1)语法

  • 位置:config\session.php存储了session的相关配置说明(注:非php.ini)

脚下留心

  • 说明:Laravel中支持三种方式操作session
  • Http Request类的session方法

设置: $request->session()->put(键,值)

获取指定:$request->session()->get(键 [,默认值])

获取所有:$request->session()->all()

判断: $request->session()->has(键);

  • session辅助函数

设置:session([键1=>值1,…,键n=>值n])

获取:session(键)

  • Session facade门面 (通过Session类调用静态方法)

设置: Session::put(键,值);

获取指定: Session::get(键 [,默认值])

获取所有: Session::all()

删除指定: Session::forget(key)

判断: Session::has(key)

删除所有: Session::flush()

压入session数组:Session::push(key, value)

获取后删除: Session::pull(key)

闪存: Session::flash(key, value)

2)练习

设置

获取全部

压入

获取指定

获取全部

闪存

查看

2、cookie会话

1)语法

  • 设置:Cookie::make(键,值)
  • 设置:Cookie::forever(键,键) #理论上的永久设置
  • 获取:Cookie::get(键)

Laravel中必须通过withCookie使响应头中携带cookie信息

2)练习

设置cookie

控制器

三、中间件(middleware)

概念

  • 中间件:就是将HTTP请求交给控制器方法处理前的过滤层
  • 简单理解:

语法

  • 语法:php artisan make:middleware 中间件名称
  • 位置:Http\Middleware\中间件名称
  • 使用步骤
  • 步骤1:创建中间件,并书写过滤代码
  • 步骤2:注册激活中间件(app\Http\Kernel.php)
  • 步骤3:路由声明使用哪个中间件过滤

Route::HTTP请求类型(路径,闭包函数或控制器方法)->middleware(中间件名称)

Route::group([‘namespace’=>, ‘prefix’=>”, ‘middleware’=>中间件名称], function(){

})

练习(需求:访问 /test时闭包函数输出111,中间件输出222)

步骤1:创建中间件并书写逻辑代码

步骤2;激活

步骤3:路由使用

防翻墙

步骤1:保存用户信息到session中

步骤2:创建中间件

//判断用户是否登录

if (!Session::has(‘userinfo’)) {

return redirect(‘/student/login’)->with([‘state’=>’error’, ‘tips’=>’犊子,去登录’]);

}

步骤3:激活中间件

步骤4:使用

步骤5:修改laravel的session机制

四、Laravel控制器数据验证

1、概念

1)说明

为了保证项目安全除前段必须验证外后端也必须进行数据验证,Laravel提供了一套完善的验证机制。

2)分类(Laravel提供了三种方式验证)

  • 控制器直接使用validate方法
  • 单独创建验证类
  • 使用validator门面验证

验证规则

required: 不能为空

max:255最长255个字符,

min:1最少1个字符

email:验证邮箱是否合法

confirmed:验证两个字段是否相同,如果验证的字段是password,则必须输入一个与之匹配的password_confirmation字段

integer:验证字段必须是整型

ip:验证字段必须是IP地址

numeric 验证字段必须是数值

max:value 验证字段必须小于等于最大值,和字符串,数值,文件字段的size规则一起使用。

min:value 验证字段的最小值,对字符串、数值、文件字段而言,和size规则使用方式一致。

size:value 验证字段必须有和给定值value想匹配的尺寸,对字符串而言,value是相应的字符数目,对数值而言,value是给定整型值;对文件而言,value是相应的文件字节数。

string 验证字段必须是字符串

unique:表名,字段,需要排除的ID

验证规则手册:http://laravelacademy.org/post/6768.html#toc_17

多学一招:多个验证规则可以通过 “|” 字符进行隔开

方法1:控制器使用validate方法

语法

  • $this->validate($request,验证规则 [,提示信息])

练习

控制器

//数据验证

$this->validate($request, [

‘uname’ => ‘required’,

‘pwd’ => ‘required’,

‘age’ => ‘required|integer’,

‘sex’ => ‘required|integer’,

], [

‘age.integer’ => ‘年龄必须是整型’,

‘age.required’ => ‘年龄必须’,

]);

视图

@if (count($errors) > 0)

<div class=”alert alert-danger”>

<ul>

@foreach ($errors->all() as $error)

<li>{{ $error }}</li>

@endforeach

</ul>

</div>

@endif

多学一招:验证提示信息汉化

  1. 下载:https://github.com/caouecs/Laravel-lang
  2. 将下载的汉化包放到项目中

  1. 修改config\app.php

4)重新提交测试即可

方法2:单独创建验证类

语法

  • 语法:php artisan make:request 验证类名称
  • 位置:app\Http\Requests

2)练习

步骤1:创建验证类并书写规则

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class CheckStudent extends FormRequest

{

public function authorize()

{

return true; //开启验证

}

public function rules()

{

if ($this->isMethod(‘get’)) return [];

return [

‘uname’ => ‘required’,

‘pwd’ => ‘required’,

‘age’ => ‘required|integer’,

‘sex’ => ‘required|integer’,

];

}

public function messages()

{

return [

‘uname.required’ => ‘用户名有消磁’

];

}

}

步骤2:在控制器中使用

方法3:使用Validator门面验证器(类)

1)语法

  • $validator = Validator::make(待验证的数据,验证规则 [,提示信息])
  • $validator->passes() 是否成功:成功-true,失败-false
  • $validator->fails() 是否失败:失败-true,成功-false
  • $validator->messages() 获取错误信息

2)练习

$validator = Validator::make($request->all(), [

‘uname’ => ‘required’,

‘pwd’ => ‘required’,

‘age’ => ‘required|integer’,

‘sex’ => ‘required|integer’,

]);

if ($validator->fails()) {

//如果异步请求则响应json dd($validator->messages());

return redirect(‘student/add’)->withErrors($validator);

}

︴显示单个错误

语法:{{ $errors->first(键) }}

多表查询【★★★★★★★★★★★★★★】

︴测试数据准备

DROP TABLE IF EXISTS `article`;

CREATE TABLE `article` (

`aid` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT ‘编号’,

`title` varchar(45) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT ‘用户名’,

`content` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT ‘密码’,

`uid` int(11) DEFAULT NULL,

PRIMARY KEY (`aid`)

) ENGINE=MyISAM AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO `article` VALUES (‘1’, ‘文章1’, ‘内容1’, ‘1’);

INSERT INTO `article` VALUES (‘2’, ‘文章2’, ‘内容2’, ‘1’);

INSERT INTO `article` VALUES (‘3’, ‘文章3’, ‘内容3’, ‘2’);

INSERT INTO `article` VALUES (‘4’, ‘文章4’, ‘内容4’, ‘3’);

DROP TABLE IF EXISTS `student`;

CREATE TABLE `student` (

`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT ‘编号’,

`uname` varchar(45) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT ‘用户名’,

`pwd` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT ‘密码’,

`age` tinyint(3) unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘年龄’,

`sex` tinyint(3) unsigned NOT NULL DEFAULT ‘1’ COMMENT ‘性别:1-男,2-女’,

`created_at` int(11) NOT NULL DEFAULT ‘0’ COMMENT ‘创建于’,

`updated_at` int(11) NOT NULL DEFAULT ‘0’ COMMENT ‘更新于’,

PRIMARY KEY (`id`)

) ENGINE=MyISAM AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO `student` VALUES

(‘1’, ‘test’, ‘$2y$10$0.wXoff3zfaqM4DSMzlzbOEkDfk5ztnJn32vilBAS/WEWSWLcZcrK’, ’64’, ‘1’, ‘1515226698’, ‘1515226698’),

(‘2’, ‘Kariane Shields’, ‘$2y$10$xM5YmEL5D3jpomMvqIH/5eS.W.F0o.9oqfNr/FhlmTInRJFEBc9Wi’, ’94’, ‘2’, ‘1515226713’, ‘1515226713’),

(‘3’, ‘Prof. Dino Brakus’, ‘$2y$10$hhSBJh69wyAO9wK.JABiEO02rxOzz2MfjHZVbfbLE5RiI7ZRuw6qa’, ‘107’, ‘1’, ‘1515226713’, ‘1515226713’),

(‘4’, ‘Miss Vivienne Senger V’, ‘$2y$10$CgsLmcYEmYukWKV4i/qAtOHnnnLvUSlJ/NU46.Tke/OuNRgrRES9W’, ’15’, ‘1’, ‘1515226713’, ‘1515226713’);

1、概念

一对一关系:一篇文章属于一个用户

一对多关系:一个用户有多篇文章

查询构建器

1)语法

DB::table(表1)

->leftJoin(表2, ‘表1.公共字段’, ‘=’, ‘表2.公共字段’)

->get()

2)练习

#一对一关系:一遍文章属于一个用户

public function test()

{

#一对一关系:一遍文章属于一个用户

$data = DB::table(‘article’)

->leftJoin(‘student’, ‘article.uid’, ‘=’, ‘student.id’)

->get();

echo ‘<pre>’;

print_r($data);

#一对多关系:一个用户拥有多篇文章

}

#一对多关系:一个用户拥有多篇文章

#一对多关系:一个用户拥有多篇文章

$data = DB::table(‘student’)

->leftJoin(‘article’, ‘article.uid’, ‘=’, ‘student.id’)

->get();

echo ‘<pre>’;

print_r($data);

模型

1)语法

  • 一对一

步骤1:模型定义

public function 推荐写表名()

{

return $this->hasOne(关联模型,关联模型公共字段, 本模型公共字段);

}

步骤2:控制器调用【模型名::with(‘推荐写表名’)->get()】

  • 一对多

步骤1:模型定义

public function 推荐写表名s()

{

return $this->hasMany(关联模型,关联模型公共字段, 本模型公共字段);

}

步骤2:控制器调用【模型名::with(‘推荐写表名’)->get()】

2)练习

#一对一关系:一遍文章属于一个用户

步骤1:设置模型

步骤2:控制器调用

public function test()

{

#潜规则:

#单模型直接查询, 则$v是一个小对象 通过$v->字段名可以获取数据

#with模型关联查询,则$v是一个小对象

# 获取本模型数据: 通过$v->本模型的字段

# 获取其他模型数据:通过$v->with的名称->其他模型的字段

echo ‘<pre>’;

#一对一关系:一遍文章属于一个用户

$articles = Article::with(‘student’)->get();

print_r($articles);

foreach ($articles as $article) {

echo ‘学生表ID:’.$article->student->id . ‘<br />’;

echo ‘文章表ID:’.$article->aid . ‘<br />’;

echo ‘<hr />’;

}

}

#一对多关系:一个用户拥有多篇文章

模型

控制器

public function test()

{

#潜规则:

#单模型直接查询, 则$v是一个小对象 通过$v->字段名可以获取数据

#with模型关联查询,则$v是一个小对象(1:N)

# 获取本模型数据: 通过$v->本模型的字段

# 获取其他模型数据:通过$v->with的名称 (数组,需要foreach 第二次foreach的$v是关联模型的一个个小对象)

echo ‘<pre>’;

#一对多关系:一个用户拥有多篇文章

$students = Student::with(‘articles’)->get();

foreach ($students as $student) {

echo $student->id . ‘<br />’;

//显示学生信息(脚下留心:relations是数组,没有关联数据则空数组)

foreach ($student->articles as $student) {

echo $student->aid. “<br />”;

}

echo ‘<hr />’;

}

}

路由2

理解RESTful

  • 说 明:RESTful是目前最流行的一种互联网软件架构(思想)
  • 架构规则:



Laravel资源控制器语法(RESTful)

  • 创建资源控制器:php artisan make:controller Home\Day3Controler –resource
  • 创建资源控制器路由:Route::resource(URL信息,控制器);

资源控制器指会自定帮我们按照restful规则创建好方法

︴练习

创建资源控制器

2)创建资源控制器路由

3)访问

扩展

https://www.cnblogs.com/CraryPrimitiveMan/p/6242167.html?utm_source=itdadao&utm_medium=referral

︴其他扩展

1、PHP use 使用场景(or or and 数据库操作)


2、钻石设计软件


标签: 中间价会话多表查询扩展:PHP use使用场景数据验证视图钻石设计软件防翻墙
上一篇文章

Laravel在线教育平台(一)开发背景、涉及技术点、开发周期、项目初始化、后台登录功能、路由、防翻墙、注册激活

下一篇文章

Laravel框架(三)Composer、数据迁移、学生管理小项目(登录模块、学生列表)

下一篇文章
laravel

Laravel框架(三)Composer、数据迁移、学生管理小项目(登录模块、学生列表)

发表回复 取消回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Search

没有结果
查看所有结果

About Me

个人随笔

Winston Lee

Programmer

Hello & welcome to my blog! My name is Winston Lee and am a programmer and am keen on sharing.

Winston Lee

About Me

Hello & welcome to my blog! My name is Winston Lee and am a programmer and am keen on sharing.

Categories

  • AJAX
  • BootStrap
  • CodeIgniter
  • CSS
  • DedeCMS
  • GIT
  • HTML
  • Javascript
  • Jquery
  • Laravel
  • Laravel在线教育平台
  • Linux
  • Memcache
  • MongoDB
  • MVC
  • Mysql
  • Nginx
  • Node
  • PDO
  • PHP
  • PHP7
  • PHP基本语法
  • PHP核心编程
  • Redis
  • Smarty
  • Socket
  • SVN
  • Swoole
  • TP3.2
  • TP3.2商城
  • TP5.0
  • TP5.0商城
  • XML
  • Yaf
  • Yii
  • Yii手机直播
  • 二次开发
  • 优化方案
  • 前端技术
  • 前端框架
  • 后台框架
  • 基本操作
  • 微信公众号
  • 数据库
  • 未分类
  • 混合APP
  • 源码Blog项目
  • 版本控制
  • 环境搭建
  • 移动端开发
  • 网站优化
  • 资料
  • 面向对象
  • 面向对象编程
  • 页面静态化

Tags

DOM Json RBAC 事件 传参 函数 分页 判断语句 匿名函数 变量 图片上传 存储过程 安装 对象 封装 属性 接口 控制器 数据库操作 数据类型 数据表 数组 文件上传 无刷新分页 权限 标签 模型 正则 流程控制 目录结构 算法 类 索引 继承 缩略图 表关系 视图 路由 运算符 选择器 递归 配置 错误处理 页面静态化 验证码
  • 首页
  • 前端
  • 前端框架
  • PHP
  • 数据库
  • 优化
  • 后台框架与实战
  • 移动开发
  • 二次开发
  • Linux
  • 版本控制
  • Node.js
  • 资料库

沪公网安备31011502400873 | 沪ICP备2024050435号-3

没有结果
查看所有结果
  • 首页
  • 前端
    • HTML
    • CSS
    • Javascript
    • XML
    • AJAX
  • 前端框架
    • BootStrap
    • Jquery
  • PHP
    • 语法
    • 核心
    • 面向对象
    • PHP7
    • Socket
    • Swoole
  • 数据库
    • Mysql
    • Redis
    • Memcache
    • MongoDB
  • 优化
    • 优化方案
    • 页面静态化
    • Nginx
  • 后台框架与实战
    • Smarty
    • 源码Blog
    • TP3.2
    • TP3.2商城
    • TP5.0
    • TP5.0商城
    • Laravel
    • Laravel在线教育平台
    • Yii
    • Yii手机直播
    • CodeIgniter
    • Yaf
  • 移动开发
    • 微信公众号
    • 混合APP
  • 二次开发
    • DedeCMS
  • Linux
    • 基本操作
    • 环境搭建
  • 版本控制
    • GIT
    • SVN
  • Node.js
  • 资料库

沪公网安备31011502400873 | 沪ICP备2024050435号-3