Тут наверное любой ответ будет спорным, но я думаю лучше поступать так:
в конфиге (или в базовом контролере) цепляемся за событие beforeAction:
'on beforeAction' => function($event){
Yii::$app->params['menuData'] = ArrayHelper::map(Imagemenumain::find()->all(),'id','title');
//ArrayHelper тут для примера, хотел обозначить, что не стоит засовывать в params более чем нужно виджету. Там должен оказаться подготовленный массив с нужными данными
},
в views/layout/main.php юзаем виджет
echo SomeMyWidget::widget([
'someWidgetParam' => Yii::$app->params['menuData'],
'someWidgetParam2' => 'маракуя',
'otmetitOtvetom' => true
]);
Виджет не должен знать о базе данных. Завтра сменится структура базы, а виджет продолжит работать. Так как он получает определенный массив данных. И при смене структуры БД вы просто смените метод формирования нужного массива, что бы передать в виджет. По той же причине его можно будет переиспользовать в других проектах.
ПыСы: Формирование массива вместе с запросом в базу наверное имеет смысл закешировать.