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。你为什么不推荐它呢?