在Yii中导入外部php文件

时间:2011-07-25 09:34:16

标签: php yii

我有一些使用原始php(包括配置文件)的文件,这些文件用于我服务器中的自动邮件。

假设在这个文件中我定义了几个常量(define(...))和一个填充了数据库连接信息的数组,比如用户,主机等等。

该网站使用Yii完成,因此它也使用配置文件。

这些原始文件可以放在任何地方(在受保护的,在外面的,在index.php的同一级别,无论如何)。

现在出现的问题是我在Yii之外有一个不同的配置文件(和数据库的不同用户/密码等等),但我也需要在Yii内部的某些地方使用它。

有没有一种明确的方法可以将这些文件导入控制器?我已经完成了将它们放在扩展中,但原始功能从那里起作用。

2 个答案:

答案 0 :(得分:0)

最好的方法是查看是否可以将自定义代码放入类文件中并将它们放在组件目录或类似文件中,并将文件转换为类(如果它们尚未存在)。这样你就可以获得你的数据,而不需要很多混合代码,而这些代码很难维护。

答案 1 :(得分:0)

简单的方法是将文件放在扩展名中,并将扩展的路径添加到yii配置中。然后创建一个控制器并从其动作中调用方法。让我们考虑swiftmailer的一个例子。这是您可以使用的自定义控制器。

class mailerController extends Controller{

public function actions()
{
    return array(
         //can add other actions here
    );
}
    public function actionIndex(){

        echo "use mailer?e=<email>&m=<message>&sub=<subject> to send mail from the site to the email address";

    }


    public static function actionSendMail($e,$m,$sub){  

        $content = $m ; // can use a template and then assign to content 
        $SM = new SwiftMailer(); //the external method, should be present in include path
        // Get config
        $mailHost = Yii::app()->params['mailhost'];
        $mailPort = 25; // Optional
        $Transport = $SM->smtpTransport($mailHost, $mailPort);
        $Mailer = $SM->mailer($Transport);
        $Message = $SM
            ->newMessage($sub)
            ->setFrom(Yii::app()->params['sitemail'])
            ->setTo($e)
            ->addPart($content, 'text/html');
        return ( $Mailer->send($Message));
    } }

一旦你的控制器准备就绪,它可以被称为

yoursite.com/mailer?e=<email>&m=<message>&sub=<subject>