ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

laravel 学习笔记之路由

2020-10-14 17:03:12  阅读:140  来源: 互联网

标签:laravel name get Route 中间件 笔记 参数 路由


路由

目录

默认路由文件

  • 所有的路由文件都在 routes 目录中,主要包括 web.php 和 api.php
    • web.php 用于定义网页相关的路由,在 RouteServiceProvider 中可以看到,默认的命名空间为 'App\Http\Controllers',默认路由中间件组为 'web',位于 'App\Http\Controllers\Kernel' 的 $middlewareGroups 属性中,后续如果添加了新的中间件可以在相应位置添加
    • api.php 用于定义接口相关的路由,默认添加 api 路由前缀,默认的命名空间同样为 'App\Http\Controllers',默认路由中间件组为 'web',位于 'App\Http\Controllers\Kernel' 的 $middlewareGroups 属性中

路由参数

路由参数

参数通常放在 {} 中,并且参数名只能为字母,同时路由参数不能包含 - 符号,如果有需要,可以用下划线 (_) 代替。也可以定义多个参数。

Route::get('user/{id}', function ($id) {
    return 'User '.$id;
});
Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) {
    return $postId . '+' .$commentId;
});

路由可选参数

在参数后面加上?标记来实现可选参数,注意需要设置该参数的默认值

Route::get('user/{name?}', function ($name = 'John') {
    return $name;
});

正则表达式约束

通过 where 方法传入参数名和正则表达式进行参数格式的约束,假如参数不符合正则表达式则会报 404 错误

Route::get('hello/{name?}', function ($name) {
    return "hello " . $name;
})->where('name', '[A-Za-z]+');

路由命名

通过在路由定义上链式调用 name 方法来指定路由名称,然后使用全局辅助函数 route 来生成指定的 URL 或者重定向到指定路由(ps:个人感觉重定向用的会多一点),同时如果是有定义参数的命名路由,可以把参数作为 route 函数的第二个参数传入

Route::get('hello/{name?}', function ($name = '') {
    return "hello " . $name;
})->name('name');

//然后在需要的地方使用如下
$url = route('name', ['name' => 'John']);
echo $url;
//输出结果为:http://127.0.0.1:8000/hello/John

//重定向
return redirect()->route('name');

路由组

在定义同一个模块或者功能下的路由时,可以使用 Route::group 创建路由组来定义共同的路由属性,例如:中间件、路由前缀、命名空间等。

Route::namespace('User')->group(function () {
    Route::get('user/{id}', 'UserController@getUser');
    Route::get('list', 'UserController@getUserList');
});

路由中间件

在 group 之前使用 middleware 方法来为路由组中的全部路由指定中间件,中间件执行顺序为数组中的顺序

Route::middleware(['first', 'second'])->group(function () {
    //下面的路由使用 first 和 second 两个中间件
    Route::get('user/{id}', 'UserController@getUser');
    Route::get('list', 'UserController@getUserList');
});

命名空间

在 group 之前使用 namespace 方法将命名空间分配给路由组中的全部路由,且默认情况下,RouteServiceProvider 会在命名空间组中引入你的路由文件,默认为 App\Http\Controllers

Route::namespace('User')->group(function () {
    //完整命名空间为:App\Http\Controllers\User
    Route::get('user/{id}', 'UserController@getUser');
    Route::get('list', 'UserController@getUserList');
});

//用户可以通过访问 http://127.0.0.1:8000/user/5 访问相应路由

路由前缀

在 group 之前使用 prefix 方法为路由组设置路有前缀

Route::prefix('User')->namespace('User')->group(function () {
    //完整命名空间为:App\Http\Controllers\User
    Route::get('user/{id}', 'UserController@getUser');
    Route::get('list', 'UserController@getUserList');
});

//用户可以通过访问 http://127.0.0.1:8000/User/user/5 访问相应路由

标签:laravel,name,get,Route,中间件,笔记,参数,路由
来源: https://www.cnblogs.com/weibofang/p/13815847.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有