Yii2如何在Controller中包含一个php文件

时间:2015-12-18 09:00:15

标签: php yii2

在我的Yii2框架工作项目中,我想要包含一个php文件。该文件包含两个函数文件名“encryptdecrypt.php”并将其保存在common \ extension文件夹

<?
    public function encryptIt( $q ) {
        $cryptKey  = 'OrangeOnlineMedia';
        $qEncoded      = base64_encode( mcrypt_encrypt( MCRYPT_RIJNDAEL_256, md5( $cryptKey ), $q, MCRYPT_MODE_CBC, md5( md5( $cryptKey ) ) ) );
        return( $qEncoded );
    }

    public function decryptIt( $q ) {
        $cryptKey  = 'OrangeOnlineMedia';
        $qDecoded      = rtrim( mcrypt_decrypt( MCRYPT_RIJNDAEL_256, md5( $cryptKey ), base64_decode( $q ), MCRYPT_MODE_CBC, md5( md5( $cryptKey ) ) ), "\0");
        return( $qDecoded );
    }

    ?>

我在控制器页面中包含此行(“CustomersController”)

页面顶部包含使用此行

$encFile =Yii::getAlias('@common'). '\extensions\encryptdecrypt.php';
require_once($encFile);

并在动作中使用该功能 代码吼叫

public function actionCreate()
{
    $model = new Customers();

    if ($model->load(Yii::$app->request->post()) ) {

        $model->password=encryptIt($model->password);            
        if($model->created_date==null)
        {
          $model->created_date=date('y-m-d') ; 
        }
        $model->save();
        return $this->redirect(['view', 'id' => $model->customer_id]);
    } else {
        return $this->render('create', [
            'model' => $model,
        ]);
    }
}

这里我收到以下错误 “调用未定义的函数backend \ controllers \ encryptIt()”

感谢

4 个答案:

答案 0 :(得分:5)

Yii2 Uses PSR-4 AutoLoader规则,首先保存Security.php

common\extensions文件夹中,然后打开Security.php并在其中创建课程。

<?php

namespace common\extensions;

class Security {

    public function encrypt(){
    // todo
    }

    public function decrypt(){
    // todo
    }

}

然后在您的CustomersController操作Create中使用它:

public function actionCreate()
{
    $model = new Customers();

    if ($model->load(Yii::$app->request->post()) ) {
        $security = new \common\extensions\Security(); // <-- Create Object Here
        $model->password= $security->encrypt($model->password);            
        if($model->created_date==null)
        {
          $model->created_date=date('y-m-d') ; 
        }
        $model->save();
        return $this->redirect(['view', 'id' => $model->customer_id]);
    } else {
        return $this->render('create', [
            'model' => $model,
        ]);
    }
}

在Yii2中BTW你也可以像这样生成安全密码哈希: Yii::$app->security->generatePasswordHash($password);

答案 1 :(得分:0)

尝试获取

 $encFile = Yii::getAlias('@common/extensions/encryptdecrypt.php'); 

也试试

var_dump($encFile) 

并检查路径名

答案 2 :(得分:0)

可能是您使用的是错误的文件夹。 如您所述,文件位于common\extension folder

$encFile =Yii::getAlias('@common'). '\extension\encryptdecrypt.php';
require_once($encFile);

答案 3 :(得分:-2)

使用DOCUMENT_ROOT

  

正在执行当前脚本的文档根目录,如服务器的配置文件中所定义。

示例

要包括文件而不考虑服务器类型,请执行以下操作:

$_SERVER['DOCUMENT_ROOT'] .Yii::getAlias('@common/sub_directory/yourFileName.php');
// outputs something like: /var/www/YiiApp/common/sub_directory/yourFileName.php

# or 
$_SERVER['DOCUMENT_ROOT'] .Yii::getAlias('@web/images/image.jpg');
// outputs something like: /var/www/YiiApp/web/images/image.jpg