1、Request:Illuminate\Http\Request
//1)取某个参数
$name = $request->input('name','defaultVal');
//2)判断request中是否有某个值
if($request->has('name')){
$name = $request->input('name');
}else{
$name = 'defaultVal';
}
//3)取request中所有的值
$request->all();
//4)判断请求类型
echo $request->method();//GET
if($request->isMethod('GET')){
//是GET类型
}
if($request->ajax()){
//是ajax请求
}
if($request->is('student/*')){
//是否满足路由规则
}
echo $request->url();//获取当前url,不包含参数
2、session(config/session.php)
2.1 laravel使用session有三种方法:
request类的session()方法
session()辅助函数
Session facade
2.2 使用
//路由加载session组件
Route::group(['middleware' => ['web']], function () {
Route::any('session1', ['uses'=>'StudentController@session1']);
Route::any('session2', ['uses'=>'StudentController@session2']);
});
//存取session
2.2.1 HTTP request session
$request->session()->put("key1",'wocalei');
echo $request->session()->get("key1");
2.2.2 session()辅助函数
session()->put('key2','value2');
echo session->get('key2');
2.2.3 \Illuminate\Support\Facades\Session
//判断session中是否存在某个key
Session::has('key')
//删除某个session下的key
Session::forget('key')
//删除所有session信息
Session::flush()
//session单个值操作
Session::put('key3','value3');
echo Session::get('key3','defaultVal');
//session数组操作
\Illuminate\Support\Facades\Session::put(['yes'=>'nob']);
echo \Illuminate\Support\Facades\Session::get("yes");//nob
\Illuminate\Support\Facades\Session::put(['yes'=>['dd','ff']]);
var_dump(\Illuminate\Support\Facades\Session::get("yes"));
\Illuminate\Support\Facades\Session::push(['yes'=>1]);
\Illuminate\Support\Facades\Session::push(['yes'=>2]);
var_dump(\Illuminate\Support\Facades\Session::get("yes"));
//从session中取出数据然后直接删除该值在session中存储
\Illuminate\Support\Facades\Session::pull('yes');
//暂存数据,访问第一次有
\Illuminate\Support\Facades\Session::flash('yes','wokao');
\Illuminate\Support\Facades\Session::get('yes');
//获取所有session中的值
\Illuminate\Support\Facades\Session::all();
3、Resonse:
3.1 数组转换json
$arr = [
'errCode'=>0,
'errMsg'=>'error',
'data'=>'seven'
];
return response()->json($arr); //转换成json
3.2 重定向
//redirect中传url,with其实就是Session::flash第一次访问存在
return redirect('session2')->with('keyyy','valll');
//action中传"控制器@方法",with其实就是Session::flash第一次访问存在
return action('StudentController@session2')->with('keyyy','valll');
//route中传url别名,with其实就是Session::flash第一次访问存在
return redirect()->route('session2Alias')->with('keyyy','valll');
4、MiddleWare:中间件,过滤进入应用程序的HTTP请求
4.1 定义一个中间件:
namespace App\Http\Middleware;
class Active{
//请求前置操作(请求到控制器之前)
// public function handle($request,\Closure $next){
//
// if(time() < strtotime('2018-01-13')){
// return redirect('active0');
// }
//
// return $next($request);
// }
//请求后置操作(请求到控制器之后)
public function handle($request,\Closure $next){
$response = $next($request);
//请求后的操作逻辑写在下面
}
}
4.2 在Kernel.php中注册此中间件
protected $routeMiddleware = [
.....
'active'=>\App\Http\Middleware\Active::class
];
4.3 路由中加载、使用此中间件:
Route::any('active0', ['uses'=>'StudentController@active0']);
Route::group(['middleware' => ['active']], function () { //初始化session
Route::any('active1', ['uses'=>'StudentController@active1']);
Route::any('active2', ['uses'=>'StudentController@active2']);
});
4.4 StudentController:
public function active0(Request $request){
return '敬请期待';
}
public function active1(Request $request){
return '谢谢参与1';
}
public function active2(Request $request){
return '谢谢参与2';
}
5、引入静态资源js、css、img
<script src="{{ asset('static/jquery/jquery.min.js')}}"></script> //asset()是相对于public文件夹的
6、表单
6.1 csrf:
{{ csrf_field()}} //防止csrf
Route::group(['middleware' => ['web']], function () {
//要验证csrf的路由都要放在web中间件里面
Route::post('user/create',['uses'=>'xxxx'])
})
6.2 表单数据验证
6.2.1 Controller:
//验证方式一:控制器validate()方法验证
$this->validate($request,[
//如果不是数组 : 'name'=>'required|min:2|max:20'
//如果是数组Studeng[name] :'Student.name'=>'required|min:2|max:20'
'Student.name'=>'required|min:2|max:20',
'Student.age'=>'required|integer',
'Student.sex'=>'required|integer',
],[
'required'=>':attribute 为必填项', //解释required是什么意思 , :attribute 占位符,
'min'=>':attribute 长度不符合要求',
'max'=>':attribute 长度不符合要求',
'integer'=>':attribute 必须为整数',
],[
'Student.name'=>'姓名', //解释Student.name是哪个属性
'Student.age'=>'年龄',
'Student.sex'=>'性别',
]);
//验证方法二:Validator类验证(除了第一个参数其他都相同)
$validate = \Validator::make($request->input(),[
//如果不是数组 : 'name'=>'required|min:2|max:20'
//如果是数组Studeng[name] :'Student.name'=>'required|min:2|max:20'
'Student.name'=>'required|min:2|max:20',
'Student.age'=>'required|integer',
'Student.sex'=>'required|integer',
],[
'required'=>':attribute 为必填项', //解释required是什么意思 , :attribute 占位符,
'min'=>':attribute 长度不符合要求',
'max'=>':attribute 长度不符合要求',
'integer'=>':attribute 必须为整数',
],[
'Student.name'=>'姓名', //解释Student.name是哪个属性
'Student.age'=>'年龄',
'Student.sex'=>'性别',
]);
//不同的是这里要手动处理跳转与错误信息,第一种方式默认跳上个页面
if($validate->fails()){
return redirect()->back()->withErrors($validate);
}
6.2.2 表单验证中间件:
当调用Controller中的validate没通过验证,就会重定向到上个页面,并且
抛出异常,laravel会捕获异常,并把错误信息存储在session中,以errors为
key,用的中间件web中的:ShareErrorsFromSession::class
6.2.3 页面显示错误信息
//整体错误信息
@if(count($errors))
//取出所有错误信息
@foreach($errors->all() as $error)
{{ $error }}
@endforeach
//取出来第一条错误信息
{{ $errors->first() }}
@endif;
//表单每个属性后面跟着其自己的错误信息:
//比如像输出name为Student[name]属性验证的错误信息:
{{ $errors->first('Student.name')}}
6.2.4 后台出错,表单数据回填(withInput())
Controller中:
return redirect()->back()->withErrors($validate)->withInput();
页面value中如下:
<input name="Student[name]" value={{ old('Student')['name'] ? old('Student')['name'] : $student->name}}/>
//old('Student')['name']表单提交的最新数据
//$student->name修改的时候查出来的数据