2014-04-13 2 views
0

내 사용자에게 보내는 전자 메일에 링크를 삽입해야합니다. 그래서이 메일을 보내는 Entity 클래스가 있습니다. 그러나 나는 ZF2의 view/controller 시스템의 "url"메소드로 어떻게이 링크를 만들 수 있는지 모른다.내 엔티티 클래스에서 URL ZF2를 사용하는 방법

내 클래스입니다 : 당신이 나를

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

이런 일을하는 것은 매우 잘못된 장소입니다. 엔티티는 Data-Objects이며 거의 (거의) 그 이상입니다. 이를 서비스로 아웃소싱하고 ViewHelperManager를 통해 URL ViewHelper를 삽입하십시오. – Sam

답변

2

디자인 측면에서 도메인 모델이 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을 포함 할 필요가있는 $messagethe 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); 
    } 
} 

이러한 인위적인 예입니다하지만 내 요점은 당신이 당신이 "물건을 할"당신의 기업에 대한 유일한 정보를 저장 있도록해야한다는 것입니다입니다. 입니다.

+0

감사합니다. 예를 들어 사용자의 메일 주소를 확인하기 위해 메일을 보내려면 컨트롤러에 다음과 같이 써야합니다. public function registrationAction() { if ($ this-> userService-> addUser ($ data)) { $ this-> sendMail ($ data-> user_email); } } public function sendMail ($ email) { $ url = $ this-> url() -> fromRoute ("verifyLink"); $ text = "주소를 확인하려면 여기를 클릭하십시오 $ url"; $ this-> userService-> sendMail ($ email, $ text); } – LionAlex

+0

좋아요. 내 예제에는 일반적인 유효성 검사가 포함되지 않았 음을 기억하십시오. 따라서 사용자로부터 전자 메일 주소를 가져올 때 유효성이 검사 된 양식 데이터'$ form-> isValid() == true'를 사용해야하고 사용자 엔터티를 만들고 이메일 또는 귀하의 필요에 따라 달라질 수 있습니다. – AlexP

관련 문제