Laravel中路由怎么写(一)
1、路由基本使用示例
1.1 默认示例
Laravel中所有路由定义在/app/Http/routes.php
文件中,该文件默认定义了应用的首页路由:
Route::get('/', function () { return view('welcome'); });
这段代码的意思是:当访问应用首页http://laravel.app:8000/的时候,返回/resources/views/welcome.blade.php
视图中的内容并渲染到浏览器页面中:
1.2 GET请求路由定义
对页面常见的请求方式有GET和POST,上面这个例子就是使用GET路由的例子,接下里来我们自定义一个/hello
请求:
Route::get('/hello',function(){ return "Hello Laravel[GET]!"; });
我们在浏览器中输入http://laravel.app:8000/hello
,以上代码在浏览器中输出:
Hello Laravel[GET]!
1.3 POST请求路由示例
然后我们来演示一个POST请求的例子:
Route::get('/testPost',function(){ $csrf_token = csrf_token(); $form = <<<FORM <form action="/hello" method="POST"> <input type="hidden" name="_token" value="{$csrf_token}"> <input type="submit" value="Test"/> </form> FORM; return $form; }); Route::post('/hello',function(){ return "Hello Laravel[POST]!"; });
首先我们定义一个/testPost
页面用于提交POST请求表单,在http://laravel.app:8000/testPost
页面点击“Test”按钮,页面跳转到http://laravel.app:8000/hello
并显示:
Hello Laravel[POST]!
表明这是通过POST请求访问而非GET请求。
1.4 其它便捷路由定义
还可以使用Route
门面上的match
方法匹配多种请求方式:
Route::match(['get','post'],'/hello',function(){ return "Hello Laravel!"; });
当然还使用更方便的any
方法匹配所有请求方式:
Route::any('/hello',function(){ return "Hello Laravel!"; });
效果都一样。
2、路由参数使用示例
2.1 必选参数
Route::get('/hello/{name}',function($name){ return "Hello {$name}!"; });
在浏览器中访问http://laravel.app:8000/hello/Laravel
输出:
Hello Laravel!
当然还可以指定多个参数:
Route::get('/hello/{name}/by/{user}',function($name,$user){ return "Hello {$name} by {$user}!"; });
这样在浏览器中访问http://laravel.app:8000/hello/Laravel/by/Laravel学院
则会输出:
Hello Laravel by Laravel学院!
注意以上参数是必选的,如果没有输入参数会抛出MethodNotAllowedHttpException
或NotFoundHttpException
异常。
此外闭包函数中的参数与路由参数一一对应。
2.2 可选参数
有时候我们并不总是想要输入对应参数,也就是说,我们期望参数是可有可无的,我们通过这种方式来定义:
Route::get('/hello/{name?}',function($name="Laravel"){ return "Hello {$name}!"; });
我们同时为可选参数指定了默认值,这样当我们访问http://laravel.app:8000/hello
时输出:
Hello Laravel!
当我们访问http://laravel.app:8000/hello/Laravel学院
的时候输出:
Hello Laravel学院!
2.3 正则约束
有时候我们希望对路由有更加灵活的条件约束,可以通过正则表达式来实现:
Route::get('/hello/{name?}',function($name="Laravel"){ return "Hello {$name}!"; })->where('name','[A-Za-z]+');
该条件约束意味着$name
参数只能包含大小写字母,如果包含数字或中文就会抛出NotFoundHttpException
异常。
如果我们想要在全局范围内对参数进行条件约束,可以在RouteServiceProvider
的boot
方法中做如下定义:
public function boot(Router $router) { $router->pattern('name','[A-Za-z]+'); parent::boot($router); }
我们访问http://laravel.app:8000/hello/Laravel123/by/Laravel学院
时一样会抛出NotFoundHttpException
异常。这意味着boot
方法定义的参数条件约束将会应用到所有包含该参数的路由中。
此外,服务提供者的boot
方法在所有服务提供者的register
方法执行完毕后开始执行,也就是说,我们可以在boot
方法对任意服务容器中的对象进行依赖注入。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
2017-03-23 使用FFMPeg对视频进行处理