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
/*** 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 ="您的验证码为:"
.$code."";//调用组件类的方法$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));}}}
总结
这里需要注意的就是关于组件类的声明需要小驼峰式,这里只要注意了就不会有什么问题了
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
