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. Page Visibility API 页面是否获取焦点 Event: visibilitychange

    W3C 文档 https://www.w3.org/TR/page-visibility/ MDN 文档 https://www.w3.org/TR/page-visibility/ // Docum ...

  2. win10 远程出现身份验证错误 要求的函数不受支持

    win10的一个更新的bug 解决方案 http://note.youdao.com/noteshare?id=68aa9de9fbf46c50a097b3ccf7994580&sub=5AF ...

  3. TOP100summit:【分享实录-Microsoft】基于Kafka与Spark的实时大数据质量监控平台

    本篇文章内容来自2016年TOP100summit Microsoft资深产品经理邢国冬的案例分享.编辑:Cynthia 邢国冬(Tony Xing):Microsoft资深产品经理.负责微软应用与服 ...

  4. .NET Core开发日志——Entity Framework与PostgreSQL

    Entity Framework在.NET Core中被命名为Entity Framework Core.虽然一般会用于对SQL Server数据库进行数据操作,但其实它还支持其它数据库,这里就以Po ...

  5. DSO论文解读

    dso 1.1. Motivation 本文提出的单目视觉测距法的直接和稀疏公式是出于以下考虑因素; (1)直接: 关键点的主要优点之一是它们能够为使用现成的商品相机拍摄的图像中存在的光度和几何失真提 ...

  6. [No0000164]C#,科学计数法的哽

    NewString = Decimal.Parse(OldString, System.Globalization.NumberStyles.Float).ToString(); //Convert. ...

  7. [No0000D3]bat当前路径currentPath.bat

    @echo off echo 当前盘符:%~d0 echo 当前盘符和路径:%~dp0 echo 当前批处理全路径:%~f0 echo 当前盘符和路径的短文件名格式:%~sdp0 echo 当前CMD ...

  8. 利用Python的collections包下Counter的类统计每个数据出现的个数

    from collections import Counter a = [1, 2, 3, 1, 1, 2] result = Counter(a) print result 输出: {1: 3, 2 ...

  9. D. Who killed Cock Robin 湖北省大学程序设计竞赛

    链接:https://www.nowcoder.com/acm/contest/104/C来源:牛客网 The Sparrow is for trial, at next bird assizes,w ...

  10. Verilog HDL语言实现的单周期CPU设计(全部代码及其注释)

    写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:ht ...