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、命名路由