Yii从同一个Controller中的其他函数获取变量

时间:2014-11-03 02:58:38

标签: php yii

可以从同一个Controller中的其他函数获取变量吗?

所以我刚刚更新了我的代码...巨大的代码是我的真实代码...所以我希望将$hashfilename_filename转换为另一个函数,以便我可以将其保存到DB

示例:

 class HappyController extends Controller{

   public function actionUploadFile()
{               

    if (isset($_FILES['Filedata']['tmp_name']) && is_uploaded_file($_FILES['Filedata']['tmp_name'])) {                      

        $today = date("Ymd");     

        $slash = Yii::app()->params['slash'];   
        $tmp_folder = Yii::app()->params['tmp_folder'];
        $tmp_folder_with_index_file = $tmp_folder . $slash . 'index.html';
        $tmp_folder_with_date = Yii::app()->params['tmp_folder'] . $today;      

        if (!is_dir($tmp_folder_with_date)){

            mkdir($tmp_folder_with_date, 0755);                     
            copy($tmp_folder_with_index_file, $tmp_folder_with_date . $slash . 'index.html');
        }                   

        $filesize = sprintf("%u", filesize( $_FILES['Filedata']['tmp_name'] )); 

        $hashfilename_filename = md5(time() + 1) . '.apk';  

        $full_path = $tmp_folder_with_date . $slash . $hashfilename_filename;

        if (!move_uploaded_file ($_FILES['Filedata']['tmp_name'], $full_path)){             
            $result['statusCode'] = "500";  
            echo json_encode($result);      
            die();
        }                       

        $result['statusCode'] = "200";          
        $result['today'] = $today;  
        $result['tmp_folder_with_date'] = $tmp_folder_with_date;        
        $result['filesize'] = $filesize;    
        $result['hashfilename_filename'] = $hashfilename_filename;  
        $result['full_path'] = $full_path;  


    }else{
        $result['statusCode'] = "400";          
    }       

    echo json_encode($result);      
    die();
}


public function actionLife(){
     $model = new ThisisLife();
     $model->sad   = $hashfilename_filename;
     $model->save();
    }


}

在公共功能actionLife中,我希望从其他功能中获取变量,是否有任何建议?

3 个答案:

答案 0 :(得分:2)

尝试将其存储在会话变量中;

 public function actionAbc(){
    $full_path = a + b;
    Yii::app()->user->setState('full_path', $full_path);
 }

 public function actionXyz(){
    $full_path =  Yii::app()->user->getState('full_path');
 }

通过这种方式,您可以从整个平台的任何位置访问此变量。

答案 1 :(得分:0)

在我看来,你想要做的不是正确的方法。 OOP i背后的想法是封装属于一起的代码。因此,如果您需要确定多个地方(或操作)所需的路径,只需将其提取到控制器内的私有函数中即可。这样你就可以从这两个动作中调用这个方法并重用你的代码。

如果你需要在两次调用之间使用这个变量,我宁愿将其作为GET / POST参数传递,因为如果你忘记重置变量,你可能会再次使用相同的文件名...就像它说的那样,它持续整个会议!

您的方法可能如下所示:

private function generatePath()
{ 
    $folder = Yii::app()->params['tmp_folder'] . date("Ymd");
    $folderWithIndex = Yii::app()->params['tmp_folder'] . DIRECTORY_SEPARATOR . 'index.html';

    if (!file_exists($folder)) {
        mkdir($folder, 0755);
        copy($folderWidthIndex, $folder . DIRECTORY_SEPARATOR . 'index.html');
    }

    $filename = md5(time() + 1) . '.apk';    
    return $folder . DIRECTORY_SEPARATOR . $filename;
}

常量DIRECTORY_SEPARATOR是一个php默认常量,用于自动填充"斜杠"当前的文件系统。 还有一个输入:您可以将其设置为yii-alias,而不是在params中定义路径。从长远来看,这使生活变得更加容易。请务必在此处查看:https://github.com/yiisoft/yii2/blob/master/docs/guide/concept-aliases.md

我希望它有所帮助!

欢呼,帕斯卡

答案 2 :(得分:0)

如果您需要通过控制器访问变量,为什么不让它成为控制器中的私有字段。这样您就可以在整个Controller类中访问它。然后,如果需要,你可能会有getter,setter,就像我们谈论OOP一样。