디자인 측면에서 도메인 모델이 URL (또는 가장 간단한 용어로 엔티티를 설명하지 않는 것)을 작성하게하려면 considered bad practice이됩니다.
은 내가 UserEntity
가 인수로 전달 될 수는 A SendMail
기능을 캡슐화 것 UserService
만들 것입니다 그것은 이메일을 보내는 데 사용 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
을 사용하여 올바른 사용자에게 메일을 보냅니다.
사용하여 생성 된 URL을 포함 할 필요가있는 $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);
}
}
이러한 인위적인 예입니다하지만 내 요점은 당신이 당신이 "물건을 할"당신의 기업에 대한 유일한 정보를 저장 있도록해야한다는 것입니다입니다. 은입니다.
이런 일을하는 것은 매우 잘못된 장소입니다. 엔티티는 Data-Objects이며 거의 (거의) 그 이상입니다. 이를 서비스로 아웃소싱하고 ViewHelperManager를 통해 URL ViewHelper를 삽입하십시오. – Sam