从同一控制器的一个动作调用另一个动作

时间:2014-04-08 05:16:54

标签: php yii controller

我是YII的新手。如何从同一控制器的另一个动作调用动作。 假设我在行动A.我需要用两个参数调用动作B.我的控制器名称是Master Controller。我将如何执行此操作。请说我一个解决方案。提前谢谢。

我的控制器:

class NimsoftController extends Controller
{
    public function actionStore_action($action,$data_id)
    {
          $model= new NimsoftUserLoginAction;
          $model->user_id=Yii::app()->user->id;
          $model->action=$action;//"Deleted";
          $model->affected_data_id=$data_id;//"22";
          $model->save();
    }

    public function actionSearch($id)
    {
        $cust_id = $id;
        $criteria = new CDbCriteria();
        $criteria->condition = "host_customer_id = '$cust_id'";
        $details = NimsoftHost::model()->find($criteria);

        $criteria2 = new CDbCriteria();
        $criteria2->condition = "cust_id= '$details->host_customer_id'";
        $name = MasterCustomers::model()->find($criteria2);

        $dataProvider = new CActiveDataProvider('NimsoftHost', array(
            'criteria' => $criteria,
            'pagination'=>array('pageSize'=>40)
        ));
        $model = new NimsoftHost();
        $this->actionStore_action(array('action'=>'search', 'data_id'=>$cust_id));
        $this->render('index',array(
            'dataProvider' => $dataProvider,
            'details' => $details,
            'name' => $name->cust_name,
            'model' => $model
        ));
    }
}

4 个答案:

答案 0 :(得分:4)

您可以直接调用该函数,或者

$this->actionMyCustomAction(); exit;

您可以执行重定向操作:

$this->redirect('anotherControllerName/myCustomAction');

或者如果你在同一个控制器中,那就是这个:

$this->redirect('myCustomAction');

<强>更新

你错误地传递了变量:

$this->actionStore_action(array('action'=>'search', 'data_id'=>$cust_id));

它应该是两个独立的变量:

$this->actionStore_action('search', $cust_id);

这与Yii没什么关系。这是唯一的基本功能调用。

答案 1 :(得分:1)

$this->forward('site/contact');

如果转发,您的网址不会更改,您也无法在此处发送额外参数。

如果您想发送额外参数,请使用重定向。

   $this->redirect(Yii::app()->createUrl('site/contact', array('id' => '22')));

希望这会对你有帮助..

答案 2 :(得分:0)

你也可以这样做: -

现在你想在动作Name2中调用动作Name1。

public function actionName1($param1,$param2) {

    //your code...

}

public function actionName2() {

    $this->redirect(array('name1','param1'=>'param1','param2'=>'param2'));

}

答案 3 :(得分:0)

如果转发,您的网址不会更改,您也无法在此处发送额外参数。

$this->redirect('contact');