我正在尝试在我的应用程序中实现服务层。但是,当我从服务层向用户发送邮件时,我面临着问题。
问题:
我正在尝试从服务层发送电子邮件确认,其中包括我的网站路径,如
<a href="www.mysite.com/email-confirmation/email/verificationToken">Click Here to verify your account</a>
如何在服务邮件中创建链接?我在某人的控制器中看到了以下示例,但我该如何处理此服务层?
->setBody("Please, click the link to confirm your registration => " .
$this->getRequest()->getServer('HTTP_ORIGIN') .
$this->url()->fromRoute('auth-doctrine/default', array(
'controller' => 'registration',
'action' => 'confirm-email',
'id' => $user->getUsrRegistrationToken())));
答案 0 :(得分:1)
如果您的服务层与模型文件类似,则将以下代码行添加到服务层类文件中 -
protected $router;
protected $request;
public function setRouter($router = null) {
$this->router = $router;
}
public function getRouter() {
return $this->router;
}
public function setRequest($request = null) {
$this->request = $request;
}
public function getRequest() {
return $this->request;
}
现在,从Controller类开始,当您使用Service Layer类时,请执行以下操作 - (可能不完全相同,但您会明白这一点)
控制器类 -
$service_layer_classname = new ServiceLayer_ClassName();
$service_layer_classname->setRequest($this->getRequest());
$service_layer_classname->setRouter($this->getEvent()->getRouter());
通过这种方式,您可以使用类似的功能在服务层类中获取基于Controller的访问权限。
OR
以简短但不推荐的方式,您可以将整个控制器对象(即$ this)传递给Service Layer类并访问所有函数。 显然这不是一个好的编程方法。
我希望它有所帮助。
答案 1 :(得分:0)
试试这个 -
$prefix = isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on' ? 'https' : 'http';
$server_name = $_SERVER['SERVER_NAME'];
$url = $this->getEvent()->getRouter()->assemble(
array(
'controller' => 'registration',
'action' => 'confirm-email',
'id' => $user->getUsrRegistrationToken()
),
array('name' => 'ROUTE_NAME')
);
/*PLEASE REPLACE THE above 'ROUTE_NAME' WITH THE ONE YOU MUST HAVE USED FOR 'registration' CONTROLLER*/
$full_url = $prefix . "://" . $server_name . $url;
->setBody("Please, click the link to confirm your registration => " .
$this->getRequest()->getServer('HTTP_ORIGIN') .
$full_url
);
Note: Try echoing the $full_url variable if required.