如何在Lib或Vendor文件中加载组件

时间:2013-11-25 10:00:45

标签: cakephp cakephp-2.0 cakephp-2.3

我正在制作cakephp 2.3。我想将电子邮件组件加载到我的类中,该类位于Lib文件夹中。对于供应商文件也是如此,我正在做的是这个..

App::uses('EmailComponent', 'Controller/Component');
class Email { 

public static function sendemail($toEmail,$template,$subject) {
$this->Email->smtpOptions = array(
                            'port'=>'25',
                            'timeout'=>'30',

                            'host' => 'host',
                            'username'=>'username',
                            'password'=>'password'
                        );


        $this->Email->template = $template;
                        $this->Email->from    = 'no-reply@hello.com';
                        $this->Email->to      = $toEmail;
                        $this->Email->subject = $subject;
                        $this->Email->sendAs = 'both';

                        $this->Email->delivery = 'smtp';

                        $this->Email->send();



    }

我无法使用$this ..我收到此错误

不在对象上下文中

$ this

3 个答案:

答案 0 :(得分:2)

你不这样做,组件是控制器“扩展”,没有它们就不能使用它们。

对于电子邮件目的,请使用CakeEmail class(不管怎样都不推荐使用电子邮件组件)。

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

// ...

$Email = new CakeEmail(array(
    'port'      => 25,
    'timeout'   => 30,
    'host'      => 'host',
    'username'  => 'username',
    'password'  => 'password',
    'transport' => 'Smtp'
));

$Email->template($template)
      ->emailFormat('both')
      ->from('no-reply@hello.com')
      ->to($toEmail)
      ->subject($subject)
      ->send();

答案 1 :(得分:0)

$这可以在类中用于它们的on变量和类中定义的方法 在cakephp $中,当在控制器中定义$ components数组时,这将在控制器中使用。

试试这个

$email = EmailComponent();
$email->$smtpOptions= array(); 

答案 2 :(得分:0)

我能够使用以下内容在Cake 3的Lib课程中克服此问题...

$oRegistry  = new ComponentRegistry();
$oComponent = $oRegistry->load('PluginName.ComponentName');

我不确定这是否会与应用程序组件注册表的状态产生任何不和谐;但是,就我的目的而言,似乎有效。

希望这有助于某人:)