掘金 后端 ( ) • 2024-04-03 11:21

theme: lilsnake highlight: xt256

路由

一、什么是路由

  1. 在网络通信中,“路由”是一个网络层面的术语,它是指从某一网络设备出发去往某个目的地的路径。
  2. 在网站开发中,路由的本质就是一种对应关系,例如,在浏览器地址栏中输入要访问的URL 地址后,浏览器要去请求这个URL 地址对应的资源。那么URL 地址和真实的资源之间就存在一种对应关系,这就是路由。

二、配置路由

  1. Laravel 框架的路由需要在routes\web.php 文件中进行配置,将该文件打开后,会看到里面已经添加了一个路由配置。

    image-20240311150819355.png

  2. 定义路由的完整语法格式如下:

    Route::请求方式('请求url', 匿名函数或控制器相应的方法);
    

    例子

    Route::get('/hello',function(){
        return 'hello';
    });
    

    如果在浏览器访问http://127.0.0.1/hello,出现一下情况

    image-20240311150540191.png

    就是表明没有添加伪静态 修改网站目录下的.htaccess文件添加以下内容

    image-20240318100840513.png

     <IfModule mod_rewrite.c>
        <IfModule mod_negotiation.c>
            Options -MultiViews -Indexes
        </IfModule>
    
        RewriteEngine On
    
        # Handle Authorization Header
        RewriteCond %{HTTP:Authorization} .
        RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    
        # Redirect Trailing Slashes If Not A Folder...
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_URI} (.+)/$
        RewriteRule ^ %1 [L,R=301]
    
        # Send Requests To Front Controller...
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^ index.php [L]
    </IfModule>
    

    访问成功

    image-20240311150643286.png

  3. 请求方式可以是get、post、put、patch、delete和options,其中, get 方式是直接请求URL时默认使用的方式,post是提交表单时常用的方式。

  4. 匹配get和post请求方式

    Route::match()用于在一个路由中同时匹配多个请求方式。

    Route::any()用于在一个路由中匹配任意请求方式。

    // 同时匹配get和post请求方式
    Route::match(['get','post'],'/text',function(){
       return '通过match()匹配';
    });
    
    Route::any('/text1',function(){
       return '通过any()匹配';
    });
    

三、路由参数

Laravel 允许在请求URI 中传递一些动态的参数,称为路由参数。通过路由参数可以传递一些请求的信息

路由参数分为必选参数和可选参数,必选参数的语法为“{参数名}”,而可选参数的语法为“{参数名?}

3.1 必选参数路由

//必选参数
Route::any('find/{id}',function($id){
    return '输入的ID为'.$id;
});

image-20240319143819785.png

3.2 可选参数路由

//可选参数
Route::any('find2/{id?}',function($id=0){
  return '输入的ID为'.$id;
});

image-20240319143921603.png

四、重定向路由

重定向路由用于实现页面跳转。

4.1 语法格式

定义重定向路由使用Route::redirect()方法,语法格式如下。

Route::redirect('请求URI', '重定向URI' [,'状态码']);

- redirect表示实现路由重定向。

- 状态码是可选参数,默认状态码是302。

4.2 示例

将路由“hello”重定向到“/”。

Route::redirect('/hello','/');

image-20240319145235973.png

五、路由别名

  1. 路由别名用于在定义路由的时候,为路由起一个别名。

  2. 设置别名后,当在其他地方用到这个路由地址时(如模板中的各种超链接),可以不用书写原来的地址,而是通过别名来引用这个地址。

  3. 如果不设置路由别名,当修改路由地址时,可能有很多地方的代码都使用了这个地址,这些代码都需要修改会非常麻烦

例子

修改以下文件

welcome.blade.php

<a href="/hello/123">123</a>             //改变则无效
<a href="{{route('123')}}">123pli=us</a>  //改变有效果

web.php

Route::get('/hello/123/452', function () {
    return '123';
})->name(123);

image-20240319151021870.png

六、路由分组

为了便于路由的管理,对路由进行分组,分组后,可以对一组路由统一进行管理。

6.1语法格式

Route::group(公共属性数组, 回调函数)

Route::group(公共属性数组, 回调函数)

6.2 代码示例

//路由分组
Route::group(['prefix'=>'admin'], function () {
    Route::get('/hello', function () {
        return '这是/admin/hello';
    });
    Route::get('/login', function () {
        return '/admin/login';
    });
    Route::get('/index', function () {
        return '/admin/index';
    });
});

image-20240319160055840.png


知识共享许可协议转存失败,建议直接上传图片文件