<html>
<head>…</head>
<body>@yield(content)</body>
</html>
其中@yield(‘content’)部分是特殊的blade命令,让子页面可以在这里注入自己的内容以扩展布局
@extends(layout.app)
@session(‘content’)
<div>
@include(common.errors)
<form>
{{csrf_field}}
</form>
</div>
@endsession
注:首先@session会告知blade,我们使用了哪的布局。所有@session(content)及@endsession之间的内容都会被注入到布局中的@yield(‘ocntent’)位置里
Route::post(‘/task’,function(Request $request){
$vaildator=Validator::make($request->all(),[
‘name’=>’requird|max:255’,
]);
If($vailator->fails()){
Return redirect(‘/’)
->withInput()
->withErrors($vaildator)
}
});
注:name为必填字段而且必须少于255字符。如果验证失败我们将用户重定向会回/ url,并将旧的输入及错误消息闪存到session中
增加实际的删除逻辑,我们可以使用Eloquent的findOrFail方法通过ID来获取模型,当模型不存在时则会抛出404异常,一旦我们成功获取到模型,我们就可以使用delete方法来删除该条记录,只要该记录被删除,我们便会把用户重定向回/ URL
Route::delete(‘/task/{id}’,function($id){
Task::findOrFail($id)->delete();
Return redirect(‘/’);
});
路由参数
必选参数:
Route::get(‘user/{id}’,function($id){
Return ‘User’.$id;
})
可选参数
Route::get(‘user/{name}’,function($name=null){
Return $name;
});
正则表达式限制参数
Route:get(‘user/{name}’,function($name){
})
->where(‘name’,’[A-Z a-z]+’);
Route::get('user/{id}/{name}', function ($id, $name) {
})
->where(['id' => '[0-9]+', 'name' => '[a-z]+']);
路由中间件
指定中间件到所有群组内的路由中,则可以在群组属性数组中使用middleware参数
中间件将会参照列表指定的顺序运行
Route::group([‘middleware’=>’auth’],function(){
Route::get(‘/’,function(){
});
Route::get(‘user/profile’,function(){
});
})
命名空间
指定相同的PHP命名空间给控制器群组
Route::group([‘namespace’=>’Admin’],function(){
Route::group([‘namespace’=>’User’],function(){
});
});
路由前缀
Route::group([‘prefix’=>’admin’],function(){
Route::get(‘users’,function(){
});
});
CSRF保护
Laravel 提供简单的方法保护你的应用程序不受到 跨网站请求伪造 攻击。
跨网站请求伪造是一种恶意的攻击,破坏份子伪造 已通过身份检验的用户身份 来运行未经授权的命令。
Laravel 会自动生成一个 CSRF token 给每个用户的 Session。
该 token 用来验证用户是否为实际发出请求的用户。
可以使用 csrf_field 辅助函数来生成一个包含 CSRF token 的 _token 隐藏表单字段:
<?php echo csrf_field(); ?>
csrf_field 辅助函数会生成以下的 HTML:
<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
当然,也可以在 Blade 模板引擎 中使用:
{{ csrf_field() }}
你不需要手动验证 POST、PUT 或 DELETE 请求的 CSRF token。
VerifyCsrfToken HTTP 中间件 将自动验证请求与 session 中的 token 是否相符。
中间件
http中间件提供了一个方便的机制来过滤进入应用程序的http请求,例如,Auth中间件验证用户的身份,如果用户未通过验证,中间件将会把用户导向登录界面,反之,当用户通过了身份验证,中间件将会通过此请求并接着往下执行
创建中间件的命令
Php artisan make:middleware AgeMiddleware
Class AgeMiddleware{
Public function handle($request,Closure $next){
If($request->input(‘age’<=200){
Return redirect(‘home’);}
Return $next($request);
}
}
为路由指派中间件
如果要指派中间件给特定的路由,你得先在app/http/kernel.php给中间件设置一个键,默认情况下,这个文件的$routeMiddleware属性已包含了laravel目前设置的中间件,只需要在清单列表中加一组自定义的键即可
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
];
中间件一旦在kernel中被定义,即可在路由选项内使用middleware键值指定
Route::get(‘admin/profile’,[‘middleware’=>’auth’,function(){
}]);
使用一组数组为路由指定多个中间件
Route::get(‘/’,[‘middleware’=>[‘first’,’second’],function(){
}]);
除了使用数组外,也可以在路由的定义之后链式调用middleware方法
Route::get(‘/’,function(){
})->middleware([‘first’,second]);