Laravel学习记录(三):路由

这篇是对路由的基本介绍,内容基本上来自于文档阅读,少部分来自于自己项目中的写法,简单来说路由目前还是web路由居多,对相关资源的访问,以及对处理方法的声明(当然你定义也可以,就是项目不太整洁了)。内容比较简单,因为是边看边写的,所以格式上比较乱,没有章法,见谅。

基本结构

路由的基本结构就是一个URI加一个闭包函数:

/*
*这是一个web路由,访问的是foo页面,控制函数就是后边的function,
*因为网址肯定是在配置文件里面配好了,
*所以访问页面的路径写的这么短可以理解
*/
Route::get('foo',function()
           {
              //相关函数内容 
           });

在我最近完成的项目里,大概还有这样一种写法,感觉更满足一个项目的管理写法:

/*
*实际上不同在控制函数的写法上,
*控制函数是UsersController里的show方法,
*同时路由被重命名为show,方便了在视图之类的文件里使用
*使用$url = route('show')类似的语句来获取链接
*或者用redirect()->route('show')来重定向
*/
Route::get('foo','UsersController@show')->name('show');

类别

可以相应HTTP请求的Web路由有get、post、put、patch、delete和options,match路由可以相应多个请求,any可以响应所有HTTP请求。

所有指向Web路由中post,put,patch和delete的表单都要有CSRF令牌,否则请求会被拒绝:

<form nethod="POST" action="/profile">
    @csrf
    //相关表单内容
</form>

重定向路由直接用redirect即可,参数就是两个页面路径,省的再次定义很费事。第三个参数可以自定义状态码。

视图路由可以用view,接受URI做第一个参数,视图路径做第二个路径,第三个参顺可以传一个数据数组给视图。但是目前我用的好像没有相关的方法,都是用普通的web路由加上相关的返回视图方法来用的。

参数

获取URL中的变量做参数,就和PHP变量一样,框个大括号。可选有默认,加个“?”来实现。

后接where方法可以对参数的格式用正则表达式做约束。模板化的要去路由的提供者boot中定义pattern路由方法。

有参数的命名路由,插入参数直接在第二个参数上按数组的格式去插就好。

约定关系和表单方法伪造

URI和方法其实是有隐性的绑定关系的,基本上是约定的名字上有相同的部分,这是一种约定,所以基本上可以按照这种方法来添加文件。

表单方法伪造:因为HTML表单也就有个get、post和require三个方法,不支持put、patch和delete请求,所以当调用方式是这些的时候,需要在表单里面添加一个_mothod隐藏域,它的值会作为请求的方法。

<form action="/foo/bar" method="POST">
    <input type="hidden" name="_method" value="PUT">
    <input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>

或者用@method生成指定的隐藏域:

<form action="/foo/bar" method="POST">
    @method('PUT')
    @csrf
</form>