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学院!

注意以上参数是必选的,如果没有输入参数会抛出MethodNotAllowedHttpExceptionNotFoundHttpException异常。

此外闭包函数中的参数与路由参数一一对应。

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异常。

如果我们想要在全局范围内对参数进行条件约束,可以在RouteServiceProviderboot方法中做如下定义:

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方法对任意服务容器中的对象进行依赖注入。

Laravel中路由怎么写(一)的更多相关文章

  1. Laravel中路由怎么写(二)

    1.路由命名——给路由起个名字 1.1 基本使用 我们使用as关键字来为路由命名: Route::get('/hello/Laravel',['as'=>'academy',function() ...

  2. laravel 中路由的快速设置(只需一个控制器名就ok) 不用具体到方法

    routes/web.php 设置路由 Route::group(['middleware' => ['\iqiyi\Http\Middleware\VerifyCsrfToken::class ...

  3. [2018-01-12] laravel中的MVC

    路由里面可以做所有事情,但是真正的项目当中,路由只用来接收请求,并转发给控制器的方法进行处理 首先我们先了解一下 一.app/Http/routes路由的用法: 方法一. 这种方法写完后在控制器创建方 ...

  4. laravel中如何利用反射实现依赖注入

    依赖注入 在一个类中经常会依赖于其他的对象,先看一下经典的写法 class Foo { public $bar; public function __construct() { $this->b ...

  5. laravel基础课程---3、路由(Laravel中的常见路由有哪几种)

    laravel基础课程---3.路由(Laravel中的常见路由有哪几种) 一.总结 一句话总结: 6种:post,get,put,patch,delete,options Route::get($u ...

  6. Laravel中构造方法中不能写return!!!

    今天遇到的大坑 在laravel中 __construct 这个方法中不能写return 完全不能返回 而且还会向下执行具体原因不知道为什么解决办法!!!!用中间件来实现就可以了 Over!!!

  7. flask 中使用蓝图将路由分开写在不同文件

    flask 若想将不同的路由写在不同的文件中(如将 user 对象的相关接口写在一个文件中,将 customer 对象的相关接口写在另一个文件中),可以使用蓝图来实现. 有关蓝图的定义:A Bluep ...

  8. Laravel中的日志与上传

    PHP中的框架众多,我自己就接触了好几个.大学那会啥也不懂啥也不会,拿了一个ThinkPHP学了.也许有好多人吐槽TP,但是个人感觉不能说哪个框架好,哪个框架不好,再不好的框架你能把源码读上一遍,框架 ...

  9. [PHP] - Laravel - Route路由

    前言 这里使用的是Laravel 5 PHP Laravel的路由比较强悍,但也正因如此,不统一而容易凌乱.比如在路由中可以直接写方法操作(破坏封装啊) 以下是个人学习的例子,不供参考 路由中的直接方 ...

随机推荐

  1. Javascrit 总结

    1. 数组三种表达方法 第一种 var arr = new Array(1,2,3); document.writeln(arr+"<br/>"); 第二种 var a ...

  2. Flask web开发之路十

    首先介绍循环引用的问题: 当一个模块需要引用另一个模块的类,而另一个模块又需要引用这个模块的类时,就出现了循环引用,而没法导入类,这时候可以切断其中一条引用路径,增加一个模块 项目结构: models ...

  3. [Android实例] app引导页(背景图片切换加各个页面动画效果)(申明:来源于网络)

    [Android实例] app引导页(背景图片切换加各个页面动画效果)(申明:来源于网络) 地址: http://www.eoeandroid.com/thread-918356-1-1.html h ...

  4. MySQL数据库一个字段对应多个值得模糊查询和多个字段对应一个模糊查询

    当一个字段想模糊查询出多个字段的时候,正常情况下一般会这么作 1 select * from a where name like 'a%' or name like 'b%' ....or ...; ...

  5. hdu2328 Corporate Identity【string库使用】【暴力】【KMP】

    Corporate Identity Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  6. lsof and dynamic array in bash/shell

    https://unix.stackexchange.com/questions/171519/lsof-warning-cant-stat-fuse-gvfsd-fuse-file-system F ...

  7. 最全的MonkeyRunner自动化测试从入门到精通(2)

    一.Python环境变量的配置 步骤一:在官网进行下载python安装包,官网下载的路径:https://www.python.org/,如图所示: 步骤二:下载完成后,双击安装包,进行如下安装的界面 ...

  8. 在asp.net中使用瀑布流,无限加载

    页面中代码 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1 ...

  9. java应用零停机,时间索引重建(reindex)

    一个field的设置是不能被修改的,如果要修改一个Field,那么应该重新按照新的mapping,建立一个index,然后将数据批量查询出来,重新用bulk api写入index中 批量查询的时候,建 ...

  10. 接口测试工具-Jmeter使用笔记(五:正则表达式提取器)

    (正则表达式提取器是Jmeter关联中的一种)使用场景: 有两个HTTP请求,请求A的返回数据中有一个字段“ABCD”,该字段要作为请求B的入参. 1.添加方式 请求A上右键-->后置处理器-& ...