laravel - 路由基础

laravel框架与传统框架的不同:
laravel框架不同于传统的MVC,传统的MVC请求一般直接对应的是控制器,laravel中的请求对应的是路由
laravel中的路由简单来说就是将用户的请求转发给相应的程序进行处理
作用就是建立URL和程序之间的映射
请求类型:get、post、put、patch、delete

基本路由

路径:app/Http/routes.php中定义应用中的大多数路由
该文件加载了App\Providers\RouteServiceProvider

GET路由

1
2
3
4
Route::get('/', function()
{
return 'Hello World';
});

其它路由

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Route::post('foo/bar', function()
{
return 'Hello World';
});

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

Route::delete('foo/bar', function()
{
//
});

match请求注册多路由

1
2
3
4
Route::match(['get', 'post'], '/', function()
{
return 'Hello World';
});

any注册路由所有http请求

1
2
3
4
Route::any('foo', function()
{
return 'Hello World';
});

路由产生 URL,可以使用 url 辅助函数来操作:
$url = url(‘foo’);

路由参数

基本路由参数

1
2
3
4
Route::get('user/{id}', function($id)
{
return 'User '.$id;
});

路由参数不能包含 - 字符。使用下划线替代 (_)。

可选择路由参数/带默认值参数

1
2
3
4
Route::get('user/{name?}', function($name = 'John')
{
return $name;
});

使用正则表达式限制参数

1
2
3
4
5
Route::get('user/{id}/{name}', function($id, $name)
{
//
})
->where(['id' => '[0-9]+', 'name' => '[a-z]+']);

命名路由

使用as方便产生URL

1
2
3
4
Route::get('user/profile', ['as' => 'profile', function()
{
return route('profile');
}]);

为控制器方法指定路由名称

1
2
3
Route::get('user/profile', [
'as' => 'profile', 'uses' => 'UserController@showProfile'
]);

路由群组

Middleware

在群组共享属性数组的 middleware 参数定义中间件列表,这些中间件就会应用到群组内的所有路由上。中间件将会按在列表内指定的顺序执行:

1
2
3
4
5
6
7
8
9
10
11
12
13
Route::group(['middleware' => ['foo', 'bar']], function()
{
Route::get('/', function()
{
// Has Foo And Bar Middleware
});

Route::get('user/profile', function()
{
// Has Foo And Bar Middleware
});

});

Namespaces

可以在 group 属性数组中使用 namespace 参数,指定在这群组中控制器的命名空间:

1
2
3
4
5
6
7
8
9
Route::group(['namespace' => 'Admin'], function()
{
// Controllers Within The "App\Http\Controllers\Admin" Namespace

Route::group(['namespace' => 'User'], function()
{
// Controllers Within The "App\Http\Controllers\Admin\User" Namespace
});
});

在默认情况下,RouteServiceProvider 包含内置您命名空间群组的 routes.php 文件,让您不须使用完整的 App\Http\Controllers 命名空间前缀就可以注册控制器路由。