Laravel HTTP路由基本使用及路由参数

1、路由基本使用示例
1.1 默认示例

Laravel中所有路由定义在/app/Http/routes.php文件中,该文件默认定义了应用的首页路由:

Route::get('/', function () {
    return view('welcome');
});
这段代码的意思是:当访问应用首页http://laravel.app:8000(使用Homestead虚拟机作为开发环境)的时候,返回/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方法对任意服务容器中的对象进行依赖注入。

时间: 2024-09-14 02:59:23

Laravel HTTP路由基本使用及路由参数的相关文章

htaccess-如何实现php路由分发 方法变量自定义参数名称以及个数

问题描述 如何实现php路由分发 方法变量自定义参数名称以及个数 比如有一个方法 public function a($b,$c,$d){ echo $b,$c,$d; } 要输入的链接是.......&b=1&c=2&d=3 然后输出123 这个该在.htaccess怎样写

荣耀路由Pro怎么样 荣耀路由Pro评测

今天我们就要为大家带来华为荣耀的最新力作"荣耀路由Pro". 外 观: 每款产品的测试,首先,笔者认为应该让关注者们有一个直观的了解和认识,这个第一印象就是用户对于产品的外观及设计风格有一个大至了解,只有这样才能进一步对产品是否好用提起兴趣. 提起荣耀系列产品,熟悉的人哪怕未见产品包装设计,对于外包装的颜色已然知晓,因为自荣耀系列产品推出以来,蓝色的主色调就从未离开过众人的视线,每款荣耀系列产品,几乎都选用了蓝色这个主色调,且不说包装风格,就是这深情蓝色已经吊足了粉丝胃口. 此次荣耀路

ASP.NET MVC的路由机制:命名路由

首先看一下命名路由和没有命名的差别: 命名路由: routes.MapRoute( name: "Test", // Route name url: "code/p/{action}/{id}", // URL with parameters defaults: new { controller = "Section", action = "Index", id = UrlParameter.Optional } // Par

WINDOWS实现路由之配置静态路由 图解

上一篇:启用路由功能查看静态路由表正如我们 前面提到的,在一个小型网络中,管理员通过 手动添加.修改和删除来更新路由表中的条目,如网络中添加了一个路由器,管理员需手工添加该路由器的条目到路由表中.选择"开始->"程序"->"管理工具"->"路由和远程访问",展开服务器,展开"IP路由选择",选中"静态路由表",单击鼠标右键,选择"显示IP路由选择表".如图5-

.NET/ASP.NET Routing路由(深入解析路由系统架构原理)

阅读目录: 1.开篇介绍 2.ASP.NET Routing 路由对象模型的位置 3.ASP.NET Routing 路由对象模型的入口 4.ASP.NET Routing 路由对象模型的内部结构 4.1UrlRoutingModule 对象内部结构 4.2RouteBase.Route.RouteCollection.RouteTable 路由核心对象模型 4.3RouteValueDictionary.RouteData.RequestContext 路由数据对象模型 4.4IRouteHa

路由基础知识:路由算法

路由算法可以根据多个特性来加以区分.首先,算法设计者的特定目标影响了该路由协议的操作:其次,存在着多种路由算法,每种算法对网络和路由器资源的影响都不同:最后,路由算法使用多种metric,影响到最佳路径的计算.下面的章节分析了这些路由算法的特性. 1.设计目标 路由算法通常具有下列设计目标的一个或多个: 优化 简单.低耗 健壮.稳定 快速聚合 灵活性 优化指路由算法选择最佳路径的能力,根据metric的值和权值来计算.例如有一种路由算法可能使用跳数和延迟,但可能延迟的权值要大些.当然,路由协议必

如何将静态路由发布到动态路由

打开随书光盘中第6章练习"06 将静态路由发布到动态路由.pkt",如图6-22所示,河北师大和软件学院有各自独立的网络,有独立的IT部门管理自己的网络.Router1是访问Internet的出口.河北师大的内部网络配置EIGRP协议,可以认为是一个自制系统.软件学院的内部网络配置RIP协议,可以认为是一个自制系统.Router3模拟Internet的路由器,PC4模拟Internet的一个计算机. ▲图6-22 静态路由再发布实验的网络拓扑 1.实验环境 网络中的计算机和路由器已经按

zigbee终端和路由该怎么通信,路由和协调器该怎么通信

问题描述 zigbee终端和路由该怎么通信,路由和协调器该怎么通信 网状结构,采集节点(终端1)发送数据给路由节点,路由节点再发送给协调器,协调器通过路由节点来控制另一个节点(终端2)上的继电器开关. 求大神给我一点详细的思路,最好有一小段代码供参考. 解决方案 zigbee 协调器与终端通信问题

无线路由器设置:路由列表与静态路由

1 路由列表本页显示本路由器的核心路由表.498)this.w idth=498;' onmousewheel = 'javascript:return big(this)' alt="无线路由器设置:路由列表与静态路由" src="http://images.51cto.com/files/uploadimg/20110812/1015450.jpg" />路由器的主要工作就是为 经过路由器的每个数据包寻找一条最佳传输路径,并将该数据有效地传 送到目的站点.