从另一个控制器调用操作并返回数据Yii2

时间:2018-01-31 18:26:41

标签: php controller yii2 return action

我有控制器,我需要从另一个控制器访问一个动作并返回数据:

rest/controllers/AController

switch (@$_GET['barcodeType']) 
{
    case '1D':
    {  
            //do action Request1 from BController and return data from 
            this controller
    }
    break;

    case '2D':
    {
            //do action Request2 from BController and return data from 
            this controller
    }
    break;

    default:
    return  ['Wrong barcodeType'];
    break; 
}

soap/controllers/BController

public actionRequest1{
    //do something and return data to AController
}

public actionRequest2{
    //do something and return data to AController
}

我该怎么做?

3 个答案:

答案 0 :(得分:2)

如果您需要重复使用其他控制器的操作,则可以执行此操作:

$result = Yii::$app->runAction('b/request1', ['param1' => 'value1, /* ... */]);

但我不推荐它。我建议你将逻辑移到另一个组件,这样两个控制器都可以使用它。

答案 1 :(得分:1)

你必须在模型中做这样的工作,MVC模式中的控制器不应该做逻辑。您的控制器应该只调用模型方法并返回结果。

在您的情况下,您想要的模型应该扩展yii \ base \ Model,并且应该像

一样使用
switch (@$_GET['barcodeType']) 
{
    case '1D':
    {  
            return Barcode1D::doWork();
    }
    break;

    case '2D':
    {
            return Barcode2D::doWork();
    }
    break;

    default:
    return  ['Wrong barcodeType'];
    break; 
}

public actionRequest1{
    return Barcode1D::doWork();
}

public actionRequest2{
    return Barcode2D::doWork();
}

答案 2 :(得分:1)

重新使用另一个控制器操作的最简单方法是使用:

return $this->redirect(['controller_name/index']); 

虽然我不推荐它。