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的答案,尤其是状态部分(将其存储在会话变量中的部分不是一个好的解决方案,因为它容易出错……但我认为他还是删除了它)。