Вызов действия из другого контроллера и возврат данных Yii2

У меня есть контроллер, где мне нужно получить доступ к действию от другого контроллера и вернуть данные:

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

Решение

Вы можете сделать это, если вам нужно повторно использовать действие другого контроллера:

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

Но я не рекомендую это. Я предлагаю вам переместить логику в другой компонент, чтобы оба контроллера могли ее использовать.

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();
}
1

Самый простой способ повторно использовать другое действие контроллеров — использовать это:

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

Хотя я не рекомендую это.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector