IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> cakephp组件Components的定义与使用 -> 正文阅读

[PHP知识库]cakephp组件Components的定义与使用

cakephp组件:
概述:

组件(Components)是在控制器之间共享的封装了的逻辑。CakePHP 附带一套非常棒的核心 组件,可帮你完成各种常见任务。你也可以创建自己的组件。如果你发现自己要在控制器间 复制粘贴代码,就应当考虑创建自己的组件,封装这些功能。创建组件可以保持控制器代码 简洁,并且让你可以在不同的项目中重用代码。

上面是官方手册对于组件的解释,在我目前博客系统写的功能中就有几个可以定义成组件,可以供所有控制器使用,比如密码加密函数、发送邮箱函数等等都是可以定义成组件,下面介绍组件的具体使用方法。

1、组件的定义

这里定义的是PublicFunctionComponent组件类:类名为PublicFunctionComponent.php

//引入Component类
App::uses('Component', 'Controller');
//继承Component类
class PublicFunctionComponent extends Component
{
    /*
     * 密码加密函数
     */
    function encrypt($data)
    {
        $salt = "123123asdasdasd";
        $psw = md5($salt . md5($data));
        return $psw;
    }
}

这里定义的是EmailComponent组件类:类名为EmailComponent.php

<?php
/**
 * Created by PhpStorm.
 * User: 
 * Date: 2021/7/14
 * Time: 16:23
 */


use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require '../../vendors/phpmailer/phpmailer/src/Exception.php';
require '../../vendors/phpmailer/phpmailer/src/PHPMailer.php';
require '../../vendors/phpmailer/phpmailer/src/SMTP.php';

App::uses('Component', 'Controller');

class EmailComponent extends Component
{
    /*
     * 传递参数
     * $params $email 接收邮箱地址
     * $params $content 邮箱内容
     */
    function sendmail($email,$content){
//初始化参数
     $mail = new PHPMailer(true);
     try{
         //服务器配置
         $mail->CharSet ="UTF-8";                     //设定邮件编码
         $mail->SMTPDebug = 0;                        // 调试模式输出
         $mail->isSMTP();                             // 使用SMTP
         $mail->Host = 'smtp.qq.com';                // SMTP服务器
         $mail->SMTPAuth = true;                      // 允许 SMTP 认证
         $mail->Username = '2717719404@qq.com';                // SMTP 用户名  即邮箱的用户名
         $mail->Password = 'tcviesfxvxymdhbh';             // SMTP 密码  部分邮箱是授权码
         $mail->SMTPSecure = 'ssl';                    // 允许 TLS 或者ssl协议
         $mail->Port = 465;                            // 服务器端口 25 或者465 具体要看邮箱服务器支持

         $mail->setFrom('2717719404@qq.com', 'wyqgg');  //发件人
         $mail->addAddress($email, 'wyq');  // 收件人
         //$mail->addAddress('ellen@example.com');  // 可添加多个收件人
         $mail->addReplyTo('2717719404@qq.com', 'info'); //回复的时候回复给哪个邮箱 建议和发件人一致
         //Content
         $mail->isHTML(true);                                  // 是否以HTML文档格式发送  发送后客户端可直接显示对应HTML内容
         //标题
         $mail->Subject = '登录提示' . time();
         //主体部分
         $mail->Body    = $content . date('Y-m-d H:i:s');
         $mail->AltBody = '如果邮件客户端不支持HTML则显示此内容';

         $mail->send();
         return 1;
     }catch (Exception $e){
         return 0;
     }
 }
}
2、控制器中的声明以及使用
class LoginController extends AppController
{
    public $components = array('Session','email','publicFunction');//这里就是在控制器中调用你定义、或系统的组件,这里email、publicFunction就是我自定义的组件,这里的命名需要保持小驼峰命名
    
    /*
     * 点击忘记密码生成验证码
     */
    public function findPsw(){
        $email = $_POST['email'];
        $username = $_POST['username'];
        $login = ClassRegistry::init('Login');
        $data = $login->find_admin($username);
        if ($data && $data['Login']['email'] == $email){
            $code = rand(1000,9999);
            $name = 'emailCode'.$username;
            setcookie($name,$code,time()+60);
            $content ="<h1>您的验证码为:".$code."</h1>";
            //调用组件类的方法
            $res = $this->email->sendmail($email,$content);
            if ($res == 1){
                exit(json_encode(200));
            }else{
                exit(json_encode(400));
            }
        }
        exit(json_encode(401));
    }
    
     /*
     * 验证验证码与邮箱
     */
    public function submitPsw(){
        $post = $_POST;
        $name = 'emailCode'.$post['username'];
        $code = $_COOKIE[$name];
        $login = ClassRegistry::init('Login');
        $data = $login->find_admin($post['username']);
        if ($data['Login']['email'] == $post['email'] && $data['Login']['username'] == $post['username'] && $code = $post['code']){
            $password = substr($post['email'],'0','6');
            //调用组件方法
            $password = $this->publicFunction->encrypt($password);
            $data['Login']['password'] = $password;
            $admin = ClassRegistry::init('Admin');
            $data = $admin->dellAdmin($data['Login']);
            exit(json_encode(200));
        }else{
            exit(json_encode(400));
        }
    }
    
    
}
总结

这里需要注意的就是关于组件类的声明需要小驼峰式,这里只要注意了就不会有什么问题了

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-07-16 10:58:33  更:2021-07-16 10:58:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/8 3:43:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码