laravel路由

2023-11-19

路由

在laravel中,定义路由的地方在routes/web.php文件中。在使用laravel前必须先定义路由,然后才能在浏览器中访问。routes文件夹中还有一个api.php,用于定义api路径。

最简单的路由:

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

此时在浏览器中,输入localhost,就可以看到输出的字符串。

使用MVC模式时,我们一般先定义路由,然后在路由中访问控制器中的方法,控制器中的方法返回响应的视图,此时我们可以定义路由,如下:

Route::get('/','IndexController@index');

其中IndexController是控制器类,index是控制器类中的方法,index方法中可以定义返回的视图。

路由动作

上面Route::get语法只能处理get请求,laravel定义了其他请求路由的方法:

Route::post('/',function(){});
Route::put('/',function(){});
Route::delete('/',function(){});

还可以使用通用方法(不推荐使用):

Route::any('/',function(){});

我们还可以通过Route::match定义几种特定请求方法:

Route::match(['get','post'],'/',function(){});

路由参数

在laravel中还可以定义路由参数:

Route::get('post/{id}',function($id){
    return "文章ID: ".$id;
});

此时,通过localhost/post/100,就可以访问id=100的文章。还可以定义可选路由参数:

Route::get('post/{id?}',function($id=1){
    return "文章ID: ".$id;
});

如果访问localhost/post/就会返回id=1的文章

还可以为路由参数指定正则表达式,约束路由参数范围:

//id只能是数字
Route::get('page/{id}', function ($id) {
    return '页面ID: ' . $id;
})->where('id', '[0-9]+');

//name只能是大小写字母
Route::get('page/{name}', function ($name) {
    return '页面名称: ' . $name;
})->where('name', '[A-Za-z]+');

//定义多个路由参数约束规则
Route::get('page/{id}/{slug}', function ($id, $slug) {
    return $id . ':' . $slug;
})->where(['id' => '[0-9]+', 'slug' => '[A-Za-z]+']);

路由命名

为路由起名,主要是为了在控制器或者视图类中引用。路由命名示例如下:

Route::get('user/{id?}', function ($id = 1) {
    return "用户ID: " . $id;
})->name('user.profile');

此时在视图中,就可以使用命名路由:

<a href="{{ route('user.profile', ['id' => 100]) }}">
// 输出:http://blog.test/user/100

路由分组

在网络应用程序中,我们可以给路由分组,比如前后台分组,还可以根据其他特征,比如路由前缀、子域名、控制器命名空间、是否使用相同的中间件等。
定义路由分组,主要是为了让代码可读性更好,便于维护。

根据命名空间分组

//前台路由组
Route::group(['namespace' => 'Home'], function(){
    // 控制器在 "App\Http\Controllers\Home" 命名空间下
    Route::get('/', 'IndexController@index');
});

//后台路由组
Route::group(['namespace' => 'Admin', 'prefix' => 'admin'], function(){
    // 控制器在 "App\Http\Controllers\Admin" 命名空间下
    Route::get('/', 'AdminController@index');
});

// 或者用另外一种写法:
Route::namespace('Admin')->prefix('admin')->group(function() {
     // App\Http\Controllers\Admin\AdminController
     Route::get('/', 'AdminController@index');
});

此时访问 domain(你的域名)即可访问前台,domain/admin 即可访问admin后台

中间件

中间件是对请求的一种过滤或重定向功能,比如认证中间件,只有通过认证才能通过某些路由访问相应的功能。不同的路由可以通过相同的中间件进行分组:

Route::middleware('auth')->group(function () {
    Route::get('dashboard', function () {
        return view('dashboard');
    });
    Route::get('account', function () {
        return view('account');
    });
});

上面使用dashboard,account两个路由时,必须通过认证。

路由路径前缀

某些路由可以定义相同的前缀便于区分功能,可以使用Route::prefix对路由进行分组:

Route::prefix('api')->group(function () {
    Route::get('/', function () {
        // 处理 /api 路由
    })->name('api.index');
    Route::get('users', function () {
        // 处理 /api/users 路由
    })->name('api.users');
});

子域名路由

