Laravel 5.3 学习系列二:路由

来源:互联网 发布:mac如何使用qq截图 编辑:程序博客网 时间:2024/05/18 03:14

  • 路由文件目录
  • 使用
    • 基本用法
    • 使用Route门面的match方法匹配多种请求方式
    • 路由参数使用
      • 1必选参数
      • 2可选参数
      • 3正则约束
    • 路由命名给路由起个名字
      • 1命名路由
      • 2辅助函数 route 为命名路由生成 URL
    • 路由分组
      • 1中间件middleware
        • artisan命令创建中间件
        • 编辑中间件
          • 中间件之前请求前执行任务
          • 中间件之后请求后执行任务
        • 注册中间件
          • 基本middleware属性
          • 中间件组middlewareGroups 属性
        • 使用中间件
        • 中间件参数
          • 中间件中
          • 路由中
      • 2命名空间namespace
      • 3路由前缀prefix

路由文件目录

routes/web.php

使用

基本用法

Route::get('/order','order\OrderController@index');    get方式传值    参数1  路由    参数2 控制器路径@方法 其路径是相对于app/Http/Controllers目录的路径

使用Route门面的match方法匹配多种请求方式

Route::match(['get', 'post'], '/order', 'order\OrderController@index');

路由参数使用

1)必选参数

Route::post('/order/{id}','');

2)可选参数

Route::post('/order/{id?}','');

3)正则约束

Route::post('/order/{id?}','')->where('name','[A-Za-z]+');;

路由命名——给路由起个名字

1)命名路由

//使用name方法Route::get('user/profile', 'UserController@showProfile')->name('profile');//as 命名路由 //uses指定 控制器@方法Route::get('user/profile', ['as' => 'profile', 'uses' => 'UserController@showProfile']);

2)辅助函数 route 为命名路由生成 URL

$redirect = redirect()->route('profile');

命名路由带参数

Route::get('user/{id}/profile', ['as' => 'profile', 'uses' => 'UseController@showProfile']);$url = route('profile', ['id' => 1]);  //参数作为第二个参数传递给 route 函数

路由分组

使用Route门面的group方法

1)中间件(middleware)

过滤进入应用的 HTTP 请求

artisan命令创建中间件

php artisan make:middleware CheckAge

这个命令会在 app/Http/Middleware 目录下创建一个新的中间件类 CheckAge

编辑中间件

中间件之前(请求前执行任务)
public function handle($request, Closure $next){    //age小于等于200重定向    if ($request->input('age') <= 200) {        return redirect('home');    }    //继续执行    return $next($request);}
中间件之后(请求后执行任务)
public function handle($request, Closure $next){    $response = $next($request);    // 执行动作    return $response;}

注册中间件

将相应的中间件类设置到 app/Http/Kernel.php 文件中

基本($middleware属性 )
protected $routeMiddleware = [//注册中间件CheckAge并分配一个key 'check' => \App\Http\Middleware\CheckAge::class,//多个单词可以用 . 连接定义key'check.age' => \App\Http\Middleware\CheckAge::class,];
中间件组($middlewareGroups 属性)

指定一个键名将相关中间件分到同一个组里面

protected $middlewareGroups = [    'web' => [        \App\Http\Middleware\EncryptCookies::class,        \Illuminate\Session\Middleware\StartSession::class,        \Illuminate\View\Middleware\ShareErrorsFromSession::class,        \App\Http\Middleware\VerifyCsrfToken::class,        \Illuminate\Routing\Middleware\SubstituteBindings::class,    ],    'api' => [    ],];

使用中间件

通过数组分配

Route::group(['middleware' => ['web']], function () {    Route::get('/order','order\OrderController@index');});//使用多个中间件 逗号分隔Route::group(['middleware' => ['web','check','check.age']], function () {    Route::get('/order','order\OrderController@index');});

通过方法链来分配

Route::put('post/{id}','')->middleware('check');

在Controller的构造方法中调用

//Controller的构造方法public function __construct(){    //调用中间件    $this->middleware('test');}

中间件参数

中间件中

额外的中间件参数会在 $next 参数之后传入中间件,多个参数用逗号分隔

//多个参数用逗号分隔 public function handle($request, Closure $next, $age){    if (! $request->user()->hasRole($age)) {        // Redirect...    }    return $next($request);}
路由中

中间件参数可以在定义路由时通过:分隔中间件名和参数名来指定,多个中间件参数可以通过逗号分隔

Route::group(['middleware' => ['check.age:age']], function () {});//多参数逗号分隔Route::group(['middleware' => ['check.age:age,name']], function () {});

2)命名空间(namespace)

只需指定App\Http\Controllers之后的部分即可

Route::group(['namespace' => 'Admin'], function(){// 控制器在 "App\Http\Controllers\Admin" 命名空间下

});

3)路由前缀(prefix)

Route::group(['prefix'=>'admin'],function(){    Route::get('order','order\OrderController@index');    //url 会是 admin/order});//在路由前缀中指定参数Route::group(['prefix'=>'admin/{id}'],function(){    Route::get('order','order\OrderController@index');    //url 会是 admin/5/order});
原创粉丝点击