/**
* 一、简单路由
* 在浏览器中输入http://blog.csdn.net/u012160319我们可以访问实验楼网站的首页,
* 如果我们输入https://blog.csdn.net/u012160319/article/details/81607974呢?我们会来到博客的文章页面。
* 这就是路由了,即路由系统会对用户输入的URL地址进行解析,然后分配不同的工作,有点像路由器。
* 路由不仅可以美化 URL,还可以便于用户记忆等。
*/
Route::get('/', function () {
return 'index page';
});
Route::get('welcome',function (){
return view('welcome');
});
Route::get('/help',function (){
return 'help page';
});
/**
* 二、基本路由
* 网站的大多数路由都定义在 app/Http/routes.php 文件中,该文件将会被
* App\Providers\RouteServiceProvider 类加载。最基本的 Laravel 路由仅接受 URI 和一个闭包,
* 一个url请求可能有多种类型,除了常用的GET,还可能有 POST、PUT、DELETE 等类型的请求;
*/
Route::post('/foo', function() {
//该路由将匹配 post方法的 '/foo' url
});
Route::put('/foo', function() {
//该路由将匹配 put方法的 '/foo' url
});
Route::match(['get', 'post'], '/foo', function() {
// 该路由将匹配 get 和 post 方法的 'foo' url
});
Route::any('/foo', function() {
// 该路由将匹配所有类型的 'foo' url
});
/**
* 三、路由参数
* 有时,需要从URL中获取一些参数值,比如用户的的姓名、年龄等
*/
Route::get('name/{name}', function($name){
return 'I`m '.$name;
});
Route::get('name/{name}/age/{age}', function ($name,$age) {
return 'I`m '.$name .' ,and my age is '.$age;
});
//可选的带参路由
Route::get('hello/{name?}',function ($name='Tom') {
return 'Hello '.$name.'!';
});
/**
* 四、命名路由
* 所谓命名路由,就是给路由起个名字,这样我们就可以通过这个名字获取到该条路由的相关信息,也更利于后期维护。
*/
Route::get('foo', ['as' => 'foo', function() {
//命名路由方法一
}]);
Route::get('foo',function () {
//命名路由方法二
})->name('foo');
/**
*五、路由群组
*路由群组允许你共用路由属性,例如:中间件、命名空间等,你可以利用路由群组统一为多个路由设置共同属性,
*而不需在每个路由上都设置一次。共用属性被指定为数组格式,当作Route::group方法的第一个参数。
*/
//1、共用中间件
Route::group(['middleware' => 'auth'], function () {
Route::get('/', function () {
//该路由将使用Auth中间件
});
Route::get('name', function () {
//该路由也将使用Auth中间件
});
});
//2、共用命名空间
//命名空间是一种封装事物的方法,可以简单的理解为当前文件所在的位置
Route::group(['namespace' => 'Admin'], function () {
// 控制器在「App\Http\Controllers\Admin」命名空间
Route::group(['namespace' => 'User'], function () {
// 控制器在「App\Http\Controllers\Admin\User」命名空间
});
});
//3、为路由群组添加共同的前缀
//下面一系列拥有相同前缀的路由,
Route::get('user/name', function () {
//
});
Route::get('user/age', function () {
//
});
Route::get('user/introduction', function () {
//
});
//可以用如下写法简写
Route::group(['prefix' => 'user'], function(){
Route::get('name', function () {
//
});
Route::get('age', function () {
//
});
Route::get('introduction', function () {
//
});
});
//路由群组也可以添加参数
Route::group(['prefix' => 'user/{id}'], function(){
Route::get('name', function ($id) {
});
Route::get('age', function ($id) {
});
Route::get('introduction', function ($id) {
});
});
/**
* 六、查看路由
*/
//可以使用url('foo')函数来生成完整的URL
Route::get('/help', function () {
return url('/help');
});
//也可以使用route('/foo')函数来生成完整的URL
Route::get('/help', function() {
return route('foo');
});
Route::get('/foo', function() {
})->name('foo');
/**
* 七、正则表达式限制路由
*/
//可以使用where方法来限制参数的格式。where 方法接受参数的名称和正则表达式
Route::get('hello/{name?}', function ($name = 'Tom') {
return 'Hello '.$name.'!';
})->where('name','[A-Za-z]+');
//多个参数使用正则表达式限制格式
Route::get('hello/{name}/age/{age}', function($name = 'Tom', $age = 11) {
return 'I`m '.$name.' and my age is '.$age;
})->where(['name' => '[A-Za-z]+', 'age' => '[0-9]+']);
//若需要对所有路由参数添加某种限制,需要在RouteServiceProvider的boot方法中定义这些限制
/**
* 定义你的路由模型绑定,模式过滤器等。
public function boot(Router $router){
$router->pattern('id', '[0-9]+');
parent::boot($router);
}
*/