如何在我的实体类中使用URL ZF2

时间:2014-04-13 11:00:28

标签: url hyperlink frameworks zend-framework2

我必须在发送给我的用户的电子邮件中插入一个链接。所以我有一个发送此邮件的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);
  }
}
你能帮帮我吗?感谢

1 个答案:

答案 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);
   }
}

这些都是人为设想的例子,但我的观点是,你应该只在你的实体中存储信息,允许你用“做事”,而不是中。