一、路由方法定义位置
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中包含新创建的路由文件,效果也是一样的。