天天看點

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
[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('驗證碼');
});