02.路由和控制器

goer ... 2022-01-08 Laravel
  • Php
  • Laravel
大约 2 分钟

路由和控制器

[toc]

# 路由

路由就是提供接受 HTTP 请求的路径,并和程序交互的功能;提供访问程序的 URL 地址

路由的定义文件在根目录 routes/web.php 中,可以看到 welcome 页面;
新建路由
Route::get('index',function(){
    return 'hello lv';
});
1
2
3
4
5

在路由定义上,我们采用了::get()这个方法,它接受的就是 GET 提交;

::post()、::put()、::delete()是表单和 Ajax 的提交接受方式;

::any()表示不管你是哪种提交方式,我智能的全部接收响应;

::match()表示接收你指定的提交方式,用数组作为参数传递;

match(三个参数)
Route::match(['get','post'],'hello',function (){
    return 'hello';
});
1
2
3
4

传递路由参数

// 路由传参   必须带有id   --> 参数 为可读性 $id
Route::get('index/{id}',function ($id){
    return 'hello lv'.$id;
});
1
2
3
4

# 控制器

MVC 模式中 C 代表控制器,用于接收 HTTP 请求,从而进行逻辑处理;

创建

//控制器目录 app\Http\Controllers

1. ide直接创建
2. php artisan make:controller TaskController
1
2
3
4
// 直接 app\Http\Controllers新建class文件
<?php

namespace App\Http\Controllers;

class TaskControllers extends Controller
{
    public function index(){
        return 'hello index';
    }

    public  function test($id){

        return 'id is :'.$id;

    }


}
//设置路由就可以访问了
Route::get('task','TaskControllers@index');
// 参数id 在控制器的fun里面了
Route::get('task/test/{id}','TaskControllers@test');
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

路由参数:参数一:路由名称 参数二:控制器@方法名

# 路由参数

如动态传递{id} -- 参数约束

路由参数约束

// 限制路由参数   正则表达式 where()

Route::get('tesk/test/{id}','TaskControllers@test')
    ->where('id','[0-9]+');   //id必须为整数多个
// 多个参数限定  用数组
Route::get('task/test/{id}/{name}','TaskControllers@test')
    ->where(['id'=>'[0-9]+'],['name'=>'*']);
1
2
3
4
5
6
7

如果想让约束 id 只能是 0-9 之间作用域全局范围,可以在模型绑定器里设置

// 模型绑定器
app\Providers\RouteServiceProvider 的 boot()方法

public function boot()
{
    //
    Route::pattern('id','[0-9]+');  //这样就全局id都必须这个规则

    parent::boot();
}

//id 已经被全局约束,在某个局部你想让它脱离约束
    ->where('id','.*');  // '.*'  *任意规则
1
2
3
4
5
6
7
8
9
10
11
12
13

# 路由重定向

设置访问一个路由的 URI,跳转到另一个路由的 URI

// 路由跳转   redirect(当前路由,跳转路由, 状态码)

Route::redirect('task','task/test/10/blud');
Route::redirect('task','login',301);  //设置状态码

// 一个方法,可以直接让路由跳转返回 301 状态码而不用设置  permanentRedirect  301
1
2
3
4
5
6