laravel路由(基本版)

分类: PHP  • 发布时间: 2015-08-09 21:50:09  • 浏览量:8186

laravel版本:5.1

演示中的域名为:unun.in

之前一直用ThinkPHP和CI,最近开始学习laravel,发现laravel和我和我朋友以前仿照web.py搞的那个php框架的有些地方很像,不过对于laravel来说,我还是个新手,一边学习一边记录吧。


路由的定义位置:app/Http/routes.php

这个文件加载了 App\Providers\RouteServiceProvider 类。 大多数基本的 Laravel 路由都只接受一个 URI 和 一个 闭包(Closure) 参数


基本请求方式:

例1(基本get请求):

Route::get('php',function(){
    return 'hello';
});

用http://unun.in/php进行get请求,会返回hello字符串,如果是用post请求这个地址则不会有任何返回

例2(基本post请求):

Route::post('php',function(){
    return 'hello,this is post method';
});

用http://unun.in/php进行post请求,会返回hello,this is post method 字符串,如果是用get请求这个地址则不会有任何返回,当然,如果您用的是laravel5,测试的时候有可能会遇到csrf_token问题,这里不展开了

例3(多种请求注册路由)

Route::match(['get', 'post'], 'php', function(){
    return 'Hello World';
});

用http://unun.in/php进行get或者post请求,都能返回Hello World

例4(响应所有 HTTP 请求):

Route::any('php', function(){
    return 'Hello World';
});

无论是用post、get、put、delete等方式请求http://unun.in/php,都能返回Hello World


带参数的请求:

例1(基本参数):

Route::get('php/{id}',function($id){
    return $id;
});

可以在路由中用花括号包住一个变量,并将该变量以参数传递到匿名函数,就可以在变量中使用该变量了。

如果使用get请求访问http://unun.in/php/131,就会得到返回值:131

例2(可选参数):

Route::get('php/{id?}', function($id = null){
    return $id;
});

如果使用get请求访问http://unun.in/php/131,就会得到返回值:131;如果使用get请求访问http://unun.in/php,不会有任何返回值,但却不会报错,如果将?去掉,访问http://unun.in/php就会报错

例3(带默认值参数):

Route::get('php/{id?}', function($id = 131){
    return $id;
});

使用get请求访问http://unun.in/php/131,就会得到返回值:131;如果使用get请求访问http://unun.in/php,也会的到返回值131,如果使用get请求访问http://unun.in/php/12,会得到返回值12.

例4(正则限制参数):

Route::get('php/{id}', function($id){
    return $id;
})->where('id', '[0-9]+');

使用where设置对应的变量模式,采用的是正则表达式。

使用get请求访问http://unun.in/php/131,就会得到返回值:131,如果使用get请求访问http://unun.in/php/a,则会报错

例5(正则限制多个参数):

Route::get('php/{name}/{id}', function($name,$id){
    return $name.'--'.$id;
})->where(array('name' => '[a-z]+','id'=>'[0-9]+'));

在where中是用数组来限制多个变量的格式,同样采用的是正则表达式。

使用get请求访问http://unun.in/php/a/131,就会得到返回值:a--131,如果使用get请求访问http://unun.in/php/131/a,则会报错


例6(全局模式):

有这样一种情况,有很多地方都需要 id 作为参数,id 大都是这种数字,我们肯定不希望每一个路由规则都要写一次 where 方法来设置 id 的匹配规则。这时候可以通过这样一个方法来实现:

Route::pattern('id', '[0-9]+');

这样的话,每一个路由规则内出现 {id},都会以该规则去匹配,看下面的这几个规则

Route::pattern('id', '[0-9]+');
Route::get('php/{id}', function($id){
    return 'php'.$id;
});
Route::get('sql/{id}', function($id){
    return 'sql'.$id;
});

在这个路由规则下访问http://unun.in/php/131和http://unun.in/sql/144,均可正常访问,但是使用http://unun.in/php/a131和http://unun.in/sql/144a,都会报错,说明{id}被全局匹配生效了

文章标签: php, laravel, 路由