在zend框架2的服务层中的baseurl

时间:2014-04-23 17:20:28

标签: url zend-framework2 email-validation service-layer

我正在尝试在我的应用程序中实现服务层。但是,当我从服务层向用户发送邮件时,我面临着问题。

问题:

我正在尝试从服务层发送电子邮件确认,其中包括我的网站路径,如

<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())));

2 个答案:

答案 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.