Laravel5.3路由的书写位置:
- Laravel 5.3 路由被放在 目录下的路由文件中
1.文件,定义了web界面的路由。(这些路由被分配给web中间价租,提供session和csrf防护等功能)
2.文件,是无状态的,被分配到api中间件组。(平常使用的基本是web.php路由)
3.关于上面的注册:参看服务提供者-
App/Http/Providers/RouteServiceProvider.php
文件,解释关于如何加载routes/web.php
文件和routes/api.php
文件,以及当前命令空间等。
-
4.参考中间件,是如何约束web.php
文件和api.php
文件
* 该步骤是在3的基础上,中间件在App/Http/Kernel.php
文件中被注册。
路由
- 路由的方法形式
Laravel注册的路由
路由参数 、where正则判断:
laravel 5.4 路由
# 路由支持的几种HTTP请求
Route::get( $uri, $callback ); //> GET请求(包含get、head两种请求)
Route::post($uri, $callback); //> POST请求
Route::put( $uri, $callback ); //> PUT请求
Route::patch( $uri, $callback); //> PATCH请求
Route::delete( $uri, $callback); //> DELETE请求 (删除url资源)
Route::options($uri,$callbback); //> OPTIONS请求
# get、head 请求区别:
get:获取指定的页面信息,并返回实体主体
head:用于获取报头(类似于GET;不会返回页面具体内容)
# post、put、patch 三个请求区别:
post:新增数据(create)
put:更新数据(update)
patch:更新部分数据(例如更新某个字段的值)
# delete:删除服务器指定页面
# options 请求
1、获取服务器支持的HTTP请求方法;
2、用来检查服务器的性能;
# Route门面支持的如下两个请求动作:
Route::match(['get','post',...], $uri, $callback); //> 指定的动作允许通过
Route::any( $uri, $callback ); //> 如何动作都允许通过
# 资源路由(对资源控制器)
# 创建一个资源控制器命令(该命令会在app/http/Controllers/下创建PhotoController.php控制器)
php artisan make:controller PhotoController --resource
# 注册资源路由:
Route::resource('photos','PhotoController');
# 资源路由,资源控制器:自动创建多个控制器方法
# 比如:在app/http/Controllers/Admin/目录下创建 PhotoController.php资源路由
php artisan make:controller Admin\PhotoController --resoucre
# 该命令会自动创建 index()、create()、store()、show()、edit()、update()、destory()方法
# 创建部分资源路由(PhotoController.php文件部分动作生效)
# only : 表示仅仅需要的动作
Route::resource('photo','Admin\\PhotoController',[
//> 仅index和show动作生效
'only' => ['index','show']
]);
# except : 排除指定动作外的其他动作
Route::resource('photo','Admin\\PhotoController',[
//> except 排除指定动作
'execpt' => ['create','store','update','destory']
])
# 命名资源路由:在使用route()辅助函数时(相当于name()方法)
Route::resource('photos','Admin\\PhotoController',[
//> 修改资源路由的默认命名
'name' => [
'index' => 'b.index',
'create'=>'b.create'
]
])
# 命名资源路由参数
# 资源路由参数:会基于资源名称的单数格式为资源路由创建路由参数
# 比如:PhotoController控制器的/photos/{photo}/edit
# 使用parameters参数覆盖Laravel资源路由这一默认设置
Route::resource('photos','Admin\\PhotoController',[
'parameters' => [
'photos' => 'bm'
]
]);
# 上面的路由也就会修改为/photo/{bm}这种形式
# 资源路由器 在使用 默认动作之外的时候
# 在使用资源路由中其他方法时,路由注册在资源路由之前
Route::get('photos/foo', 'Admins\\PhotoController@method');
Route::resource('photos', 'Admin\\PhotoController');
# 表单伪造
# 由于HTML表单不能发起PUT、PATCH、DELETE请求
# 笔者已经测试:伪造的请求;在请求头中还是以get或post请求后台服务器
{{ method_field('PUT') }} # 表单隐藏域;伪造HTTP请求时使用
# POST请求需要添加
{{ csrf_field() }}
# CSRF防护
# web.php路由中PUT、POST、DELETE的HTML表单需要一个CSRF令牌字段
<form method="POST" action="/profile">
{{ csrf_field() }}
...
</form>
- 路由参数
# 路由参数使用{}(花括号)包裹,该路由在执行时会一一对应传递到闭包函数或控制器中
# 注意:路由参数不能包含 - (中划线),使用 _ (下划线)代替
Route::get('photos/{user_id}','User\\UserController@index');
# 可选参数(路由参数)
# 可选参数 使用花括号({})包裹;在参数后面添加一个?(问号):表示该参数可选
# 可选参数 我们需要在闭包或控制器中设置默认值
# 必选参数放在可选参数的前面(这是由于默认参数一般放在后面)
# 必选参数和可选参数 和 闭包或控制器动作 (一一对应(和参数名字不必保持一致))
Route::post('photos/{id}/edit/{value?}', function($id, $value=null){});
- 命名路由
# 命名路由 为路由生成url 提供方便
# 命名路由有两种方式定义
# 1. 使用name()方法
Route::get('photos',functtion(){})->name('photos.index');
# 2. 使用as参数设置(闭包 | 控制器)
Route::put('foo',['as'=>'foo.index',function(){
//> 闭包
}]);
Route::get('foo',[
'as' => 'foo.index',
'uses' => 'Admin\\FooController@index'
]);
# 路由命名的使用
$url = route('foo.index'); //> 返回指定路由的url
# 用于重定向
redirect()->route('foo.index');
# 传递参数route
route('photo.index',['id'=>1]); 参数可以是索引(一一对应)或关联
- 路由群组(里定义的参数,在下面所有的路由中都是共享的)
# namespace 命名空间 默认 App\\Http\\Controller 在该空间后面拼接
# prefix 路由前缀:默认在域名后面紧跟该前缀
Route::group(['namespace'=>'Admin','prefix'=>'admin'],function ($route){
//> namespace:默认把空间指向 App\\Http\\Controller\\Admin
//> prefix:前缀。下面默认请求url http://www.域名/admin/p (域名后紧跟前缀)
$route->get('p','PhotoController@index')->name('p.index');
});
# 中间件(路由到控制器中间的过滤)
# middleware参数配置(中间件定义参看中间件文档)
Route::group(['middleware'=>'auth'], function($route){
//> 路由注册
# 如果我们想再次添加中间件(使用middleware方法)
$route->get('foo'.function(){})->middleware('api');
});
- 子域名路由(路由群组)
# 使用该子域名路由参数:需要改子域名存在的情况下
Route::group(['namespace'=>'Admin','prefix'=>'admin','domain'=>'{account}.bymyside.dv'],function ($route){
$route->get('p','PhotoController@index')->name('p.index');
//> 子域名
$route->get('domain', function($account){
echo $account;
});
});
- 访问当前路由
# 路由的current():获取当前访问路由的详细信息(对象)
# 路由的currentRouteName():获取当前路由的名称(就是name()设置的值)
# 路由的currentRouteAction():获取当前路由的命名空间以及控制器及方法
- 总结group和基本路由中使用的参数:
# group路由组中:
prefix(前缀)、
domain(子域名)、
namespace(命名空间)、
middleware(中间件)
# 基本路由定义参数:
as (别名)
middleware(中间件)
prefix(前缀)
namespace(命名空间)
uses(控制器定义)
- 路由模型绑定(该功能和模型有关系)
===========
网友评论