美文网首页
HTTP --- 路由

HTTP --- 路由

作者: 爱折腾的傻小子 | 来源:发表于2018-10-29 10:58 被阅读10次
Laravel5.3路由的书写位置:
  1. Laravel 5.3 路由被放在 routes 目录下的路由文件中

    1.routes/web.php文件,定义了web界面的路由。(这些路由被分配给web中间价租,提供session和csrf防护等功能)
    2.route/api.php文件,是无状态的,被分配到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(控制器定义)
  • 路由模型绑定(该功能和模型有关系)
===========

相关文章

  • HTTP路由

    HTTP请求/响应路由是用于决定在当前请求下,哪一个句柄去接收和响应。句柄可以是一个函数、过程或者方法,只要能够接...

  • HTTP 路由

    内置的HTTP路由器 这个路由器用于翻译每一个接收到的HTTP请求到对应的action(一个controller类...

  • HTTP --- 路由

    Laravel5.3路由的书写位置: Laravel 5.3 路由被放在 目录下的路由文件中1.文件,定义了we...

  • HTTP 路由

    最近想着手一个php框架,由大神推荐要熟悉Laravel,所以我想从他的开发者文档入手,今天在读时候猛地发...

  • Laravel 学习笔记

    路由 文件位置: app/Http/routes.php 基础路由get/post 多请求路由 路由参数 路由别名...

  • golang http 路由

    来看看 http 自带的路由功能。 阅读前留几个问题 如果要自己实现路由,该怎么做? 默认路由的结构,搜索方式是什...

  • Python基础(45) - 在Flask中如何使用动态路由

    静态路由与动态路由 路由: URL Path http://localhost/abc/test.html 中的a...

  • 服务网格-Envoy学习笔记:Envoy架构总览(6)

    HTTP 路由 Envoy 包括一个 HTTP 路由器过滤器,可以安装该过滤器来执行高级路由任务。这对于处理边缘通...

  • express 基础-内置路由的设置

    内置路由的设置 .use 与.http动词方法的区别: use用于为当前路由器加入中间件和子路由 http用于为当...

  • vue-router

    路由安装 路由配置 路由跳转 路由传参-param使用params传参只能使用name进行引入http://loc...

网友评论

      本文标题:HTTP --- 路由

      本文链接:https://www.haomeiwen.com/subject/xaappttx.html