laravel开发网站实例-----3
  TEZNKK3IfmPf 2023年11月12日 18 0
用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": "xxxxxxxx@qq.com",
"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=xxxxxxxx@qq.com
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 = '1721347156@qq.com';
$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 把外部变量注入到这个闭包即可。

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

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月12日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2024年05月17日   26   0   0 算法php
  TEZNKK3IfmPf   2024年04月19日   36   0   0 php
  TEZNKK3IfmPf   2024年04月19日   65   0   0 shellphp
  TEZNKK3IfmPf   2024年04月19日   42   0   0 php
  TEZNKK3IfmPf   2024年05月17日   49   0   0 冒泡排序php
  TEZNKK3IfmPf   2024年04月19日   37   0   0 xmlphp
  TEZNKK3IfmPf   2024年05月17日   40   0   0 数组php
  TEZNKK3IfmPf   2024年05月17日   49   0   0 mysqlphp
  TEZNKK3IfmPf   2024年04月19日   49   0   0 php
  TEZNKK3IfmPf   2024年05月17日   32   0   0 字符串php
  TEZNKK3IfmPf   2024年04月19日   39   0   0 java验证码
TEZNKK3IfmPf