laravel 学习之第二章
Controller
Controller之Request
获取请求的值
namespace App\Http\Controllers;
use Illuminate\http\Request;
public function request(Request $request) {
echo $request->input('name');
echo $request->input('name', 'default');
if($request->has('nikename')){
...
}
$aRequest = $request->all();
}
// 无需对参数转成实体,因为在输出时候会自动转成实体,并且在插入数据库,laravel 自动实现参数绑定。
判断请求类型
echo $request->method();
if($request->isMethod('GET'){
...
}
$flag = $request->ajax(); //判断是否是ajax请求
$flag = $request->is('student/*'); //判断是否是student下的控制器 注意:s必须小写
$request->url(); // 获取当前url
Controller之Session
Route::group(['middleware' => 'web'], function(){ // 开启session
Route::any('session1', ['uses' => 'StudentController@session1']);
Route::any('session2', ['uses' => 'StudentController@session2']);
});
// HTTP request 操作方法
public function session1(Request $request) {
$request->session()->put('key1', 'value1');
}
public function session2(Request $request){
$request->session()->get('key1');
}
// session() 操作方法
public function session1() {
session()->put('key1', 'value1');
}
public function session2(){
session()->get('key1');
}
// Session:: 操作方法 (一个注意点)
public function session1() {
Session::put('key1', 'value1'); // (注意点)需要 use 一个Session 在 Illuminate Support Facades
// 还可以 Session::put(['key1' => 'value1']);
}
public function session2){
Session::get('key1');
// 还可以 Session::get('key1', 'default_value');
}
// 存一个数组然后取出
public function session1() {
Session::push('student', 'sean');
Session::push('student', 'imooc');
}
public function session2(){
$res = Session::get('student', 'default');
var_dump($res);
}
// pull 可以取出后就删除掉了 unset
public function session2(){
$res = Session::pull('student', 'default');
var_dump($res);
} // 第一次输出 student 的值,第二次则是 default
// 取出所有的值
public function session2(){
$res = Session::all();
var_dump($res);
}
// 判断值是否存在
public function session2(){
if(Session::has('key1')){
$res = Session::all();
var_dump($res);
}
}
// 删除某个值
Session::forget('key1');
// 删除所有
Session::flush();
// 第一次访问存在,第二次就不见了
Session::flash('key_flash', 'value_flash');
Controller之Response
echo response()->json($data);
return redirect('student/list'); // 跳转到方法 action
public function c1(){
return Session::get('msg', '暂无数据');
}
public function c2(){
return redirect('c1')->with('msg', '我是快闪数据'); // 原理就是 Session::flash
}
return redirect()->action('StuController@action')->with('msg', '我是快闪数据');
return redirect()->route('aliasname')->with('msg', '我是快闪数据');
// 返回上一个页面
return redirect()->back();
Controller之Middleware
有个活动,在活动日期前是宣传页面,活动之后是活动页面。
新建中间件
// 在 Middleware 文件夹下面,新建 Activity.php
namespace App\Http\Middleware;
use Closure;
class Activity{
}
注册中间件
// 文件夹 Http/Kernel.php
protected $routeMiddleware = [
...
'Activity' => \App\Http\Middleware\Activity::class;
];
使用中间件
Route::group(['middleware' => 'Activity'], function(){
Route::any('active1', ['uses' => 'StudentController@active1']);
Route::any('active2', ['uses' => 'StudentController@active2']);
});
中间件前置和后置操作
// 在中间件里面,首先展示一个前置操作
public function handle($request, Closure $next){
if(time() < strtotime('20170406')){
return redirect('active0');
}
return $next($request);
}
// 展示一个后置操作
public function handle($request, Closure $next){
$response = $next($request);
var_dump($response);
echo '这是后置操作';
}
表单
静态资源管理及模板布局
{{ asset('static/js/jquery.min.js') }} // public 下面的路径
表单列表及分页实现
// 控制器中
$student = Student::paginate(2); // 每页显示两条
// 视图中
{{$student->render()}}
通过表单实现新增及操作状态提示功能
模型新增
// 导航当前是否选中和对应的样式
{{Request::getPathInfo() == '/student/index' ? 'active' : ''}}
create 新增
public function save(Request $request){
$data = $request->input('Student');
$student = new Student();
$student->name = $data['name'];
$student->age = $data['age'];
if($student->save()){
return redirect('student/index');
}else{
return redirect()->back();
}
}
// 还可以这样
public function save(Request $request){
if($request->isMethod('POST')){
// 位置1(后面会用到这个位置)
if(Student::create($data)){ // 需要设置批量赋值 protected $fillable = ['name', 'age'];
return redirect('student/index')->with('success', '添加成功!');
// 报错 TokenMismatchException 则需要在表单里添加 {{csrf_field()}}
/**
@if(Session::has('success'))
<div>
...
{{Session::get('success')}}
</div>
@endif
{{-- error 同理 --}}
**/
}else{
return redirect()->back();
}
}
return view('student.create');
}
表单验证及数据保持详解
控制器验证
Validator
@if (count($errors))
<div class='alert'>
<ul>
<li>
{{$errors->first()}}
</li>
</ul>
</div>
// 或者
<div class='alert'>
<ul>
@foreach($errors->all() as $e)
<li>{{$e}}</li>
@endforeach
</ul>
</div>
@endif
// 在 input 后面加报错信息
{{ $errors->first('Student.name') }}
// 在 位置1 处,插入 validate 代码
$this->validate(
$request,
[
'name' => 'required|min:2|max:20',
'age' => 'required|integer',
],
[
'required' => ':attribute 为必填项',
'min' => ':attribute 长度不符合要求',
'integer' => ':attribute 必须是整数',
],
[
'name' => '姓名',
'age' => '年龄',
]
);
// 第二种
$validator = \Validator::make(
$request->input(),
[
'name' => 'required|min:2|max:20',
'age' => 'required|integer',
],
[
'required' => ':attribute 为必填项',
'min' => ':attribute 长度不符合要求',
'integer' => ':attribute 必须是整数',
],
[
'name' => '姓名',
'age' => '年龄',
]
);
if($validator->fails()){
return redirect()->back()->withErrors($validator);
}
数据保持
value="{{old('message')}}"
value="{{old('Student')['name']}}"
通过模型处理性别
// 模型中
const SEX_GIRL = 10;
const SEX_BOY = 20;
public function sex($index=null){
$arr = [
self::SEX_GIRL => '女',
self::SEX_BOY => '男',
];
if($index!=null){
return array_key_exists($index, $arr) ? $arr[$index] : '未知';
}
return $arr;
}
// 模版中
{{ $student->sex($student->sex) }} // Student::all() 返回的是一个对象,所以可以 $student->sex()
通过表单实现修改
// 模版中
{{ old('Student')['name'] ? old('Student')['name'] : $student->name }}
{{ isset($student->sex) && $student->sex == $index ? 'checked' : '' }}
// 控制中
public function update($request, $id){
$student = Student::find($id);
if($request->isMethod('POST')){
$data = $request->input('Student');
$student->name = $data['name'];
$student->age = $data['age'];
if($student->save()){
return redirect('student/index')->with('success', '修改成功');
}
}
return view('student.update', ['student' => $student]);
}
表单中查看详情及删除
public function detail($id){
$student = Student::find($id);
return view('student/detail', ['student' => $student]);
}
<a href='{{ url("student/del", ["id" => $student->id]) }}'></a>
Route::any('student/del/{id}', ['uses' => 'StudentController@del']);
public function del($id){
$student = Student::find($id);
if($student->delete()){
return redirect('student/index')->with('success', '删除成功');
}else{
return redirect('student/index')->with('error', '删除失败');
}
}
/** ajax 删除 **/
<a href="" onclick='javascript:var tag=confirm("您确定要删除该用户吗");if(!tag){return false;}del("{{ url("student/del") }}");return false;'>删除</a>
function del(url,id){
$.post(
url,
{id:id},
function(data){
$('.none'+id).hide();
}
);
}
laravel 学习之第二章的更多相关文章
- 《DOM Scripting》学习笔记-——第二章 js语法
<Dom Scripting>学习笔记 第二章 Javascript语法 本章内容: 1.语句. 2.变量和数组. 3.运算符. 4.条件语句和循环语句. 5.函数和对象. 语句(stat ...
- The Road to learn React书籍学习笔记(第二章)
The Road to learn React书籍学习笔记(第二章) 组件的内部状态 组件的内部状态也称为局部状态,允许保存.修改和删除在组件内部的属性,使用ES6类组件可以在构造函数中初始化组件的状 ...
- [HeadFrist-HTMLCSS学习笔记]第二章深入了解超文本:认识HTML中的“HT”
[HeadFrist-HTMLCSS学习笔记]第二章深入了解超文本:认识HTML中的"HT" 敲黑板!!! 创建HTML超链接 <a>链接文本(此处会有下划线,可以单击 ...
- C++ Primer Plus学习:第二章
C++入门第二章:开始学习C++ 进入C++ 首先,以下是一个C++程序: //myfirst.cpp 显示一行文字 #include<iostream> //预处理器编译指令 int m ...
- Windows程序设计(第五版)学习:第二章 Unicode简介
第二章 Unicode简介 1,Windows通过双字节技术DBCS解决这个问题,代码页定义不同的字符集,称为ANSI字符集,比如日文为CP932,韩文为CP949,繁体中文为CP950,简体中文为C ...
- [HeadFirst-JSPServlet学习笔记][第二章:高层概述]
第二章:高层体系结构 容器 1 什么是容器? servelet没有main()方法.它们受控于另一个Java应用,这个Java应用称为容器(Container) Tomcat就是这样一个容器.Web服 ...
- 《JS权威指南学习总结--第二章词法结构》
第二章词法结构 内容要点: 一.注释 1. //表示单行注释 2. /*这里是一段注释*/ 3.一般编辑器里加注释是:选中要加注释的语句,按 ctrl+/ 二.直接量 所谓直接量,就是程序中直接使用的 ...
- c#高级编程第七版 学习笔记 第二章 核心c#
第二章 核心C# 本章内容: 声明变量 变量的初始化和作用域 C#的预定义数据类型 在c#程序中使用条件语句.循环和跳转语句执行流 枚举 名称空间 Main()方法 基本的命令行c#编译器选项 使用S ...
- Windows Forms编程实战学习:第二章 欢迎使用Visual Studio
第二章 欢迎使用Visual Studio 1,AssemblyInfo文件 包含程序集的属性,向应用程序添加元数据 [assembly:<attribute>(<setting&g ...
随机推荐
- 后盾网lavarel视频项目---图片上传
后盾网lavarel视频项目---图片上传 一.总结 一句话总结: 前端还是普通的前端操作,前端上传图片的地址就是图片上传的路由,后端代码也很简单 public function uploader(R ...
- http请求状态码解析
1xx(临时响应) 2xx(成功) 3xx(重定向) 4xx(请求错误) http状态码 400 (错误请求) 服务器不理解请求的语法. http状态码 401 (未授权) 请求要求身份验证. 对于需 ...
- leecode 309. 最佳买卖股票时机含冷冻期
/***** //sell[i]表示截至第i天,最后一个操作是卖时的最大收益: //buy[i]表示截至第i天,最后一个操作是买时的最大收益: //cool[i]表示截至第i天,最后一个操作是冷冻期时 ...
- Go语言基本类型
1.Go语言fmt包详解 fmt.Println() ###常用打印 fmt.Print() fmt.Printf() ###格式化 fmt.Sprintf() ###字符串拼接 a)普通占位符 占位 ...
- jquery.validate.js使用之自定义表单验证规则
jquery.validate.js使用之自定义表单验证规则,下面列出了一些常用的验证法规则 jquery.validate.js演示查看 jquery validate强大的jquery表单验证插件 ...
- 无界面上(linux)生成测试报告(3)
无界面上(linux)生成测试报告 1.待jmx文件运行完成后,键入命令进入到jtl文件下: #cd testresult#bin目录下使用此命令,进入到jtl文件下 #jmeter -g pushG ...
- sorted&filter&map
python里列表的sort和内置的sorted函数,都可以进行排序,列表的sort方法是在原有的列表上进行排序,sorted是会返回一个新的对象 persons = [ {'name': '小明', ...
- angularjs的部分总结
就在这个星期,我们学习了一个神奇的框架叫:"Angular js",它的神奇之处不是它的功能有多强,甚至它的功能还是很简陋的,但是它的那种思想是非常牛逼的;他完全抛弃了我们现在所常 ...
- 【VS开发】动态添加的ActiveX控件如何响应事件
http://blog.csdn.net/xiaoqiqixiao/article/details/574542 今天在csdn上看到一朋友问如何响应动态添加的控件的事件,搜索资料,发现对于一般的应用 ...
- k8s-kubernetes-configmap存储
存储 configMap configMap描述信息 ConfigMap功能在Kubernetes1.2版本中引入,许多应用程序会从配置文件.命令行参数或环境变量中读取配置信息. ConfigMap ...