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

Php 从另一个控制器调用操作并返回数据Yii2,php,controller,yii2,return,action,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':

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

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; 
}
public actionRequest1{
    //do something and return data to AController
}

public actionRequest2{
    //do something and return data to AController
}
soap/控制器/b控制器

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; 
}
public actionRequest1{
    //do something and return data to AController
}

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

如何执行此操作?

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

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

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

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

在您的情况下,您想要的模型应该扩展yii\base\model,并且应该像这样使用

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

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

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


恢复其他控制器操作的最简单方法是使用以下命令:

return $this->redirect(['controller_name/index']); 
虽然我不推荐。
最好在模型中创建一个包含所需信息的静态函数,然后在需要时调用它。

当您说执行
操作时,您指的是该控制器内的任何简单函数还是
操作函数
使用param
$barcode
准备一个操作,然后根据需要调用函数已通过
条码类型
。不要调用不同的控制器操作。欢迎使用Human-Device。你为什么不推荐它呢?