我必须在发送给我的用户的电子邮件中插入一个链接。所以我有一个发送此邮件的Entity类。但我不知道如何使用ZF2的视图/控制器系统的“url”方法创建此链接。
我的课程是:
class UserEntity
{
public function sendMail($user)
{
$link = $unknow->url("route",array("param" => "param")); //how can create this ?
$text = "click here $link";
$this->sendMail($to,$text);
}
}
你能帮帮我吗?感谢
答案 0 :(得分:2)
在设计方面,让您的域模型负责创建URL(或其他任何不能用最简单的术语描述实体的内容)将是considered bad practice。
我会创建一个UserService
来封装一个SendMail
函数,其中UserEntity
可以作为参数传递,而email
属性用于发送电子邮件。
class UserService {
protected $mailService;
public function __construct(MailService $mailService) {
$this->mailService = $mailService;
}
public function sendUserEmail(UserEntity $user, $message) {
$this->mailService->send($user->getEmail(), $message);
}
}
邮件服务可能是封装Zend\Mail\Transport
个实例的另一项服务。
您的控制器将使用UserService
将邮件发送给正确的用户。
$message
需要包含使用the Zend\Mvc\Controller\Plugin\Url
controller plugin
class UserController extends AbstractActionController {
protected $userService;
public function __construct(UserService $userService) {
$this->userService = $userService;
}
public function sendEmailAction() {
// load $user from route params or form post data
$user = $this->userService->findUserByTheirId($this->params('id'));
// Generate the url
$url = $this->url()->fromRoute('user/foo', array('bar' => 'param1'));
$message = sprintf('This is the email text <a href="%s">link</a>!', $url);
$this->userService->sendUserEmail($user, $message);
}
}
这些都是人为设想的例子,但我的观点是,你应该只在你的实体中存储信息,允许你用“做事”,而不是在中。