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. Latest China Scam: I've Been Arrested in the Brothel Crackdown!

    Latest China Scam: I've Been Arrested in the Brothel Crackdown! If the sex industry is fastest to se ...

  2. SQL命令中的case...when...then...else...end条件查询

    select b.XH, b.ZBXH, a.SJKSMC, a.JCRQ, a.JYRQ, a.JCJBMC, a.CYZMC,                               b.CY ...

  3. 线程同步-使用CountDownEvent类

    CountDownEvent类:信号类,等待直到一定数量的操作完成. 代码Demo: using System; using System.Threading; Main方法下面加入以下代码片段: p ...

  4. H. GSS and Simple Math Problem 高精度乘法模板

    链接:https://www.nowcoder.com/acm/contest/104/G来源:牛客网 题目描述 Given n positive integers , your task is to ...

  5. css中display:inline-block display:-moz-inline-box display:-moz-inline-stack 的区别

    很多时候我们必须使一些块元素并排显示,一般想到的是必须使用浮动,但是块元素浮动给边距(margin)的时候在IE下会出现加倍的BUG,所以很多时候不得不把这个块元素套在一个内联元素里面,然后给内联元素 ...

  6. shell之awk面试小案例

    [root@chavinking mnt]# cat textfile chavinking 1 2 3 4 5 6 nope 1 2 3 4 5 6 [root@chavinking mnt]# c ...

  7. C-Free 5 安装 [Error] G__~1.EXE: (x86)\C-FREE~1\mingw\mingw32\bin\: No such file or directory

    解决[Error] g++.exe: 5\mingw\include: No such file or directory - 陆总的博客 - CSDN博客 https://blog.csdn.net ...

  8. MiniHook研究

    git hub 地址: https://github.com/RaMMicHaeL/minhook

  9. 部署WEB项目到服务器(一)安装java到linux服务器(Ubuntu)详解

    突发奇想,想在自己电脑上部署一个web网站. 1,首先要下载一个适合已经安装的linux系统的java版本. 登录网址:http://www.oracle.com/technetwork/java/j ...

  10. spark学习笔记3

    Spark 支持在集群范围内将数据集缓存至每一个节点的内存中,可避免数据传输,当数据需要重复访问时这个特征非常有用,例如查询体积小的“热”数据集,或是运行如 PageRank 的迭代算法.调用 cac ...