可以从同一个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中,我希望从其他功能中获取变量,是否有任何建议?
答案 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一样。