2012-08-14 13 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

'$ यह-> एचटीएमएल' शायद 'शून्य' –

+0

है, तो आप" शायद "खरोंच कर सकते हैं;) मुझे आश्चर्य है कि लोगों को मॉडल में हेल्पर्स सरणी को शामिल करने का विचार कैसे मिलता है ... – mark

+0

@mark, और एक संभव समाधान है? – user1311784

उत्तर

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

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 मुझे लगता है कि मैं केवल $-- HTML-> लिंक ... दृश्य/उपयोगकर्ता फ़ोल्डर में कर सकता हूं। – user1311784

+0

यदि आप $-> set ('pwrurl', $ pwrurl) का उपयोग करते हैं; चर आपके निर्दिष्ट ई-मेल टेम्पलेट में उपलब्ध होगा। मैंने यह सुनिश्चित करने के लिए उपरोक्त कोड चलाया कि यह काम करता है और मैं लिंक भेजने और प्राप्त करने में सक्षम था। – JadedCore

+0

आपका उदाहरण केक 1.3 सही है? खैर, केक 2.2 में टेम्पलेट को/ईमेल/एचटीएमएल/टेम्पलेट.एक्टपी में रखा जाना चाहिए। मुझे अभी भी एक ही त्रुटि मिल रही है। लेकिन अगर मैं उपयोगकर्ता फ़ोल्डर के दृश्य का उपयोग करता हूं तो मैं '$ this-> एचटीएमएल-> लिंक ('लिंक नाम', $ pwrurl, array ('target' => '_blank') का उपयोग कर सकता हूं; अच्छी तरह। ' – user1311784

संबंधित मुद्दे