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 雄辩的 withCount() 应该比 with() 慢

    所以我问这个的原因是在我当前的应用程序中withCount 与仅通过以下方式获取关系的所有数据相比 响应时间几乎增加了三倍with 并只是从前端获取长度 javascript 我认为使用的要点withCount 是为了加快查询速度 但也许我
  • /bootstrap/start.php 中的 Laravel 错误:\Illuminate\Foundation\Application 未找到

    因此 我在开发服务器上安装了 Laravel php5 5 3 标准安装 安装了 mcrypt 并收到以下错误消息 Fatal error Class Illuminate Foundation Application not found
  • laravel Blade 模板不渲染

    进入 Laravel 后 我尝试使用 Blade 模板 但它没有渲染 我的所有示例都来自 Laravel 文档 UPDATE 所以这是我的master blade php 文件位于资源 gt 视图 gt master blade php y
  • 在 Ubuntu 16.04 中创建虚拟主机

    我已经开始在 laravel 中工作并使用 lampp 我看过很多使用虚拟主机来制作用户友好的 url 的教程 我想在 Ubuntu 16 04 上执行此操作 以下教程对我不起作用 https ourcodeworld com articl
  • Laravel:如何设置多对多关系的连接?

    我有模型 class User extends Model protected connection mysql public function areas return this gt belongsToMany Area class u
  • 如何在 Laravel 中基于 application/json 标头加载路由

    我正在使用application json标头来控制我的控制器在收到请求时的行为 我需要在单元测试中的 POST 中包含application json header 我试过了 public function testStore this
  • Laravel 5.3 Eloquent 事务和外键限制

    我正在从事一个更大的项目 我们在一个 Postgres 数据库中有多个模式 我们在模式之间创建了外键 这是一个例子 gt 我们有公司模式和用户模式 公司模式有company users表 该表对user users表有外键限制 CREATE
  • laravel cron 使用错误

    Laravel 错误 cron 使用 usr bin php home sitevk artisan 计划 运行 1 gt gt dev null 2 gt 1 应用 控制台 内核 use Illuminate Console Schedu
  • 将策略应用到资源控制器

    我有一个CRUD资源定义通过Route resource User UserController 既然可以生成CRUDGates and Policies 有没有办法应用这样的Gate Policy 以便将相应的Gate Policy应用于
  • Laravel:使用 Faker 播种多个独特的列

    介绍 怎么样 伙计们 我有一个关于模型工厂和多个独特列的问题 背景 我有一个名为 Image 的模型 该模型将语言支持存储在单独的模型中 图片文字 图片文字 has an image id栏 语言栏和文本栏 图片文字有一个约束MySQL那个
  • 在 laravel 中禁用特定路由的 csrf

    我有一个支付系统 数据被提交到第三方网站然后被拉回 当数据返回时 它会到达特定的 url 比如 ok 路由 REQUEST transaction 但由于 Laravel 中间件 我遇到了令牌不匹配的情况 第三方支付API无法生成token
  • Laravel 意外错误“类用户包含 3 个抽象方法...”

    在 Laravel 上编写我的身份验证应用程序时 我遇到了一个以前从未见过的错误 我已经集思广益了近一个小时来解决这个问题的原因 但仍然找不到解决方案 Error User 类包含 3 个抽象方法 因此必须声明为抽象方法或实现其余方法 Il
  • laravel中过滤后如何导出excel?

    我想仅导出视图刀片中过滤的数据 我正在使用 Laravel 7 和 maatwebsite excel 3 1 和 PHP 7 4 2 我浏览了文档并应用了这个 View a href class btn btn success i cla
  • 拉拉维尔; “SQLSTATE[HY000] [2002] 连接被拒绝”

    我在 OSX 主机上设置了 homestead 2 0 并使用 Sequel Pro 我可以进行迁移并确认数据已在Sequel Pro中迁移 因此看起来数据库连接没有问题 但是 一旦我尝试从 Laravel 4 2 应用程序获取数据 它就无
  • 在 Laravel 中按数据透视表 create_at 排序

    在我的数据库中 我有以下表格 courses id 名称 创建时间 更新时间 students id 名称 创建时间 更新时间 课程 学生 id course id student id created at updated at 我正在尝
  • Laravel - 停止并发访问记录

    在 Laravel 中 有什么方法可以停止同时与同一条记录交互 例如 如果用户 A 正在编辑一条记录 那么我同时需要阻止用户 B 编辑同一条记录 注意 我在 Laravel 5 2 中使用 SESSION DRIVER file 目前大约有
  • Laravel Vue js spa 应用程序

    1 我想知道为什么人们使用两台服务器用 laravel 制作 vuejs SPA 我想我们可以用另一种方式 制定这样的路线 Route get any function return view index gt where any 并让 v
  • 如何从导出的 csv 文件中删除双引号

    我正在使用 Laravel 5 8 并且添加了 Maatwebsite 包 用于从数据库表导出 CSV 文件 这是我导出的类 class ConfirmedExport implements FromCollection WithHeadi
  • Laravel 5.2 带有可变参数的命名路由用法

    我有这样的路线 Open New Subscription page Route get account subscriptions create menu uses gt Subscriptions SubscriptionControl
  • Laravel/00webhost 错误 404。在此服务器上找不到请求的 URL

    1 将我的文件上传到 000webhost 我将公用文件夹中的所有文件放置到公共 html然后我创建了一个名为laravel我在那里上传了所有其他文件 这是我的目录结构 laravel app 引导程序 config 公共 html 索引

随机推荐

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

    通过 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