Laravel框架02:路由与控制器
- 一、路由配置文件
- 二、路由参数
- 三、路由别名
- 四、路由群组
- 五、控制器概述
- 六、控制器路由
- 七、接收用户输入
一、路由配置文件
- 以web网页路由文件为例:
- 默认根路由
- 路由定义格式
Route::请求方式('请求的URL', 匿名函数或控制响应的方法)
Route::get('/home', function () { return "HOME"; });
- 通过
match
可以实现路由响应多个HTTP请求。any
实现一个路由响应所有HTTP请求。Route::match(['get', 'post'], '/match', function () { return "match实现一个路由响应多个HTTP请求"; }); Route::any('/any', function () { return "any实现一个路由响应所有HTTP请求"; });
二、路由参数
-
必选参数
- 必选参数的传递通过路由地址中的
{参数名}
的形式进行传递。
Route::any('/must/{id}', function ($id) { echo "当前用户ID是{$id}"; });
- 必选参数的传递通过路由地址中的
-
可选参数
- 可选参数的传递通过路由地址中的
{参数名?}
的形式进行传递。
Route::any('/optional/{id?}', function ($id = null) { echo "当前用户ID是{$id}"; });
- 可选参数的传递通过路由地址中的
-
问号传参
- 除了定义路由的方式传递路由参数,还可以通过
?
形式传递参数
http://study.com/mark?id=12345 Route::any('/mark', function () { echo "当前用户ID是{$_GET['id']}"; });
- 除了定义路由的方式传递路由参数,还可以通过
三、路由别名
-
在路由定义的时候,给路由起一个名字。
Route::any('/mark', function () { echo "当前用户ID是{$_GET['id']}:<br>" . route('alias'); })->name("alias");
-
调用该路由:
route("alias")
,返回该路由的完整地址。
-
查看系统已经有的路由:
php artisan route:list
四、路由群组
- 使用
group
对路由进行分组。 - 使用
prefix
属性指定路由前缀。 - 语法:
Route::group(公共属性数组, 回调函数);
Route::group(['prefix' => 'admin'], function () {
Route::get('test1', function () {
return 'test1';
});
Route::get('test2', function () {
return 'test2';
});
Route::get('test3', function () {
return 'test3';
});
});
五、控制器概述
- 控制器文件夹位于:app/Http/Controllers
- 控制器命名方式:大驼峰+Controller.php
- 通过artisan命令行自动生成控制器
php artisan make:controller 控制器名
六、控制器路由
-
控制器路由:即使用路由规则调用控制器下的方法。
-
格式:
Route::请求方法(路由表达式, 控制器类名@方法名)
# 路由设定 Route::get('/home/test/info', 'TestController@info'); # 控制器 class TestController extends Controller { public function info(){ return phpinfo(); } }
-
创建分目录管理的控制器,只需要加上目录名称
php .\artisan make:controller Admin/IndexController php .\artisan make:controller Home/IndexController
# 路由设定
Route::get('/home/index/index', 'home\IndexController@index');
Route::get('/admin/index/index', 'Admin\IndexController@index');
# 分目录管理控制器
class IndexController extends Controller
{
// 测试Admin分组的Index方法
public function index(){
return "这是Admin分组下的index方法";
}
}
七、接收用户输入
- Facades:“门面”的思想。门面是介于一个类的实例化与没有实例化中间的一个状态。其实是类的一个接口实现。
- 在Laravel中如果需要使用facades,可以在config/app.php中定义别名。
- 在Laravel中友好输出函数:
dd();
- 接收用户输入的类:Illuminate\Http\Request。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class TestController extends Controller
{
public function index(Request $request){
$request->all();
$request->get('id');
$request->only(['id', 'name']);
}
}