laravel开发网站实例-----3

利用 dingo API 定义 REST ful 路由

用post方法创建一个路由,并返回json格式的数据
$api->version('v1', [
    'namespace' => 'App\Http\Controllers\Api'
], function($api) {
    //用户注册
    $api->post('registerCodes', 'UsersController@store')
        ->name('api.registerCodes.store');
});

参数 namespace,使 v1 版本的路由都会指向 App\Http\Controllers\Api,方便书写路由
创建一个新的控制器

php artisan make:controller Api/UsersController

然后填入下面的代码:

<?php

namespace App\Http\Controllers\Api;

use Illuminate\Http\Request;

class UsersController extends Controller
{
    //
    public function store(Request $request)
    {
        $rs['name'] = $request->input('name');
        $rs['schoolid'] = $request->input('schoolid');
        $rs['email'] = $request->input('email');
        $rs['password'] = $request->input('password');
        $rs['sex'] = $request->input('sex');
        $rs['xueyuan'] = $request->input('xueyuan');
        $rs['zhuanye'] = $request->input('zhuanye');
        $rs['shifouhuiyuan'] = $request->input('shifouhuiyuan');
        $rs['info'] = '请求成功';
        return response($rs,'200');
    }
}

返回的结果是这样的

{
    "name": "chaojilaji1",
    "schoolid": "2015211795",
    "email": "[email protected]",
    "password": "123456",
    "sex": "0",
    "xueyuan": "cs",
    "zhuanye": "cs",
    "shifouhuiyuan": "1",
    "info": "请求成功"
}

与之前用web路由进行测试的结果是一致的。而且在api中定义Post时,不需要验证csrf。

验证用户输入(也可以看做是过滤器)

修改UsersController为

public function store(Request $request)
{
  $this->validate($request,[
            'email' => 'required|unique:users',
        ]);

        // 生成4位随机数,左侧补0
        $code = str_pad(random_int(1, 9999), 4, 0, STR_PAD_LEFT);

        //todo 发送邮件验证码

        $key = 'RegisterCodes'.str_random(15);
        $expiredAt = now()->addMinutes(10);
        // 缓存验证码 10分钟过期。
        \Cache::put($key, ['email' => $request->email, 'code' => $code], $expiredAt);

        return $this->response->array([
            'key' => $key,
            'expired_at' => $expiredAt->toDateTimeString(),
            'code' => $code,
        ])->setStatusCode(201);

}

结果:

{
    "key": "RegisterCodesqfxffrWT5rH0lxG",
    "expired_at": "2018-07-26 07:22:36",
    "code": "6213"
}
发邮件

先来说说composer.json的用法
将依赖加入到composer.json中,然后添加依赖进去,使用 composer update 来更新依赖,然后使用 composer install 来安装新的依赖。

1、前往qq邮箱开启smtp服务

fouxgakexhawciih

2、配置.env文件 ( 对应于 config/mail.php )

MAIL_DRIVER=smtp
MAIL_HOST=smtp.qq.com
MAIL_PORT=465
MAIL_USERNAME=[email protected]
MAIL_PASSWORD=fouxgakexhawciih
MAIL_ENCRYPTION=ssl

3、在控制器中发送邮件

public function store(Request $request)
    {
        $this->validate($request,[
            'email' => 'required|unique:users',
        ]);
        // 生成4位随机数,左侧补0
        $code = str_pad(random_int(1, 9999), 4, 0, STR_PAD_LEFT);
        $email = $request->email;
        //发送邮件验证码
        $name = $request->name;
        $flag = Mail::send('test',['name'=>$name,'code'=>$code],function($message){
            $to = '[email protected]';
            $message ->to($to)->subject('验证码');
        });
        $info = "邮件已发送,如长时间没收到邮件,请重试";

        $key = 'RegisterCodes'.str_random(15);
        $expiredAt = now()->addMinutes(10);
        // 缓存验证码 10分钟过期。
        \Cache::put($key, ['email' => $request->email, 'code' => $code], $expiredAt);

        return $this->response->array([
            'key' => $key,
            'expired_at' => $expiredAt->toDateTimeString(),
            'info' => $info,
        ])->setStatusCode(201);
    }

注意,每次改了配置文件之后,使用 php artisan config:cache 清除缓存
新建视图 test.blade.php 用于存放模板,里面放上这句代码

{{$name}}你好,您的验证码是{{$code}}

然后在调用send方法的时候,将参数传入到视图模板中去即可。

4、发送邮件的收件人设置成参数

上面的代码中,收件人地址是硬编码的。使用变量模式如下例

$email = $request->email;
//发送邮件验证码
$name = $request->name;
$flag = Mail::send('test',['name'=>$name,'code'=>$code],function($message) use ($email){
    $to = $email;
    $message ->to($to)->subject('验证码');
});

即,用一个use 把外部变量注入到这个闭包即可。

下一讲 用户注册接口全实现

猜你喜欢

转载自blog.csdn.net/xielinrui123/article/details/81229950