Laravel小项目之第4节 Laravel-通过表单实现新增及操作状态提示功能
第4节 Laravel-通过表单实现新增及操作状态提示功能
4.1 显示新增表单视图
4.2 通过模型实现新增
4.3 操作状态提示
4.1 显示新增表单视图
修改边栏的链接 \resources\views\shared\siderbar.blade.php <div class="col-md-3">
<div class="list-group">
<a href="{{ url('/') }}" class="list-group-item active">学生列表</a>
<a href="{{ url('student/create') }}" class="list-group-item">新增学生</a>
</div>
</div>
\resources\views\shared\message.blade.php <div class="alert alert-danger">
<ul>
<li>姓名不能为空</li>
<li>年龄只能为整数</li>
<li>请选择性别</li>
</ul>
</div>
\resources\views\student\create.blade.php @extends('layout/student') @section('content')
<!-- 所有的错误提示 -->
@include('shared/message')
<!-- 自定义内容区域 -->
<div class="panel panel-default">
<div class="panel-heading">新增学生</div>
<div class="panel-body">
<form class="form-horizontal">
<div class="form-group">
<label for="name" class="col-sm-2 control-label">姓名</label> <div class="col-sm-5">
<input type="text" 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" 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="option1"> 未知
</label>
<label class="radio-inline">
<input type="radio" name="sex" value="option2"> 男
</label>
<label class="radio-inline">
<input type="radio" name="sex" value="option3"> 女
</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>
</div>
</div>
@endsection
\app\Http\Controllers\StudentController.php /**
* 新增表单页面,表单提交到当前页
*
* @param
* @return void
* @author webjust [604854119@qq.com]
*/
public function create()
{
return view('student/create');
}
\app\Http\routes.php Route::get('/', ['uses' => 'StudentController@index']); // 新增表单路由
Route::any('student/create', ['uses' => 'StudentController@create']);
添加hover效果。\resources\views\shared\siderbar.blade.php <div class="col-md-3">
<div class="list-group">
<a href="{{ url('/') }}"
class="list-group-item {{ Request::path() == '/' ? 'active' : '' }}">学生列表</a>
<a href="{{ url('student/create') }}"
class="list-group-item {{ Request::path() == 'student/create' ? 'active' : '' }}">新增学生</a>
</div>
</div>
这里使用了 Request::path() 方法,更多Request facade 方法可以查看手册:https://cs.laravel-china.org/#requests 4.2 通过模型实现新增
给form表单添加action: <form class="form-horizontal" method="post" action="{{ url('student/create') }}">
\app\Http\Controllers\StudentController.php public function create(Request $request)
{
// 判断是POST请求,也就是提交表单时走这个区间
if($request->isMethod('POST'))
{
echo "post";
} return view('student/create');
}
此时会报 TokenMismatchException in VerifyCsrfToken.php line 67: 的错误。 Laravel 提供简单的方法保护你的应用程序不受到 跨网站请求伪造 攻击。跨网站请求伪造是一种恶意的攻击,破坏份子伪造 已通过身份检验的用户身份 来运行未经授权的命令。
Laravel 会自动生成一个 CSRF token 给每个用户的 Session。该 token 用来验证用户是否为实际发出请求的用户。可以使用 csrf_field 辅助函数来生成一个包含 CSRF token 的 _token 隐藏表单字段。
更多查看:http://d.laravel-china.org/docs/5.2/routing#csrf-protection 在Blade模板引擎中使用: {{ csrf_field() }}
修改 input 字段的属性:name="Student[name]" 这样可以获得一个数组下标以模型名命名的数组。 \resources\views\student\create.blade.php <form class="form-horizontal" method="post" action="{{ url('student/create') }}">
{{ 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="Student[name]" 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="Student[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="Student[sex]" value="2"> 未知
</label>
<label class="radio-inline">
<input type="radio" name="Student[sex]" value="1"> 男
</label>
<label class="radio-inline">
<input type="radio" name="Student[sex]" value="0"> 女
</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>
修改:\app\Http\Controllers\StudentController.php public function create(Request $request)
{
// 判断是POST请求,也就是提交表单时走这个区间
if($request->isMethod('POST'))
{
$data = $request->input('Student');
var_dump($data);
} return view('student/create');
}
访问:http://example.com/student/create 提交表单,效果: 实现模型的添加操作: // 判断是POST请求,也就是提交表单时走这个区间
if($request->isMethod('POST'))
{
$data = $request->input('Student');
// var_dump($data);
$data['created_time'] = time();
$data['updated_time'] = time(); // 模型的添加方法
$ret = Student::insert($data);
var_dump($ret);
}
添加数据测试,查询数据库,可以看到新增加了1条记录哦!(^__^) 嘻嘻…… 使用重定向方法:redirect() public function create(Request $request)
{
// 判断是POST请求,也就是提交表单时走这个区间
if($request->isMethod('POST'))
{
$data = $request->input('Student');
// var_dump($data);
$data['created_time'] = time();
$data['updated_time'] = time(); // 模型的添加方法
$ret = Student::insert($data);
if($ret)
{
return redirect('/');
} else{
return redirect('student/create');
}
} return view('student/create');
}
4.3 操作状态提示
重定向并加上 Session 闪存数据 通常重定向至新的 URL 时会一并 写入闪存数据至 session。所以为了方便,你可以利用链式调用的方式创建一个 RedirectResponse 的实例 并 闪存数据至 Session。这对于在一个动作之后保存状态消息相当方便: return redirect('/')->with('success', '操作成功!');
当然,在用户重定向至新的页面后,你可以获取并显示 session 的闪存数据。举个例子,使用 Blade 的语法: @if (session('success'))
<div class="alert alert-success">
{{ session('success') }}
</div>
@endif
修改如下: // 模型的添加方法
$ret = Student::insert($data);
if($ret)
{
return redirect('/')->with('success', '添加成功!');
} else{
return redirect('student/create')->with('error', '添加失败!');
}
\resources\views\shared\success.blade.php @if(Session::has('success'))
<!-- 成功提示框 -->
<div class="alert alert-success alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
<strong>成功!</strong> {{Session::get('success')}}
</div>
@endif @if(Session::has('error'))
<!-- 失败提示框 -->
<div class="alert alert-danger alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
<strong>失败!</strong> {{Session::get('error')}}
</div>
@endif
同理,我们也可以使用 Session类的方法。如: @if(Session::has('success'))
{{Session::get('success')}}
为了显示最新添加的数据,我们采用倒序的排列方式: public function index()
{
// 对 Eloquent 模型进行分页
$students = Student::orderby('id', 'desc')->paginate(5); // 渲染 student/index 视图,并传递查询出来的全部数据
return view('student/index', ['students' => $students]);
}
最终效果如下:
最终效果如下:
第4节 Laravel-通过表单实现新增及操作状态提示功能
- 4.1 显示新增表单视图
- 4.2 通过模型实现新增
- 4.3 操作状态提示
4.1 显示新增表单视图
修改边栏的链接
\resources\views\shared\siderbar.blade.php
- <div class="col-md-3">
- <div class="list-group">
- <a href="{{ url('/') }}" class="list-group-item active">学生列表</a>
- <a href="{{ url('student/create') }}" class="list-group-item">新增学生</a>
- </div>
- </div>
\resources\views\shared\message.blade.php
- <divclass="alert alert-danger">
- <ul>
- <li>姓名不能为空</li>
- <li>年龄只能为整数</li>
- <li>请选择性别</li>
- </ul>
- </div>
\resources\views\student\create.blade.php
- @extends('layout/student')
- @section('content')
- <!-- 所有的错误提示 -->
- @include('shared/message')
- <!-- 自定义内容区域 -->
- <divclass="panel panel-default">
- <divclass="panel-heading">新增学生</div>
- <divclass="panel-body">
- <formclass="form-horizontal">
- <divclass="form-group">
- <labelfor="name"class="col-sm-2 control-label">姓名</label>
- <divclass="col-sm-5">
- <inputtype="text"class="form-control"id="name"placeholder="请输入学生姓名">
- </div>
- <divclass="col-sm-5">
- <pclass="form-control-static text-danger">姓名不能为空</p>
- </div>
- </div>
- <divclass="form-group">
- <labelfor="age"class="col-sm-2 control-label">年龄</label>
- <divclass="col-sm-5">
- <inputtype="text"class="form-control"id="age"placeholder="请输入学生年龄">
- </div>
- <divclass="col-sm-5">
- <pclass="form-control-static text-danger">年龄只能为整数</p>
- </div>
- </div>
- <divclass="form-group">
- <labelclass="col-sm-2 control-label">性别</label>
- <divclass="col-sm-5">
- <labelclass="radio-inline">
- <inputtype="radio"name="sex"value="option1"> 未知
- </label>
- <labelclass="radio-inline">
- <inputtype="radio"name="sex"value="option2"> 男
- </label>
- <labelclass="radio-inline">
- <inputtype="radio"name="sex"value="option3"> 女
- </label>
- </div>
- <divclass="col-sm-5">
- <pclass="form-control-static text-danger">请选择性别</p>
- </div>
- </div>
- <divclass="form-group">
- <divclass="col-sm-offset-2 col-sm-10">
- <buttontype="submit"class="btn btn-primary">提交</button>
- </div>
- </div>
- </form>
- </div>
- </div>
- @endsection
\app\Http\Controllers\StudentController.php
- /**
- * 新增表单页面,表单提交到当前页
- *
- * @param
- * @return void
- * @author webjust [604854119@qq.com]
- */
- public functioncreate()
- {
- return view('student/create');
- }
\app\Http\routes.php
- Route::get('/', ['uses' => 'StudentController@index']);
- // 新增表单路由
- Route::any('student/create', ['uses' => 'StudentController@create']);
添加hover效果。\resources\views\shared\siderbar.blade.php
- <div class="col-md-3">
- <div class="list-group">
- <a href="{{ url('/') }}"
- class="list-group-item {{ Request::path() == '/' ? 'active' : '' }}">学生列表</a>
- <a href="{{ url('student/create') }}"
- class="list-group-item {{ Request::path() == 'student/create' ? 'active' : '' }}">新增学生</a>
- </div>
- </div>
这里使用了 Request::path()
方法,更多Request facade 方法可以查看手册:https://cs.laravel-china.org/#requests
4.2 通过模型实现新增
给form表单添加action:
<form class="form-horizontal" method="post" action="{{ url('student/create') }}">
\app\Http\Controllers\StudentController.php
- public functioncreate(Request $request)
- {
- // 判断是POST请求,也就是提交表单时走这个区间
- if($request->isMethod('POST'))
- {
- echo "post";
- }
- return view('student/create');
- }
此时会报 TokenMismatchException in VerifyCsrfToken.php line 67: 的错误。
Laravel 提供简单的方法保护你的应用程序不受到 跨网站请求伪造 攻击。跨网站请求伪造是一种恶意的攻击,破坏份子伪造 已通过身份检验的用户身份 来运行未经授权的命令。
Laravel 会自动生成一个 CSRF token 给每个用户的 Session。该 token 用来验证用户是否为实际发出请求的用户。可以使用 csrf_field 辅助函数来生成一个包含 CSRF token 的 _token 隐藏表单字段。
更多查看:http://d.laravel-china.org/docs/5.2/routing#csrf-protection
在Blade模板引擎中使用:
{{ csrf_field() }}
修改 input
字段的属性:name="Student[name]"
这样可以获得一个数组下标以模型名命名的数组。
\resources\views\student\create.blade.php
- <form class="form-horizontal" method="post" action="{{ url('student/create') }}">
- {{ 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="Student[name]" 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="Student[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="Student[sex]" value="2"> 未知
- </label>
- <label class="radio-inline">
- <input type="radio" name="Student[sex]" value="1"> 男
- </label>
- <label class="radio-inline">
- <input type="radio" name="Student[sex]" value="0"> 女
- </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>
修改:\app\Http\Controllers\StudentController.php
- public functioncreate(Request $request)
- {
- // 判断是POST请求,也就是提交表单时走这个区间
- if($request->isMethod('POST'))
- {
- $data = $request->input('Student');
- var_dump($data);
- }
- return view('student/create');
- }
访问:http://example.com/student/create
提交表单,效果:
实现模型的添加操作:
- // 判断是POST请求,也就是提交表单时走这个区间
- if($request->isMethod('POST'))
- {
- $data = $request->input('Student');
- // var_dump($data);
- $data['created_time'] = time();
- $data['updated_time'] = time();
- // 模型的添加方法
- $ret = Student::insert($data);
- var_dump($ret);
- }
添加数据测试,查询数据库,可以看到新增加了1条记录哦!(^__^) 嘻嘻……
使用重定向方法:redirect()
- public functioncreate(Request $request)
- {
- // 判断是POST请求,也就是提交表单时走这个区间
- if($request->isMethod('POST'))
- {
- $data = $request->input('Student');
- // var_dump($data);
- $data['created_time'] = time();
- $data['updated_time'] = time();
- // 模型的添加方法
- $ret = Student::insert($data);
- if($ret)
- {
- return redirect('/');
- } else{
- return redirect('student/create');
- }
- }
- return view('student/create');
- }
4.3 操作状态提示
重定向并加上 Session 闪存数据
通常重定向至新的 URL 时会一并 写入闪存数据至 session。所以为了方便,你可以利用链式调用的方式创建一个 RedirectResponse 的实例 并 闪存数据至 Session。这对于在一个动作之后保存状态消息相当方便:
return redirect('/')->with('success', '操作成功!');
当然,在用户重定向至新的页面后,你可以获取并显示 session 的闪存数据。举个例子,使用 Blade 的语法:
- @if (session('success'))
- <div class="alertalert-success">
- {{ session('success') }}
- </div>
- @endif
修改如下:
- // 模型的添加方法
- $ret = Student::insert($data);
- if($ret)
- {
- return redirect('/')->with('success', '添加成功!');
- } else{
- return redirect('student/create')->with('error', '添加失败!');
- }
\resources\views\shared\success.blade.php
- @if(Session::has('success'))
- <!-- 成功提示框 -->
- <divclass="alert alert-success alert-dismissible"role="alert">
- <buttontype="button"class="close"data-dismiss="alert"aria-label="Close">
- <spanaria-hidden="true">×</span>
- </button>
- <strong>成功!</strong> {{Session::get('success')}}
- </div>
- @endif
- @if(Session::has('error'))
- <!-- 失败提示框 -->
- <divclass="alert alert-danger alert-dismissible"role="alert">
- <buttontype="button"class="close"data-dismiss="alert"aria-label="Close">
- <spanaria-hidden="true">×</span>
- </button>
- <strong>失败!</strong> {{Session::get('error')}}
- </div>
- @endif
同理,我们也可以使用 Session类的方法。如:
- @if(Session::has('success'))
- {{Session::get('success')}}
为了显示最新添加的数据,我们采用倒序的排列方式:
- public functionindex()
- {
- // 对 Eloquent 模型进行分页
- $students = Student::orderby('id', 'desc')->paginate(5);
- // 渲染 student/index 视图,并传递查询出来的全部数据
- return view('student/index', ['students' => $students]);
- }
最终效果如下:
Laravel小项目之第4节 Laravel-通过表单实现新增及操作状态提示功能的更多相关文章
- 用laravel Maatwebsite\Excel 教你导出漂亮的Excel表单
先来看效果图 还算是漂亮吧 哈哈哈. 第一步当然是安装包咯 环境要求 PHP: ^7.0Laravel: ^5.5 composer require maatwebsite/excel 目前3.1 只 ...
- Laravel 5 基础(十一)- 子视图和表单复用
我们需要处理编辑文章的问题.当然我们可以手工添加新的路由,就像这样: Route::get('/articles/{id}/edit', 'ArticleController@edit'); 让我们在 ...
- 第六十七节,html表单元素
html表单元素 学习要点: 1.表单元素总汇 2.表单元素解析 本章主要探讨HTML5中表单元素,表单元素用于获取用户的输入数据. 一.表单元素总汇 HTML5的表单中,提供了各种可供用户输入的 ...
- 第二百三十四节,Bootstrap表单和图片
Bootstrap表单和图片 学习要点: 1.表单 2.图片 本节课我们主要学习一下 Bootstrap 表单和图片功能,通过内置的 CSS 定义,显示各 种丰富的效果. 一.表单 Bootstrap ...
- 项目回顾1-图片上传-form表单还是base64-前端图片压缩
第一个项目终于上线了,是一个叫亲青筹的公益众筹平台,微信端,电脑端还有后台界面大部分都是我完成的,几个月过来,感觉收获了很多,觉得要总结一下. 首先想到的是图片上传的问题.在通常表单数据都是ajax上 ...
- react 项目实战(四)组件化表单/表单控件 高阶组件
高阶组件:formProvider 高阶组件就是返回组件的组件(函数) 为什么要通过一个组件去返回另一个组件? 使用高阶组件可以在不修改原组件代码的情况下,修改原组件的行为或增强功能. 我们现在已经有 ...
- 第四节:Vue表单标签和组件的基本用法,父子组件间的通信
vue表单标签和组件的基本用法,父子组件间的通信,直接看例子吧. <!DOCTYPE html> <html> <head> <meta charset=&q ...
- PHP.TP框架下商品项目的优化4-优化商品添加表单js
优化商品添加表单js 思路 1.制作五个按钮 2.下面五个table 3.全部隐藏,点击则显示 4.点击第几个按钮就显示第几个table 具体操作 1.添加按钮 2.添加五个table并添加class ...
- Laravel POST请求API接口 使用validate表单验证返回欢迎页
突然遇到的问题 就是使用Laravel进行开发API接口的时候 发现在表单验证不通过的时候返回了登录页 猜测问题应该是因为表单验证失败后进行了重定向导致的 因为返回状态码200 网上找了好久没找到 ...
随机推荐
- Spring JDBCTemplate连接SQL Server之初体验
前言 在没有任何框架的帮助下我们操作数据库都是用jdbc,耗时耗力,那么有了Spring,我们则不用重复造轮子了,先来试试Spring JDBC增删改查,其中关键就是构造JdbcTemplate类. ...
- 【hibernate】1、Hibernate的一个注解 @Transient
@Transient表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性.如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则,ORM框架默认其注解为@Basic ...
- 【ajax】1、ajax原理
Ajax核心XMLHttpRequest对象 XMLHttpRequest对象方法 XMLHttpRequest对象属性 onreadystatechange 状态改变的事件触发器.每次 readyS ...
- 【20】策略者模式(Strategy Pattern)
一.引言 本文要介绍的策略模式也就是对策略进行抽象,策略的意思就是方法,所以也就是对方法的抽象,下面具体分享下我对策略模式的理解. 二.策略者模式介绍 2.1 策略模式的定义 在现实生活中,策略模式的 ...
- Git应用—02各种冲突场景处理(转载)
Git冲突与解决方法 https://www.cnblogs.com/gavincoder/p/9071959.html https://www.liaoxuefeng.com/wiki/001373 ...
- Network-Emulator Network-Emulator-Toolkit网络模拟器使用详细介绍
Network-Emulator-Toolkit网络模拟器使用详细介绍 by:授客 QQ:1033553122 原理介绍 图1 如上图,一个ADSL用户通过modem连接到网络,通过网络应用如IE,M ...
- 安卓开发_关于WebView加载页面空白问题
依据我自己的测试,发现有时候用APP打开网页的时候,有的网页加载成功之前需要很久,有的一下就出来了(比如百度) 当加载时间过长的情况下,这时候显示的是空白界面,其实不是代码问题,只是要打开的这个网页太 ...
- MVC与单元测试实践之健身网站(完)-备案与部署
主页-http://www.zhixin9001.cn/Home/Introduce GitHub- https://github.com/zhixin9001/Fitness 这是关于Fit网站的最 ...
- Android View体系(五)从源码解析View的事件分发机制
1.处理点击事件的方法 View的层级 我们知道View的结构是树形的结构,View可以放在ViewGroup中,这个ViewGroup也可以放到另一个ViewGroup中,这样层层的嵌套就组成了Vi ...
- Java:【面向对象:类的定义,静态变量,成员变量,构造函数,封装与私有,this】
本文内容: 什么是面对对象 类的定义与对象实例化 成员变量 成员变量的有效范围 成员变量的赋值 静态变量.方法与实例变量.方法 构造函数 封装与私有 this关键字 注:函数和方法是一样东西.[由于我 ...