laravel基础——HTTP路由

1、基本路由
大部分路由都定义在被App\Providers\RouteServiceProvider类载入的app/Http/routes.php文件中。

最基本的Laravel路由接收一个URI和一个闭包:

Route::get(‘/‘, function () {
return ‘Hello World’;
});

Route::post(‘foo/bar’, function () {
return ‘Hello World’;
});

Route::put(‘foo/bar’, function () {
//
});

Route::delete(‘foo/bar’, function () {
//
});
为多个动作注册路由

有时候需要注册一个路由来响应多个不同的HTTP动作,你可以使用Route门面的match方法来实现:

Route::match([‘get’, ‘post’], ‘/‘, function () {
return ‘Hello World’;
});
或者,还可以使用any方法注册一个路由响应所有HTTP动作:

Route::any(‘foo’, function () {
return ‘Hello World’;
});
生成路由对应的URLs

可以使用帮助函数url来生成路由对应的URLs:

$url = url(‘foo’);
2、路由参数
2.1 必选参数

有时我们需要在路由中捕获URI片段,比如,如果想要从URL中捕获用户ID,可以通过如下方式定义路由参数:

Route::get(‘user/{id}’, function ($id) {
return ‘User ‘.$id;
});
可以按需要定义在路由中定义多个路由参数:

Route::get(‘posts/{post}/comments/{comment}’, function ($postId, $commentId) {
//
});
路由参数总是通过花括号进行包裹,参数在路由被执行时会被传递到路由的闭包。

注意:路由参数不能包含’-‘字符,需要的话可以使用_替代。
2.2 可选参数

有时候可能需要指定路由参数,并且使得该路由参数是可选的,可以通过在参数名后加一个?来标记:

Route::get(‘user/{name?}’, function ($name = null) {
return $name;
});

Route::get(‘user/{name?}’, function ($name = ‘John’) {
return $name;
});
2.3 正则约束

可以使用路由实例上的where方法来约束路由参数的格式。where方法接收参数名和一个正则表达式来定义该参数如何被约束:

Route::get(‘user/{name}’, function ($name) {
//
})->where(‘name’, ‘[A-Za-z]+’);

Route::get(‘user/{id}’, function ($id) {
//
})->where(‘id’, ‘[0-9]+’);

Route::get(‘user/{id}/{name}’, function ($id, $name) {
//
})->where([‘id’ => ‘[0-9]+’, ‘name’ => ‘[a-z]+’]);
2.3.1 全局约束

如果想要路由参数在全局范围内被给定正则表达式约束,可以使用pattern方法。可以在RouteServiceProvider类的boot方法中定义约束模式:

/**

  • 定义路由模型绑定,模式过滤器等
    *
  • @param \Illuminate\Routing\Router $router
  • @return void
  • @translator http://laravelacademy.org
    */
    public function boot(Router $router){
    $router->pattern(‘id’, ‘[0-9]+’);
    parent::boot($router);
    }
    一旦模式被定义,将会自动应用到所有包含该参数名的路由中。

3、命名路由

HTTPROOT | 自学PHP | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 石头哥 |微信小程序 |木讯 |备案号:京ICP备17015498号
Copyright © 1998 - 2016 HTTPROOT.COM. All Rights Reserved httproot.com 版权所有