2012-08-14 136 views
5

此代碼輸出:發送電子郵件鏈接

Call to a member function link() on a non-object 

我要的是在郵件發送的鏈接。代碼有什麼問題?感謝

class User extends AppModel { 
    public $helpers = array('Html'); 
    public function sendEmail($email_user, $code) { 
      $email = new CakeEmail(); 
      $email->config('smtp'); 

      $pwrurl = "http://xxx/users?se=check&mail=".$email_user."&code=".$code; 
      $link = $this->Html->link('Link name', $pwrurl, array('target' => '_blank')); 
      $email->from(array('[email protected]' => 'xxxx')) 
      ->to($email_user) 
      ->emailFormat('html') 
      ->send('My message:: '.$link); 
      return true; 
     } 
} 

docs

更新:我得到了同樣的錯誤。

App::uses('CakeEmail', 'Network/Email'); 
App::uses('AppHelper', 'View/Helper'); 

class AppController extends Controller { 
     public $helpers = array('Form', 'Html'); 

     public function sendEmail($email_user, $codeLink) { 
      //same code. 
     } 

}

+1

'$ this-> Html'很可能是'null' – 2012-08-14 01:39:17

+0

你可以從頭開始「可能」;)我想知道人們是如何得到這個想法的:將helpers數組包含在模型中... – mark 2012-08-14 02:12:44

+0

@mark,解決方案是? – user1311784 2012-08-14 02:18:24

回答

0

,而不是上面的代碼,你可以嘗試使用以下命令:

App::uses('HtmlHelper', 'View/Helper'); 
class User extends AppModel { 
public function sendEmail($email_user, $code) { 
     $email = new CakeEmail(); 
     $email->config('smtp'); 

     $pwrurl = "http://xxx/users?se=check&mail=".$email_user."&code=".$code; 
     $link = $this->Html->link('Link name', $pwrurl, array('target' => '_blank')); 
     $email->from(array('[email protected]' => 'xxxx')) 
     ->to($email_user) 
     ->emailFormat('html') 
     ->send('My message:: '.$link); 
     return true; 
    } 
} 

至於因爲$helpers是控制器的有效數據成員,而不是爲楷模。這也是寫在你的AppController.php的sendEmail()方法和調用此方法將使用$this->sendEmail($user_email, $code);

This documentation page可以幫助你達到同樣的控制器的方法一個很好的選擇。

希望它能爲你工作。

+0

即使我將代碼放在控制器中,我也會得到完全相同的錯誤。 – user1311784 2012-08-15 16:53:14

1

here

$pwrurl = '<a href="http://' . $_SERVER['SERVER_NAME'] ."https://stackoverflow.com/users/otpregister/".$email_user."&code=".$codeLink.'"> Registration link</a>'; 
2

也許應該有這樣的控制器:

class UsersController extends AppController { 
    var $name = 'Users'; 
    var $helpers = array('Html'); 
    var $components = array('Email'); 

    function _email($email_user, $code){ 
     $pwrurl = "http://xxx/users?se=check&mail=".$email_user."&code=".$code; 
     $this->Email->from = 'From: Someone'; 
     $this->Email->to = $email_user; 
     $this->Email->subject = 'Your Subject'; 
     $this->Email->sendAs = 'html'; 
     $this->Email->template = 'your_template'; 
     $this->set('pwrurl', $pwrurl); 
     $this->Email->send(); 
    } 
} 

然後創建視圖/元素/電子郵件/ HTML電子郵件模板命名一樣的模板在上面的代碼中。對於這個例子your_template.ctp。撰寫郵件的方式,你希望它看起來以及任何你想要的鏈接出現使用:

$this->Html->link('Link name', $pwrurl, array('target' => '_blank')); 

希望這會有所幫助。

+0

我將得到一個未定義的變量:模板中的pwrurl。 \t我認爲我只能在view/users文件夾中做$ this-> HTML-> link ...。 – user1311784 2012-08-15 23:28:04

+0

如果使用$ this-> set('pwrurl',$ pwrurl);該變量將在您指定的電子郵件模板中可用。我運行了上面的代碼以確保它能正常工作,並且我能夠發送和接收鏈接。 – JadedCore 2012-08-16 13:10:10

+0

你的例子是蛋糕1.3的權利?那麼,Cake 2.2中的模板應該放在view/email/html/template.ctp中。我仍然收到相同的錯誤。但如果我使用用戶文件夾的視圖,那麼我可以使用'$ this-> Html->鏈接('Link name',$ pwrurl,array('target'=>'_blank'));正常。 ' – user1311784 2012-08-16 14:17:25