2014-11-03 58 views
1

从同一个控制器中的其他函数中获取变量是否可能?Yii从同一个控制器中的其他函数中获取变量

所以我刚刚更新了我的代码......庞大的代码是我真正的代码......所以我希望得到的$hashfilename_filename给另一个函数,所以我可以把它保存到数据库

例子:

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,我希望从其他函数获取变量,任何建议要做到这一点?

+1

宣布全球公众的价值。 – MH2K9 2014-11-03 03:05:58

回答

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

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

+0

我试过,但是当我print_r变量时它是空的... – TheSmile 2014-11-03 10:11:57

+0

它是一个变量,所以使用“echo”而不是“print_r”。 – 2014-11-03 10:43:50

+0

我认为问题不是的print_r或回声......当移动到函数中的变量数据不复存在 – TheSmile 2014-11-04 01:07:30

0

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

如果您需要两个电话之间这个变量,我宁愿把它作为一个GET/POST参数作为otherway如果你忘了复位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; 
} 

常数DIRECTORY_SEPARATOR是一个PHP默认常量在当前的文件系统的“斜线”自动填写。 另外一个输入:可以将其设置为yii-alias,而不是在params中定义路径。这从长远来看使得生活变得更容易。一定要看看这里:https://github.com/yiisoft/yii2/blob/master/docs/guide/concept-aliases.md

我希望它帮助!

欢呼声,帕斯卡

+0

谢谢,但我需要的是变量到另一个功能... – TheSmile 2014-11-04 01:10:14

+0

我知道。阅读我的答案和Sagar的答案。所有这些消息都会起作用。以下输入:如果您需要从“同一请求”中的一个功能到另一个功能,将焦点放在我的答案上。如果您需要在两个请求之间传递它,请关注Sagar的答案,特别是状态部分(将它存储在会话变量中的部分不会是一个好的解决方案,因为它容易出错......但我无论如何他认为他已经将其删除)。 – PLM57 2014-11-04 09:06:29

0

如果需要通过控制器,为什么不ü使其在控制器中的私有字段访问变量。以便您可以在整个Controller类中访问它。如果需要的话,你可能会有吸气剂,吸附剂,因为我们正在谈论OOP。

相关问题