Dopo alcune considerazioni il modo in cui ho scelto di chiamare un controller dall'interno di un altro era utilizzando il metodo runAction del controller (che è anche il modo consigliato dagli sviluppatori di Yii).
Esempio per un'applicazione console:
\Yii::$app->runAction('webserver/update-config');
È anche possibile consegnare params utilizzando una matrice come secondo parametro.
Un esempio per semplici parametri:
\Yii::$app->runAction('webserver/update-config', array('oneValue','anotherValue');
Ecco un esempio per i parametri denominati:
\Yii::$app->runAction('webserver/update-config', array('servertype'=>'oneSetting', 'serverdir'=>'anotherSettingValue')
Si prega di notare che questo rende la chiamata di controllo di una parte del codice chiamante. Quindi se il controller chiamato fallisce per qualche motivo l'intero programma fallisce. Una buona gestione degli errori è un must. Nel controller chiamato è possibile impostare il codice di errore da restituire utilizzando return.
Esempio:
del chiamante di codice:
$iExitCode=\Yii::$app->runAction('webserver/update-config', array('oneValue','anotherValue');
controller chiamato:
<?php
namespace app\commands;
use yii\console\Controller;
/**
* Webserver related functions
*/
class WebserverController extends Controller {
public function actionUpdateConfig($oneValue, $anotherValue)
{
// Code that does something
if ($success) return 0;
else return 1;
}
}
?>
consultare questo forse utile: https://github.com/vova07/yii2-console- runner-extension –