laravel学习笔记2--表单
一、Controller
1、Request
1.1、取值:input
// 1、取值
echo $request->input('name');
// 2、取不到值时打印默认值
echo $request->input('name', '默认值');
1.2、判断是否有该参数:has
// 3、判断是否有该参数
if ($request->has('name')) {
echo $request->input('name');
} else {
echo '不存在该参数';
}
1.3、获取所有的参数:all
// 4、获取所有的参数
$res = $request->all();
1.4、判断请求类型
1.4.1、method
echo $request->method();
1.4.2、isMethod
if ($request->isMethod('GET')) {
echo 'YES';
} else {
echo 'NO';
}
1.4.3、ajax
$res = $request->ajax();
1.4.4、is:判断请求路径是否符合要求
$res = $request->is('student/*');
1.4.5、url:获取请求的url
$res = $request->url();
2、Session
2.1、Session的配置文件:
2.2、添加web中间件,开启session_start:
在路由中添加中间件:
Route::group(['middleware' => ['web']], function(){ Route::get('session1', ['uses' => 'StudentController@session1']); Route::get('session2', ['uses' => 'StudentController@session2']); });
2.3、设置及获取session:
1)通过request对象:
public function session1(Request $request) { $request->session()->put('key1', 'value1'); } public function session2(Request $request) { echo $request->session()->get('key1'); }
2)通过session()方法:
public function session1(Request $request) { session()->put('key2', 'value2'); } public function session2(Request $request) { echo session()->get('key2'); }
3)通过Session类:
public function session1(Request $request) { Session::put('key3', 'value3'); } public function session2(Request $request) { echo Session::get('key3', 'default'); // 没有key3取值为default }
4)session中存入数组:push
public function session1(Request $request) { Session::push('student', 'sean'); Session::push('student', 'lily'); } public function session2(Request $request) { $student = Session::get('student'); }
5)取出session中的数据后删除该session数据:pull
public function session2(Request $request) { $student = Session::pull('student', 'default'); var_dump($student); }
6)取出session中所有的数据:all
$res = Session::all();
7)判读session有没有某个值:has
$bool = Session::has('key1');
8)删除某个session值:forget
Session::forget('key1');
9)清空所有的session值:flush
Session::flush();
10)暂存session数据,只有第一次访问时有数据,第二次访问就没有该session值了:flash
public function session1(Request $request) { Session::flash('key-flash', 'value-flash'); } public function session2(Request $request) { echo Session::get('key-flash'); }
3、Respose
3.1、响应json:response()->json($data)
public function response() { $data = [ 'errCode' => 0, 'errMsg' => 'success', 'data' => 'sean' ]; return response()->json($data); }
3.2、重定向:
3.2.1、redirect()
public function response() { return redirect('session1'); }
备注:重定向可以带信息,使用with,重定向后的方法使用session获取
public function session1(Request $request) { return Session::get('message', 'not message'); } public function response() { return redirect('session1')->with('message', 'hello world'); }
3.2.2、使用action方法跳转到对应的方法中
public function response() { return redirect()->action('StudentController@session1')->with('message', 'hello world'); }
3.2.3、通过路由别名跳转:route
public function response() { return redirect()->route('sess1')->with('message', 'hello world'); }
3.2.4、返回上一个页面:back
public function response() { return redirect()->back(); }
4、中间件:Middleware
4.1、定义
Laravel中间件提供一个方便的机制来过滤进入应用程序性的HTTP请求
4.2、准备两个方法:
4.3、创建中间件:
<?php namespace App\Http\Middleware; use Closure; class Activity { public function handle($request, Closure $next) { if (time() < strtotime('2018-10-27')) { return redirect('activity0'); } return $next($request); } }
4.4、注册中间件:
'activity' => \App\Http\Middleware\Activity::class,
4.5、在路由中使用中间件:
Route::group(['middleware' => ['activity']], function(){ Route::get('activity1', ['as' => 'activity1', 'uses' => 'StudentController@activity1']); });
二、静态资源管理及模板布局
1、asset:引入js、css文件,默认以public为根目录,如下为引入public目录下的css和js文件:
<link rel="stylesheet" href="{{ asset('css/bootstrap.css') }}">
<script type="text/javascript" src="{{ asset('js/jquery.min.js') }}"></script>
2、分页
控制器使用paginate()获取数据:
$students = Student::paginate(2);
页面模板使用renderrender()方法输出分页:
{{$students->render()}}
最终页面显示,这里没有添加样式:
3、数据验证
3.1、控制器上对数据进行验证
3.1.1、路由上必须使用web中间件:
Route::group(['middleware' => ['web']], function(){ Route::any('student/create', ['uses' => 'StudentController@create']); });
3.1.2、控制器是使用validate方法进行验证:
$this->validate($request, [ 'student.name' => 'required|min:2|max:20', 'student.age' => 'required|integer' ], [ 'required' => ':attribute 为必填项', 'min' => ':attribute 长度不符合要求', 'integer' => ':attribute 必须为整数' ], [ 'student.name' => '姓名', 'student.age' => '年龄' ]);
3.1.3、因为控制层使用了create方法,所以model层需要指定允许批量赋值的字段:
3.1.4、view层需要添加csrf_field()及显示错误信息:
common.error.blade.php代码,错误信息存储在$errors中:
@if (count($errors)) @foreach ($errors->all() as $error) <ul> <li>{{$error}}</li> </ul> @endforeach @endif
3.1.5、页面显示:
3.1.6、失败跳转时存储已经填写的信息:withInput()、old()