如何在yii中将变量从动作传递给控制器​​的另一个动作?

时间:2015-08-27 18:54:20

标签: yii

这是我的行动

public function actionUpload()
    {
    $model=new Sop;
    if(isset($_FILES['files'])){
    print_r($_POST['name']);exit;
        $tmp_name = $_FILES['files']['tmp_name'][0];

    $filename = $_FILES['files']['name'][0];


        $new_url = Yii::app()->basePath."/docfile/".$filename;
        move_uploaded_file($tmp_name, $new_url);
        /*if(move_uploaded_file($tmp_name, $new_url)){
            //print_r($filename);exit;
            echo $filename;
        }*/
    }
    else "error";
}

现在我想将$ tmp_name,$ filename和$ new_url传递给此控制器中的另一个操作。

2 个答案:

答案 0 :(得分:1)

由于控制器内的操作旨在处理请求和生成响应,因此我不确定您要实现的目标。您好像没有正确使用Controller

如果您坚持使用控制器操作,则可以使用带有参数的重定向,如以下文档中所示:http://www.yiiframework.com/doc-2.0/yii-web-controller.html#redirect()-detail

一个例子可能是(来自控制器内部):

// /index.php?r=site/destination&tmp_name=$tmp_name&new_url=$new_url&filename=$filename

$this->redirect([
     'site/destination',
     'tmp_name' => $tmp_name,
     'new_url' => $new_url,
     'filename' => $filename,
]);

请注意,这远非理想。我不确定您要实现的目标,但我建议使用Component完成上传(?)作业,而不是将参数发送到完成它的控制器操作。

答案 1 :(得分:0)

假设您要将$ tmp_name,$ filename和$ new_url参数传递给名为" next"在同一个控制器中,它可以像这样完成, 在你的actionUpload()调用操作中接下来是$ this-> actionnext($ tmp_name,$ filename和$ new_url)。

public function actionUpload()
{ 
  //code for actionupload() 
  $this->actionnext($tmp_name , $filename , $new_url); //call to  next action.

}

在控制器中,actionnext()的定义应如下所示:

public function actionnext($tmp_name , $filename , $new_url) 
{
  //your code goes here.
}

并在actionnext函数defination" $ tmp_name,$ filename,$ new_url"只是变量,所以你可以在这里使用任何名称。