我有这个方法:
public function activation_code()
{ //activation code sent into db
$activation_code = random_string('alnum', 32);
return $activation_code;
}
我要做的是为此提供发送到我的数据库的帖子数据,但也提供相同激活码的副本,以便我可以将其与“点击此处确认电子邮件”网址连接,即在我的注册时发送给用户的确认电子邮件中。
我该怎么做?我无法提供该方法,因为如果我执行数据库代码并且电子邮件URL代码将不同,那么用户将无法匹配它们并确认其电子邮件地址。
我尝试了许多其他方法,例如在一个地方提供方法,例如
public function create()
{ //get post data and insert into db
$dbcolumn->group_id = 2; //group 1 for admin group 2 for member
$dbcolumn->first_name = $this->input->post('first_name');
$dbcolumn->last_name = $this->input->post('last_name');
$dbcolumn->email = $this->input->post('email');
$dbcolumn->password = $this->hashed();
$dbcolumn->birthday = $this->input->post('year') .
'-' . $this->input->post('month') . '-' . $this->input->post('day');
$dbcolumn->sex = $this->input->post('sex');
$dbcolumn->activation_code = $this->activation_code();
// date and time user joined the website
$dbcolumn->created_on = date('Y-m-d H:i:s', now());
$this->db->insert('users', $dbcolumn);
}
如果查看dbcolumn->激活代码行,您将看到我所做的事情。这有效,代码存储在数据库中。如果我向发送的电子邮件提供相同的“$ this-> activation_code()方法,则代码显然会有所不同。
public function send_confirmation_email()
{ //receives variable from create method
$this->load->library('email');
$this->email->from('wengerarsen@gmail.com', 'my site');
$this->email->to($this->input->post('email'));
$this->email->subject('my site - Activate your account');
//copy of activation code returned from create method
$this->email->message('We\'re back, please click the link to activate your account ' . anchor('http://mysite.com/activation/' . $this->activation_code(), 'Activate my account'));
$this->email->send();
}
正如您所看到的,我将相同的方法$ activation_code()拉入我的发送确认电子邮件方法。这将生成一个全新的代码,这意味着我将无法匹配用户电子邮件中的数据库激活代码和URI段代码。
我试图在return public中创建变量并在send confirmaton电子邮件方法中调用它,但它不起作用。从电子邮件中的URL末尾开始,代码最终丢失。
我尝试了很多不同的方式而不是工作。
也许我在这里遗漏了什么?
建议,例子等将不胜感激。
答案 0 :(得分:0)
每次您致电activation_code()
时,您都会创建新代码,因为您只会将其存储在该功能的范围内。
更好的想法是将其存储为对象属性,如下所示:
public var $_activation_code = null;
public function activation_code() {
if (is_null($this->_activation_code)) {
$this->_activation_code = random_string('alnum', 32);
}
return $this->_activation_code;
}
这将创建代码,如果它还没有为此对象完成,或者只是在方法被多次调用时返回当前代码,这意味着代码将在整个对象中保持一致。