我有控制器,我需要从另一个控制器访问一个动作并返回数据:
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
}
我该怎么做?
答案 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']);
虽然我不推荐它。