cakephp组件:
概述:
组件(Components)是在控制器之间共享的封装了的逻辑。CakePHP 附带一套非常棒的核心 组件,可帮你完成各种常见任务。你也可以创建自己的组件。如果你发现自己要在控制器间 复制粘贴代码,就应当考虑创建自己的组件,封装这些功能。创建组件可以保持控制器代码 简洁,并且让你可以在不同的项目中重用代码。
上面是官方手册对于组件的解释,在我目前博客系统写的功能中就有几个可以定义成组件,可以供所有控制器使用,比如密码加密函数、发送邮箱函数等等都是可以定义成组件,下面介绍组件的具体使用方法。
1、组件的定义
这里定义的是PublicFunctionComponent组件类:类名为PublicFunctionComponent.php
App::uses('Component', 'Controller');
class PublicFunctionComponent extends Component
{
function encrypt($data)
{
$salt = "123123asdasdasd";
$psw = md5($salt . md5($data));
return $psw;
}
}
这里定义的是EmailComponent组件类:类名为EmailComponent.php
<?php
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
{
function sendmail($email,$content){
$mail = new PHPMailer(true);
try{
$mail->CharSet ="UTF-8";
$mail->SMTPDebug = 0;
$mail->isSMTP();
$mail->Host = 'smtp.qq.com';
$mail->SMTPAuth = true;
$mail->Username = '2717719404@qq.com';
$mail->Password = 'tcviesfxvxymdhbh';
$mail->SMTPSecure = 'ssl';
$mail->Port = 465;
$mail->setFrom('2717719404@qq.com', 'wyqgg');
$mail->addAddress($email, 'wyq');
$mail->addReplyTo('2717719404@qq.com', 'info');
$mail->isHTML(true);
$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');
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));
}
}
}
总结
这里需要注意的就是关于组件类的声明需要小驼峰式,这里只要注意了就不会有什么问题了
|