Laravel 路由的使用

一、路由方法定义位置

vendor\laravel\framework\src\Illuminate\Routing\Router.php

二、路由的使用

 
1、直接返回视图,不经过控制器

Route::get('/a', function () {
    return view('welcome', ['name' => 'haveyb']);
});

这时,访问yourWebSite/a,将直接返回 resource/welcome.blade.php 模板文件的内容。

 
2、将请求分发到一层控制器

Route::get('/first-route', 'ProductController@index');

这时,访问yourWebSite/first-route,将返回 app\Http\Controller\ProductController 下面的index 方法的处理结果,这个结果根据需要,可以定义一个视图,或者定义为一串数据。

 
3、将请求分发到二层控制器

Route::get('/second-route', 'home\IndexController@index');

这时,访问yourWebSite/second-route,将返回 app\Http\Controller\home\IndexController 下的index 方法的处理结果。

 
4、直接返回数据的路由,如何传参

Route::get('/first-route/{name?}', function ($name = '') {
    return  'your name is' . $name;
});

这时,访问yourWebSite/first-route/haveyb,将返回 your name is haveyb

注: 路由中加个问号,表示这个参数不是必须的,即使url中没有这个参数,也不报错。如果不加这个问号,url中少参数,就会报错。

 
5、路由别名

一下两种写法效果是一致的

Route::get('/order-list', 'backend\OrderController@list')->name('order.list');

Route::get('/order-list', ['as' => 'order.list', 'uses' => 'backend\OrderController@list']);

一般用于控制器中方法跳转或视图中使用。

5、路由分组

(1)以下两个路由设置效果一致

Route::get('/order-list', 'backend\OrderController@list');
Route::get('/order-index', 'backend\OrderController@index');
Route::group(['namespace' => 'backend'], function () {
    Route::get('/order-list', 'OrderController@list');
    Route::get('/order-index', 'OrderController@index');
});

 
(2) 以下两个路由设置效果一致

Route::get('/order/list', 'backend\OrderController@list');
Route::get('/order/index', 'backend\OrderController@index');
Route::group(['prefix' => 'order', 'namespace' => 'backend'], function () {
    Route::get('list', 'OrderController@list');
    Route::get('index', 'OrderController@index');
});

 
6、创建新的路由文件 backend.php

需求背景:

根据项目架构的设计,分为前端、后端、api,Laravel自带了web 和 api,但是没有backend,因此这里创建一个 backend.php 路由文件,所有后台相关的路由解析放在这个文件里,使路由更加清晰。

(1)在routes 目录下创建一个 backend.php 文件。

现在在里面写路由规则,浏览器访问会发现是不生效的,因为还没有注册。

(2)注册该路由文件

app\Provieders 目录下找到 RouteServiceProvider.php地方。

修改map方法

public function map()
{
    $this->mapApiRoutes();

    $this->mapWebRoutes();

    // 注册后台专用路由文件
    $this->mapBackendRoutes();

}

添加 mapBackendRoutes 方法

/**
* 注册后台专用路由
*/
protected function mapBackendRoutes()
{
     Route::middleware('web')
         ->namespace($this->namespace)
         ->group(base_path('routes/backend.php'));
}

现在,再访问backend.php定义的路由,就可以访问到了。

注:当然,也可以不用注册,创建好新的路由文件后,直接在web.php中包含新创建的路由文件,效果也是一样的。