您的位置:首页 > 理论基础 > 计算机网络

Laravel学习笔记(二)---路由,CSRF,HTTP中间件,RESTFul风格控制器注册路由,视图间共享数据

2017-04-01 08:58 661 查看
3,定义路由必选参数设置

Route::get('/hello/{name}',function($name){

    return "Hello {$name}!";

});

定义路由可选参数设置

Route::get('/hello/{name?}',function($name="abc"){

    return "Hello {$name}!";

});

有时候我们希望对路由有更加灵活的条件约束,可以通过正则表达式来实现:

Route::get('/hello/{name?}',function($name="Laravel"){

    return "Hello {$name}!";

})->where('name','[A-Za-z]+');

CSRF是跨站请求伪造(Cross-site request forgery)的英文缩写。关于CSRF攻击原理及其防护

Laravel框架中避免CSRF攻击很简单:Laravel自动为每个用户Session生成了一个CSRF Token,该Token可用于验证登录用户和发起请求者是否是同一人,如果不是则请求失败。

Laravel提供了一个全局帮助函数csrf_token来获取该Token值,因此只需在视提交图表单中添加如下HTML代码即可在请求中带上Token:

<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">

该段代码等同于全局帮助函数csrf_field的输出:

<?php echo csrf_field(); ?>

在Blade模板引擎中还可以使用如下方式调用:

{!! csrf_field() !!}

Laravel中可以把HTTP中间件看做“装饰器”,在请求到达最终动作之前对请求进行过滤和处理。

中间件在Laravel中有着广泛的应用,比如用户认证、日志、维护模式、开启Session、从Session中获取错误信息,以及上一篇教程中提到的CSRF验证,等等。

中间件类默认存放在app/Http/Middleware目录下。

此外,定义好中间件后,需要在app/Http/Kernel.php文件中注册该中间件,如果我们定义的中间件想要在全局有效,

即每次请求都会调用,则将该中间件追加到$middleware属性数组;否则如果中间件只是在某些特定的路由中使用,则将其追加到$routeMiddleware属性数组,并在路由定义时使用middleware选项指定。

为RESTFul风格控制器注册路由

方法         路径                 动作         路由名称

GET         /post                 index         post.index

GET         /post/create         create         post.create

POST         /post                 store         post.store

GET         /post/{post}         show         post.show

GET         /post/{post}/edit     edit         post.edit

PUT/PATCH     /post/{post}         update         post.update

DELETE         /post/{post}         destroy     post.destroy

视图间共享数据

view()->share('sitename','Laravel学院');

你也可以传递数据到多个视图:

view()->composer(['hello','home'],function($view){

    $view->with('user',array('name'=>'test','avatar'=>'/path/to/test.jpg'));

});

甚至所有视图(使用通配符*):

view()->composer('*',function($view){

    $view->with('user',array('name'=>'test','avatar'=>'/path/to/test.jpg'));

});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息