Laravel框架--路由详解

刚接触laravel一般会觉的其中定义路由这一点很麻烦,写一个方法就得加一个路由,真是麻烦!我刚接触的时候也是这么认为,而且我常常忘记加路由而碰到
laravel的报错信息:Sorry, the page you are looking for could not be found.
但是—等到做页面验证(加中间件)、命名空间等时,就会感到写路由是多么有先见之明的时,而且能减少我们很多的代码量。


下面开始进入正题,我刚接触的时候,需熟悉公司的laravel代码,然后发现一些路由的参数尤其是路由群组里面的参数看不懂。然后查阅了很多文章,发现大多数人并没有把那些参数的意思写出来。结合官网以及自己的理解我整理了一下laravel的路由。(如有不正确,敬请指正)

首先,第一个路由也就是官方写的根路由或者称之为首页路由如下:

//路由输出视图
Route::get('/', function () {
    return view('welcome');
});

有效的路由方法如下,可以注册路由来响应任何 HTTP 请求:

Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);

上面这些想必不用多说,大家都能理解。下面开始进入~真正题:

1.多请求路由

//多请求路由的 两种方式
//可响应get、post HTTP 请求
Route::match(['get','post'],'demo',function(){
    return 'this is a demo';
});
//可响应所有HTTP 请求
Route::any('demo1',function(){
    return 'this is a demo1';
});

2.路由参数

//必选参数 不加id会报错
Route::get('user/{id}',function($id){
    return 'this is '.$id;
});

//可选参数  不加name值不会报错,因为已经定义为null
Route::get('user1/{name?}',function($name = null){
    return 'this name is '.$name;
});

3.使用正则

//后面加上where()方法 可以使用正则来规定nick只能为字母
Route::get('user2/{nick?}',function($nick = null){
    return 'this nick is '.$nick;
})->where('nick','[A-Za-z]+');

Route::get('user3/{id}/{name?}',function($id,$name = null){
    return 'this id is '.$id.' name is '.$name;
})->where(['id' => '[0-9]+','name' => '[A-Za-z]+']);

4.路由别名(命名路由)
在定义路由时使用数组键 as 指定路由名称。
其作用是,官方曰:为生成 URL 或重定向提供便利。

//别名的意思并不是说url写成content就行了,如果在浏览器访问还是要写成user4/content的。
Route::get('user4/content',['as'=>'content',function(){
    //如下会返回url链接
    return route('content');
}]);

除了在路由数组定义中指定路由名称外,还可以通过在路由定义之后使用 name 方法链的方式来实现:

Route::get('user4/content',function(){
    //如下会返回url链接
    return route('content');
})->name('content');

最重要的、困惑我多时的、核心的来了!!!!!!如下:

Route::get('demo/blade','DemoController@blade');
Route::get('demo/blade',['uses => DemoController@blade']);
//上面这两者效果上是没有区别的   键值uses 指向 DemoController控制器下的blade方法
//两种方式都一样的,不用纠结

5.路由群组
键值prefix 可以用来为群组中每个路由添加一个给定 URI 前缀

//给群组中的每个链接加一个前缀member
Route::group(['prefix' => 'member'],function(){
    //访问的话,链接为 member/aaa
    Route::get('aaa',function(){
        return "aaa";
    });
    //访问的话,链接为 member/bbb
    Route::get('bbb',function(){
        return "bbb";
    });
});

middleware 给路由群组中定义的所有路由分配中间件,可以分配多个,如下web是官方的,admin.login是自己加的中间件。namespace指定群组中所有控制器的公共命名空间。

Route::group(['middleware'=>['web','admin.login'],'prefix'=>'admin','namespace'=>'Admin'],function(){
// 控制器在 "App\Http\Controllers\Admin" 命名空间下
    Route::get('index', 'IndexController@index');
    Route::get('info', 'IndexController@info');
    Route::get('quit', 'LoginController@quit');
    Route::any('pass', 'IndexController@pass');
});

还有个子域名路由,我暂时还没有涉及到,等用到了再来完善
copy下官方语言:路由群组还可以被用于子域名路由通配符,子域名可以像 URI 一样被分配给路由参数,从而允许捕获子域名的部分用于路由或者控制器,子域名可以通过群组属性数组中的 domain 来指定。

猜你喜欢

转载自blog.csdn.net/qq_32737755/article/details/80777750