在laravel中,可以为不同的应用子系统设置不同的子域名,这时可以通过设置子域名路由访问不同的子系统:

Route::domain('test.blog.com')->group(function () {
    Route::get('/', function () {
        // 处理 http://test.blog.com 路由
    });
});

还可以通过参数方式设置子域名,适用于网站拥有多租户的场景,比如建站系统,多家公司通过定义二级域名访问自己的网站。

Route::domain('{account}.yoursite.com')->group(function () {
    Route::get('/', function ($account) {
        //
    });
    Route::get('user/{id}', function ($account, $id) {
        //
    });
});

注意:这种情况下,$account永远是所有分组路由的第一个路由参数。

路由命名前缀

除了通过上述共同特征对路由进行分组外,对于某一类资源路由,比如用户,往往拥有相同的路由命名前缀,如 user.,我们还可以基于这一特征对路由进行分组,使用 Route::name 方法即可实现:

// 路由命名+路径前缀
Route::name('user.')->prefix('user')->group(function () {
    Route::get('{id?}', function ($id = 1) {
        // 处理 /user/{id} 路由,路由命名为 user.show
        return route('user.show');
    })->name('show');
    Route::get('posts', function () {
        // 处理 /user/posts 路由,路由命名为 user.posts
    })->name('posts');
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

laravel路由 的相关文章

  • Laravel Sanctum + Nuxt JS 我无法通过 CORS

    在开始之前 我想说我搜索并尝试了很多方法 但似乎没有一个能正常工作 我还创建了一个新的 Laravel 安装 但仍然没有成功 问题是 CORS 我总是被 CORS 阻止 该设置使用Laravel Valet Laravel 应用程序运行于h
  • 如何在 Laravel 5.4 中播种数据透视表?

    我正在关注 Jeffrey Way 撰写的名为 Laracasts 中的增量 API 的教程 Laravel 4 faker 类播种和 Laravel 5 4 之间有不同的编码 我仍然遵循教程 Seeders Reloaded 中的相同代码
  • Laravel 5.4 合并两个集合

    所以我有两个收藏 sales and costs 现在我需要将它们合并为我的一个集合foreach状况 我不确定是否可以在一个集合中使用两个集合foreach 原始查询 Raw MySQL Queries for Sales total s
  • ajax 请求中的 laravel TokenMismatchException

    我正在使用资源组并使用此过滤器来解析TokenMismatchException问题 Route filter csrf function route request if strtoupper request gt getMethod G
  • Laravel 集合包含

    我正在使用 Laravelcontains集合上的方法https laravel com docs 5 3 collections method contains https laravel com docs 5 3 collections
  • 如何在 Laravel 中动态更改 .env 文件中的变量?

    我想创建一个 Laravel Web 应用程序 允许管理员用户使用 Web 后端系统更改 env 文件中的某些变量 例如数据库凭据 但如何保存更改呢 没有内置的方法可以做到这一点 如果您确实想更改其中的内容 env文件 您必须结合 PHP
  • 如何从laravel 5.1中的公共文件夹中删除文件

    我想从数据库中删除新闻 当我点击删除按钮时 数据库中的所有数据都会被删除 但图像仍保留在上传文件夹中 那么 我该如何工作呢 谢谢 这又是我的功能 但不会从公共目录的 images news 文件夹中删除图像 gt public functi
  • Laravel 模型访问器从缓存中获取 - 性能增强

    我在数据库中有一个项目列表 每个项目都可以选择被否决或赞成 这些投票与其他项目字段一起存储在 MySql 中 例如这样的事情 Schema create items function table table gt increments id
  • “路径不能为空”laravel

    我想将 pdf 文件保存在存储文件夹中 但是当我在表单中插入文件并单击按钮时 它会显示错误 路径不能为空 然而 路径并不空 这是我可以执行此操作的函数 public function getFilenametostore Request r
  • “stream_socket_enable_crypto():对等证书 CN=`gains.nanosupercloud.com' 与共享托管中预期的 CN=`smtp.sendgrid.net' 不匹配”

    我在 laravel 从事邮件工作 我有以下配置 MAIL DRIVER smtp MAIL HOST smtp sendgrid net MAIL PORT 587 MAIL USERNAME MAIL PASSWORD MAIL ENC
  • Laravel - 检查 @yield 是否为空

    如果 yield 有内容 是否可以检查刀片视图 我正在尝试在视图中分配页面标题 section title hi world 所以我想检查主布局视图 类似 对于现在 2018 年以上 查看的人 您可以使用 hasSection name y
  • Laravel 5.3 Schema::create ENUM 字段是 VARCHAR

    我刚刚创建了新的迁移 运行后我看到了我的领域type 不是 ENUM 类型 它有一个改为 VARCHAR 255 类型 Schema create payments function Blueprint table table gt inc
  • Laravel 完整日历

    我正在尝试按照本教程进行操作https laravelcode com post laravel full calendar tutorial example using maddhatter laravel fullcalendar ht
  • node npm run watch 退出状态 3221225725

    我必须格式化我的驱动器 但我的一个项目不再工作 所有其他相同类型的项目都运行良好 这是 Laravel Vue JS 问题是我无法运行 npm run watch dev 或 production 他们都给出了错误 拉拉维尔 5 7 npm
  • 特定文件夹的 .htaccess 例外

    这是我的 htaccess 代码 位于根文件夹中
  • laravel 4 登录验证失败

    在 Laravel4 中 我在路由中编写了以下代码 但它总是将我重定向到登录页面 我用谷歌搜索并在堆栈溢出上找到了它 并尝试了所有解决方案但没有成功 我确信这将是一个愚蠢的错误 但请跟踪它 谢谢 Routes Route post logi
  • 如何使用 Laravel Eloquent 返回多重关系?

    我有一张桌子叫users 每个用户都有不同的事情 country device computer category 我为上述每一个 事物 创建了一个表格 类似如下 1 United States 2 United Kingdom 3 Aus
  • Laravel,从 JSON 中删除 null Eloquent 对象属性

    有没有一种优雅的方法从 Eloquent 对象中删除 NULL 值 我的对象嵌套有关系 这个特定的调用可能会长达数千行 所以我尝试这样做的主要原因是为用户节省带宽 但服务器性能也是一个考虑因素 My code data locations
  • Laravel leftJoin 仅右表的最后一条记录

    我是 Laravel 的新手 我有两张桌子 1 产品 2 价格 products id product int p key name varchar prices id price int p key id product int
  • 分页在服务器端好还是前端好? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在构建 Laravel Vue 应用程序 我想知道在后端使用分页还是在前端使用分页更好 我认为最好在每页发送尽可能少的数据的请求 但我想听听

随机推荐

  • 数据表数据迁移——复制一个表的数据到另外一个表

    通过 SQL 你可以从一个表复制信息到另一个表 MySQL 数据库不支持 SELECT INTO 语句 但支持 INSERT INTO SELECT 1 SQL SELECT INTO 语法 SELECT INTO 语句从一个表复制数据 然
  • App登录状态维持

    转载地址 http www jianshu com p 4b6b04244773 目前APP大都支持长登录 就是用户登录一次后 如果用户没有主动注销 清除APP缓存数据或卸载APP 就在一段时间内或一直保持登录状态 一般情况下 有以下三种方
  • log4j升级log4j2

    项目版本统一升级 主要就是三点一 去除log4j原来的相关的引用 具体是这几个包 maven相关就找对应名字就对了 这些都是关于log4j1的二 添加新的log4j2的相关引用 其中 来源https blog csdn net catoop
  • 漫画:什么是 CAS 机制?

    https blog csdn net bjweimengshu article details 78949435点击上方 程序员小灰 选择 置顶公众号 有趣有内涵的文章第一时间送达 第二天
  • Apollo注册到自己的Eureka注册中心+配置中心集群(超详细)

    重要提示 在任何步骤开始之前 谨记下面的东西 在对apollo master这个文件进行处理的时候 要找到文件夹scripts下的文件build bat 苹果用户请找到build sh 并且在最开始的时候运行上述两个文件 在工程文件夹下 s
  • linux升级openssh9

    下载 下载 libressl 3 5 3 tar gz openssh 9 0p1 tar gz zlib 1 2 12 tar gz 放到 usr local 目录下 链接 https pan baidu com s 1ZCyDDmJ5h
  • 华为OD机试 - 分糖果(Java & C)

    题目描述 小明从糖果盒中随意抓一把糖果 每次小明会取出一半的糖果分给同学们 当糖果不能平均分配时 小明可以选择从糖果盒中 假设盒中糖果足够 取出一个糖果或放回一个糖果 小明最少需要多少次 取出 放回和平均分配均记一次 能将手中糖果分至只剩一
  • 【AcDbRegion::createFromCurves】

    public static class AcRxClass cdecl AcDbRegion desc void desc AcDbRegion SAPEAVAcRxClass XZ 函数 public static enum Acad E
  • 掌握Python的X篇_18_字典(通过“{}“定义一个字典)

    文章目录 1 字典是什么 2 字典的基本操作 2 1 定义字典 2 2 添加元素 2 3 通过Key引用value 2 4 删除元素 2 5 遍历字典中元素 1 字典是什么 list作为容器已经非常方便 但是引用list中的元素是依赖下标
  • 第十二章_Redis单线程 VS 多线程

    Redis为什么选择单线程 是什么 这种问法其实并不严谨 为啥这么说呢 Redis的版本很多3 x 4 x 6 x 版本不同架构也是不同的 不限定版本问是否单线程也不太严谨 1 版本3 x 最早版本 也就是大家口口相传的redis是单线程
  • 史上最全 ——LINQ to SQL语句

    适用场景 实现过滤 查询等功能 说明 与SQL命令中的Where作用相似 都是起到范围限定也就是过滤作用的 而判断条件就是它后面所接的子句 Where操作包括3种形式 分别为简单形式 关系条件形式 First 形式 下面分别用实例举例下 1
  • 单片机中常用的C语言编程

    单片机内部集成了CPU RAM ROM 定时器 中断系统 通讯接口等一系列电脑的常用硬件功能 其任务是信息采集 依靠传感器 处理 依靠CPU 和硬件设备 例如电机 LED等 的控制 在给单片机输入灵魂时常使用C语言进行编程 本文以keil
  • C++基础——引用讲解1

    目录 6 1 引用概念 1 定义 2 引用的格式 2 引用的特性 三 引用的用法 1 有了引用 就不需要取地址了 2 引用的另一大用法 引用这么强的功能 能不能代替指针 6 1 引用概念 1 定义 引用不是新定义一个变量 而是给已存在的变量
  • python日志(2)——logging

    python日志 2 logging进阶 文章目录 python日志 2 logging进阶 一 logging的四大组件 1 logger 2 Handler 3 Formatter 二 输出日志的常用方式 总结 一 logging的四大
  • x86寄存器

    通用寄存器 GPR寄存器 AX Accumulator 累加寄存器 也叫累加器 BX Base 基地址寄存器 CX Count 计数器寄存器 DX Data 数据寄存器 指针寄存器 SP Stack Pointer 堆栈指针寄存器 BP B
  • 47 转置卷积 [动手学深度学习v2]

    转置卷积 卷积不会增大输入的高宽 通常要么不变 要么减半 转置卷积则可以用来增大输入高宽 Y i i
  • 测试自动化框架平台选型汇总篇

    本文介绍测试自动化常用的框架和平台 语言为python或javascript 无java UI自动化 python pytest playwright 文章 http t csdn cn 2dMF5 python selenium unit
  • 计算机英语·NO

    N n 换行符 name demanding 名字恢复 name mangling 名字毁坏 nanoseconds ns 纳秒 neg operations neg操作 negation two s complement 非 二进制补码的
  • 【电商】电商后台设计—订单中心

    订单系统连接了用户和商家 用户可以通过订单看到商品购买详情 商家则可以通过订单看到购买用户信息等 而整个订单系统囊括了许多模块 如订单生成 订单计算等 一 订单的生成与状态 1 下单过程 电商下单的过程相信大家都不陌生 我们以从购物车下单为
  • laravel路由

    路由 在laravel中 定义路由的地方在routes web php文件中 在使用laravel前必须先定义路由 然后才能在浏览器中访问 routes文件夹中还有一个api php 用于定义api路径 最简单的路由 Route get f