Php Yii从同一控制器中的其他函数获取变量

Php Yii从同一控制器中的其他函数获取变量,php,yii,Php,Yii,是否可以从同一控制器中的其他函数获取变量 所以我刚刚更新了我的代码。。。巨大的代码是我真正的代码。。。因此,我希望将$hashfilename\u filename保存到另一个函数中,以便将其保存到DB中 例如: class HappyController extends Controller{ public function actionUploadFile() { if (isset($_FILES['Filedata']['tmp_name

是否可以从同一控制器中的其他函数获取变量

所以我刚刚更新了我的代码。。。巨大的代码是我真正的代码。。。因此,我希望将
$hashfilename\u 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中,我希望从其他函数获取变量,有什么建议吗?

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

 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');
 }

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

我认为您尝试的方式不正确。OOP i背后的思想是将代码封装在一起。因此,如果您需要确定在多个位置(或操作)中需要的路径,只需将其提取到控制器中自己的私有函数中即可。这样,您可以从两个操作调用此方法并重用代码

如果您在两次调用之间需要这个变量,我宁愿将它作为GET/POST参数传递,否则,如果您忘记重置var,则可能再次使用相同的文件名。正如它所说,它将持续整个会话

您的方法可以如下所示:

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;
}
常量目录分隔符是一个php默认常量,用于自动填充当前文件系统的“斜杠”。 还有一个输入:您可以将路径设置为yii别名,而不是在参数中定义路径。从长远来看,这使生活变得容易多了。请务必在此处查看:

我希望有帮助


干杯,pascal

若您需要通过控制器访问变量,为什么不在控制器中将其设置为私有字段。这样您就可以在整个控制器类中访问它。然后,如果需要,您可以使用getter、setter,正如我们所讨论的OOP一样。

将有价值的声明为全局公共。它是一个变量,所以使用“echo”而不是“print\r”。我认为问题不在于print\r或echo。。。当移动到函数时,变量数据不再存在。我不认为是这样,因为我一直在我的项目中使用它,它工作得很好。一旦你使用setState设置了一个特定的变量,你就可以使用getState在平台上的任何地方(模型、视图、控制器)获取该变量的值。我知道。阅读我的答案和萨加尔的答案。所有这些办法都会奏效。以下输入:如果您需要在同一请求中从一个函数到另一个函数,请关注我的答案。如果需要在两个请求之间传递,请关注Sagar的答案,尤其是状态部分(将其存储在会话变量中的部分不是一个好的解决方案,因为它容易出错……但我认为他还是删除了它)。