首页 > 代码库 > laravel5.1基础路由的使用
laravel5.1基础路由的使用
路由的理解
我们所了解的很多框架通常都有自己有路由的定义规则,个人觉得Thinkphp是一个更容易让新手去接触和学习的一个框架。然而在TP中的默认路由规则是http://www.itbool.com/Model/Controller/Action,假如我们访问一个地址是http://www.itbool.com/Home/Index/index,默认请求会去访问Home模块下的Indexcontroller控制器类下的index方法,说到这里呢,这是在TP框架中路由的使用。
从上述中去理解,个人觉得在TP框架中定义的路由规范可以直接拿出来使用,非常的容易去理解,但是使用起来呢很不灵活,因为我们必须要遵循TP中的那种规范,比如说我想要通过向http://www.itbool.com/Admin/article/addPOST一个数据以添加一篇文章,处理这个过程的实际是Admin\TopicControlle类的create方法,且该方法只接受POST请求,这时候似乎大多数框架就要通过写更多的代码实现了。
上述呢,是在TP中路由的一种定义规范,但是相比于laravel呢?
laravel中路由的定义
1,简单的说就是将用户的请求转发给相应的程序去处理
2,作用建立url和程序之间的映射
3,请求类型get,put,post,patch,delete等
laravel的路由器与控制器的关系,需要明确的在<project>/app/Http/routes.php
下面呢,我们一起来学西laravel中的路由
基础路由
格式如下
/* 用Get方式去请求Home/index这个地址的时候,用匿名函数响应 */ Route::get(‘Home/index‘,function(){ return ‘hello world‘; }); 地址栏上可以这样去访问 http://www.itbool.com/Home/index /* 用post方式去请求Home/index这个地址的时候,用匿名函数响应 */ Route::post(‘Home/index‘,function(){ return ‘hello world‘; }); 这样如果在地址栏上去访问的话,会报错,因为我们使用post方式去提交,所以当我们去提交form 表单的时候,我们定义的这条路由才起作用
多请求路由
比如我们在注册或者登陆页面的时候呢,我们需要用Get方式去获取页面,然后用POST方式去提交,但是它响应的是一条路由,只不过方式不同
遇到这样的情况,怎么办呢?难道去定义两条路由,这样是不是增加了代码量呢?
我们可以这样解决
格式如下
/* match方法是laravel自己封装好的,同样它的意思是匹配 */ Route::match([‘get,post],‘admin/login‘,function(){ return ‘login‘; }); /* 在这里呢我们可以用match这个方法去匹配两种请求方式,这样是不是减少了代码量呢 */ 我们还有第二种方法, /* GET,POST,PUT,DELETE.. 任何方法访问 www.itbool.com/Admin/login, 都用第2个参数中的匿名函数去响应 . */ Route::any(‘Admin/login‘,function(){ return ‘hello world‘; });
路由传参
以上呢就是在laravel中路由用法,用匿名函数去相应,但是怎么去传参呢,下面呢我们去分析:
```php
/* 路由传递参数, */ Route::get(‘user/{id}‘,function($id){ return ‘user_‘.$id; }); 地址栏上访问 http://www.itbool.com/user/定义的数值
laravel的路由不仅可以这样传递参数,还可以的传递可选参数
如下 Route::get(‘user/{name}‘,function($name = null){ return ‘user_‘.$name; }); 如果我们去访问,http://www.itbool.com/user 会返回 user_ 如果我们去访问,http://www.itbool.com/user/定义的名字 会返回user_+定义的名字
路由限制
在tp框架中,假如我们想要去验证一些字段,那我们必须要去用tp的自动验证,但是在laravel中是不用的,我们直接可以在路由中做限制
普通形式 ->where(‘要限制的参数名‘,‘限制规则(正则,不用斜线//)‘); 数组形式 ->where([‘要限制的参数名1‘=>‘限制规则1(正则,不用斜线//)‘,‘要限制的参数名2‘=>‘限制规则2(正则,不用斜线//)‘]); Route::get(‘user/name‘,function($name){ return ‘user_‘.$name; })->where(‘name‘,‘[A-Za-z]+‘); 只需要在路由后加where 两个参数, 第一个是验证的字段,第二个是你验证的规则 传递多个参数的定义 Route::get(‘user/{name}/{id}‘,function($name,$id){ return ‘user_‘.$name.$id; })->where([‘name‘=>‘[A-Za-z]+‘,‘id‘=>‘[0-9]+‘]);
控制器与路由
因为我们在做一些项目的时候呢,功能区域呢是依靠我们的控制器中的方法去相应,那么在laravel中路由与控制器怎么使用呢?那么我们下面一起看一下
我希望通过http://www.itbool.com/访问Home模块下IndexController类的index方法,应该这样定义一条路由:
Route::get(‘Home/index‘,‘Home\Indexcontroller@index‘);
例子很简单,但是会遇到这样的问题
这些呢就是laravel定义路由的简单使用,那么我们在回到上述中的TP的路由规范,两者对比,
在laravel中的定义,我们可以看出虽然laravel没有强加给你既定的路由规则,但你拥有了更多定制的权利,并且laravel定义路由的方式非常优雅,带给你的体验非常丰富。
laravel5.1基础路由的使用